Создание обработчика PDU
Вы можете добавить в DCImanager 6 собственный обработчик PDU. Для этого создайте код обработчика и загрузите его в платформу.
Подготовка окружения
Обработчик PDU должен быть написан на языке Python. Рекомендуем использовать версию Python 3.9.
Вы можете создать обработчик на основе существующего проекта. Чтобы скопировать проект, подключитесь к серверу-локации DCImanager 6 по SSH и выполните команду:
При создании обработчика могут быть полезны директории проекта:
- /common — общие вспомогательные классы и функции;
- /pdu_common — вспомогательные классы и функции для работы с PDU;
- /pdu_common/handlers — обработчики PDU.
Требуемые библиотеки Python и их версии вы можете посмотреть в файле проекта requirements.txt. Чтобы установить нужные библиотеки, выполните команду:
Для проверки типов данных в проекте рекомендуем использовать анализатор mypy.
Создание обработчика
Класс для работы с PDU

Класс PDU наследуется от класса:
- BaseSnmpPdu — для устройств, работающих через протокол SNMP;
- BasePdu — для остальных устройств.
Класс BaseSnmpPdu содержит методы взаимодействия с PDU по протоколу SNMP:
- snmp_get — выполнить запрос чтения по определённому OID;
- snmp_set — выполнить модифицирующий запрос по определённому OID;
- snmp_walk — выполнить запрос, результатом которого будет список.
Пример описания класса
Чтобы получить данные для подключения к PDU, используйте метод self.pdu_data:
Пример для получения community
Примеры SNMP-запросов к PDU:
Получение имени устройства
Изменение имени устройства
Получение данных о системе устройства
Каждый файл-обработчик должен содержать функцию make_handler. Эта функция создаёт объект обработчика:
Пример функции
Методы для работы с PDU

Чтобы DCImanager 6 мог взаимодействовать с PDU, переопределите методы класса BasePdu:
- status — опрос PDU;
- port_up — включение порта;
- port_down — выключение порта;
- statistic — сбор статистики.
Для каждого метода существуют типы аргументов и возвращаемые значения, которые ожидает платформа. Сервис работы с оборудованием при взаимодействии с PDU использует не "сырые" json-данные, а их объектное представление. Например, для включения порта методом port_up в качестве параметра передаётся объект класса PduPortView cо свойствами:
- identify — идентификатор порта PDU;
- power_status — состояние порта PDU в DCImanager 6.
В ответе ожидается объект того же класса с текущим состоянием порта в свойстве power_status.
При переопределении методов укажите требуемый формат запросов и возвращаемых значений. Все вспомогательные представления описаны в файле проекта /pdu_common/helper.py.
Пример кода обработчика
Загрузка обработчика в платформу
Чтобы загрузить обработчик в платформу:
Создайте директорию со следующей структурой:
CODEСоздайте архив tar.gz с этой директорией:
BASHАвторизуйтесь в DCImanager 6 с правами администратора:
BASHВ ответ придёт сообщение вида:
YMLСохраните из полученного ответа значение параметра token — токена авторизации.
Создайте описание для обработчика:
BASHОтвет будет содержать id созданного разработчика. Сохраните это значение.
Пример ответа
CODEЗагрузите архив с обработчиком в платформу:
BASHОбратите внимание!
Вы также можете использовать эту команду для загрузки новых версий обработчика в платформу.