В свое время swtoolz оказался полезным сервисом и мне давно хотелось вдохнуть в него новую жизнь, пересмотрев кое в чем прежний подход. На практике интерфейс скрипта часто переделывался пользователями и, поскольку, для меня это самая сложная часть, то в новом проекте я решил его вообще не делать. :) В итоге осталась только функциональная часть - неизменяемое ядро с внешними модулями конфигурации. Поэтому новый проект называется swtoolz-core и имеет следующие особенности:
Все это позволяет получить единый интерфейс с единым набором команд. К примеру, если мы вызываем команду enablePort с параметром 1 для конкретного IP, то сервис уже сам определяет что это за устройство и как конкретно для него выполнить "enable" для 1-го порта.
На данный момент swtoolz-core проходит внутреннее тестирование. С его помощью рассчитываю "научить" наш внутренний корпоративный сервис работать с моделями устройств, которые он ранее не подерживал.
- Теперь это демон, работающий под FreeBSD (Linux в планах)
- Для каждой модели устройства используется произвольный набор пользовательских операций Get/Walk/Set
- В любой OID можно подставлять произвольное число пользовательских параметров
- Сервис сам определяет модель устройства и находит соответствующий файл с настройками
- Модели можно классифицировать как по sysDescr, так и по sysName
- Изменение наборов OID для устройств не требует перезагрузки сервиса
- Взаимодействие с сервисом осуществляется через API путем запроса соответствующего URL
- Одним запросом к сервису можно выполнить несколько операций
- Можно упаковывать несколько запросов в один пакет, как это сделано в Briseis
- Результат опроса возвращается в json
Все это позволяет получить единый интерфейс с единым набором команд. К примеру, если мы вызываем команду enablePort с параметром 1 для конкретного IP, то сервис уже сам определяет что это за устройство и как конкретно для него выполнить "enable" для 1-го порта.
Аналогично дело обстоит и с операциями чтения. На странице приведены примеры некоторых OID для популярных моделей коммутаторов D-Link. Легко заметить, что, к примеру, административный статус порта для разных моделей определяется при помощи различных OID. С помощью swtoolz-core можно сделать общую команду, например walk_swL2PortCtrlAdminState, которая будет возвращать метрики для всей этой ветки и будет работать для любого коммутатора. Логика работы при этом такова:
- Первым запросом демон запрашивает sysDescr и sysName устройства, IP-адрес которого был передан ему в запросе
- Если ответ был получен, то согласно пользовательским настройкам выполняется классификация устройства
- Далее демон пытается подключить файл с настройками, соответствующий данному классу
- Из данного файла извлекается объект "walk_swL2PortCtrlAdminState" (в данном случае)
- Демон запускает отдельный поток где объект интерпретируется и в него помещаются пользовательские параметры (если заданы)
- Поток выполняет опрос устройства
- Результаты возвращаются пользователю в json
На данный момент swtoolz-core проходит внутреннее тестирование. С его помощью рассчитываю "научить" наш внутренний корпоративный сервис работать с моделями устройств, которые он ранее не подерживал.