воскресенье, 31 января 2016 г.

swtoolz-core

В свое время swtoolz оказался полезным сервисом и мне давно хотелось вдохнуть в него новую жизнь, пересмотрев кое в чем прежний подход. На практике интерфейс скрипта часто переделывался пользователями и, поскольку, для меня это самая сложная часть, то в новом проекте я решил его вообще не делать. :) В итоге осталась только функциональная часть - неизменяемое ядро с внешними модулями конфигурации. Поэтому новый проект называется 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, которая будет возвращать метрики для всей этой ветки и будет работать для любого коммутатора. Логика работы при этом такова:
  1. Первым запросом демон запрашивает sysDescr и sysName устройства, IP-адрес которого был передан ему в запросе
  2. Если ответ был получен, то согласно пользовательским настройкам выполняется классификация устройства
  3. Далее демон пытается подключить файл с настройками, соответствующий данному классу
  4. Из данного файла извлекается объект "walk_swL2PortCtrlAdminState" (в данном случае)
  5. Демон запускает отдельный поток где объект интерпретируется и в него помещаются пользовательские параметры (если заданы)
  6. Поток выполняет опрос устройства
  7. Результаты возвращаются пользователю в json

На данный момент swtoolz-core проходит внутреннее тестирование. С его помощью рассчитываю "научить" наш внутренний корпоративный сервис работать с моделями устройств, которые он ранее не подерживал.

2 комментария:

  1. Здорово, осталось дождаться Linux

    ОтветитьУдалить
  2. Оказалось, что под Linux все прекрасно работает и так. Потребовалось только написать скрипт управления сервисом.

    https://github.com/xcme/swtoolz-core

    ОтветитьУдалить