Child pages
  • Валидация конфигурации или "Всё правильно сделал"

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Info

Правило не начнёт работать, пока не будет связано с политикий, прикреплённой добавлено в политику (Validation Policy), прикреплённую к конкретному устройству.

...

Expand
titleПример валидатора на CLIPS

Приведём пример валидатора, которые проверяет - назначен ли созданному подинтерфейсу VLAN. Для случая Cisco.IOS настройка выглядит так:

interface FastEthernet0/1.200

encapsulation dot1q 200

В случае если в конфиге будет отсутствовать команда "encapsulation dot1q 200" должна выдаваться ошибка.

Перефразируя вопрос - в фактах интерфейсов присутствует поля:

  • vlan_ids - оно заполняется номером влана, который назначен подинтерфейсу
  • afi - в случае подинтерфейса в нём будет присутствовать слово BRIDGED

Необходимо написать правило, которое в случае отсутствия в случае пустого поля vlan_ids и наличия BRIDGED в afi выдавало ошибку. На левой картинке показаны факты с правильно настроенного интерфейса, а на правой - настроенного с ошибкой.

Image AddedImage Added

Для данного случае стандартные правила нам не подходят. Напишем своё:

Code Block
themeRDark
languagecpp
linenumberstrue
    (defrule {{RULENAME}}
            (subinterface (vlan_ids) (afi $? "BRIDGE" $?) (name ?n))
            =>
            (assert
                (error (type "Interface | MPLS Without ISIS")
                       (obj ?n)))
    )

Данное правило написано на CLIPS и выполнит задачу. Сделаем некоторые пояснения.

  1. {{RULENAME}} - при выполнении данного правила в логах данное поле заменится строкой из Имени правила. Не возбраняется использовать любую текстовую строку
  2. subinterface - показывает что ходить мы будем по блоку, в котором находятся подинтерфейсы. Названия блоков совпадают с таковыми в Facts.
    1. (vlan_ids) - обозначает пустое поле vlan_ids
    2. (afi $? "BRIDGE" $?) - обозначает что в afi (это массив) должен присутствовать "BRIDGE"
    3. (name ?n) - запоминает значение поля name в переменной ?n
  3. знак => показывает переход к блоку действий
  4. assert - ключевое слово, означающее создать исклюение
  5. в данной строке показывается ошибка, которая создаётся. Доступные типы ошибок находятся в папке "cm/collections/errortypes/"
  6. obj ?n - заменится на имя интерфейса

Формируем политики.

После того как написаны правила - необходимо объединить их в политики и привязать к оборудованию (MO). Политики настраиваются в меню "Configuration Management" -> "Setup" -> "Validation Policy".

...