...
Expand | |||||||||
---|---|---|---|---|---|---|---|---|---|
| |||||||||
Приведём пример валидатора, которые проверяет - назначен ли созданному подинтерфейсу VLAN. Для случая Cisco.IOS настройка выглядит так: interface FastEthernet0/1.200 encapsulation dot1q 200 В случае если в конфиге будет отсутствовать команда "encapsulation dot1q 200" должна выдаваться ошибка. Перефразируя вопрос - в фактах интерфейсов присутствует поля:
Необходимо написать правило, которое в случае отсутствия в случае пустого поля vlan_ids и наличия BRIDGED в afi выдавало ошибку. На левой картинке показаны факты с правильно настроенного интерфейса, а на правой - настроенного с ошибкой. Для данного случае стандартные правила нам не подходят. Напишем своё:
Данное правило написано на CLIPS и выполнит задачу. Сделаем некоторые пояснения.
|
Ошибки.
При написании собственных правил возникает вопрос создания собственных типов ошибок. Как вариант, дополнения существующих новой информацией. Типы ошибок доступны в меню "Configuration Management"->Setup->"Error Types".
Для измения доступны поля "Subject Body" и "Body Template". Они применяются при создании аварии, в случае провала проверки.
Встроенные обработчики снабжены хорошими комментариями. Поэтому приведём примеры наиболее востребованных:
Имя | Описание | Опции | Пример | |
---|---|---|---|---|
Config *MUST* match string | В конфигурации должна присутствовать строка. | строка, которую необходимо искать в конфигурации | ||
Hostname *MUST* match regexp | Проверяет hostname на соответствие регулярному выражению | регулярное выражение в формате Python | ||
Interface CLIPS Rules | Позволяет задавать свои CLIPS-based правила, применяются к блоку интерфейсов | правило в формате CLIPS | ||
Object CLIPS Rules | Позволяет задавать свои CLIPS-based правила, прменяются ко всем блокам | правило в формате CLIPS |
Формируем политики.
После того как написаны правила - необходимо объединить их в политики и привязать к оборудованию (MO). Политики настраиваются в меню "Configuration Management" -> "Setup" -> "Validation Policy".
...
Результаты применения политики отобразятся на том же экране Facts. Появится список ошибок. Также на экране правил (Rule) увеличится число в счётчике ошибок рядом с правилом и создастся Alarm.
Важное примечание.
После создания политики и её назначения на устройство НЕ происходит автоматической проверки конфигурации. Проверка пройдёт только после поступления в базу ИЗМЕНЕНИЙ в конфигурации (парсер фактов работает с базой конфигов НОКа).
Данное поведение связано с 2 моментами:
- Действует принцип "Закон обратной силы не имеет". Т.е. считается, что, изначально, все конфиги соответствуют политике.
- Мало приятного получить 2 сотни аварий за минуту
.
Если очень хочется:
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
./noc shell
from noc.cm.engine import Engine
from noc.sa.models.managedobject import ManagedObject
for mo in ManagedObject.objects.filter(is_managed=True):
e = Engine(mo)
e.check() |
Возможные проблемы
- Окошко Facts пустое
- Для данного профиля не написан парсер. Проверить можно посмотрев содержимое папки "cm/parsers/".
- Парсер написан, но не работает. Ошибки необходимо искать в логах web.
- Правило написано, но не обнаруживает ошибку
- Необходимо проверить что правило включено в политику, а политика привязана к устройству.
- Необходимо нажать кнопку Revalidate в окошке Facts.
- Проверить логи web на наличие ошибок (в нём отображается какие правила были применены и результат)
...