DCImanager 6
Ловим ваш фидбэк!
Пройдите опрос и станьте главным советником
по улучшениям экосистемы ISPsystem
Пройти опрос

Создание обработчика VPU

Если вы используете Модуль VPU (VLAN Per User), вы можете создать собственный обработчик VPU. Собственный обработчик позволит гибко настроить параметры VPU в соответствии с настройками сетевого оборудования.

Чтобы добавить обработчик, создайте его код и загрузите в платформу.

Подготовка окружения

Обработчик VPU должен быть написан на языке Python. Рекомендуем использовать версию Python 3.9.

Вы можете создать обработчик на основе существующего проекта. Чтобы скопировать проект, подключитесь к серверу-локации DCImanager 6 по SSH и выполните команду:

docker cp eservice_handler:/opt/ispsystem/equip_handler ./

При создании обработчика могут быть полезны директории проекта:

  • /common — общие вспомогательные классы и функции;
  • /vpu_common — вспомогательные классы и функции для работы с VPU;
  • /vpu_common/handlers — обработчики VPU.

Требуемые библиотеки Python и их версии вы можете посмотреть в файле проекта requirements.txt. Чтобы установить нужные библиотеки, выполните команду:

pip3 install -r requirements.txt

Для проверки типов данных в проекте рекомендуем использовать анализатор mypy.

Создание обработчика

Класс для работы с VPU

Класс VPU наследуется от класса BaseVpu.

Пример описания класса
class CustomVpuHandler(BaseVpu):
    """Custom vpu handler"""

    def __init__(self, vpu_data: BaseVpuData):
        """Init CustomVpuHandler object."""
        BaseVpu.__init__(self, vpu_data)

    def check_access(self) -> BaseReplyData:
        """Check router access."""
        logging.debug("custom_vpu: check_access")

        return BaseReplyData("Ok", "check_access")

    def tune_vpu(self) -> BaseReplyData:
        """Tune VPU settings."""
        logging.debug("custom_vpu: tune_vpu")

        return BaseReplyData("Ok", "tune_vpu")

    def create_net(self) -> BaseReplyData:
        """Create net."""
        logging.debug("custom_vpu: create_net")

        return BaseReplyData("Ok", "create_net")

    def delete_net(self) -> BaseReplyData:
        """Delete net."""
        logging.debug("custom_vpu: delete_net")

        return BaseReplyData("Ok", "delete_net")

Чтобы отправлять запросы в коммутатор или маршрутизатор VPU-сети через протокол netconf, выполните наследование от вспомогательного класса BaseNetconf:

Пример описания класса
class CustomVpuHandler(BaseNetconf, BaseVpu):
    """Custom vpu handler"""

    def __init__(self, vpu_data: BaseVpuData):
        """Init CustomVpuHandler object."""
        BaseNetconf.__init__(self,   vpu_data.router_info["router_info"]["netconf_params"])
        BaseVpu.__init__(self, vpu_data)

    def check_access(self) -> BaseReplyData:
        """Check router access."""
        logging.debug("custom_vpu: check_access")

        return BaseReplyData("Ok", "check_access")

    def tune_vpu(self) -> BaseReplyData:
        """Tune VPU settings."""
        logging.debug("custom_vpu: tune_vpu")

        return BaseReplyData("Ok", "tune_vpu")

    def create_net(self) -> BaseReplyData:
        """Create net."""
        logging.debug("custom_vpu: create_net")

        return BaseReplyData("Ok", "create_net")

    def delete_net(self) -> BaseReplyData:
        """Delete net."""
        logging.debug("custom_vpu: delete_net")

        return BaseReplyData("Ok", "delete_net")

Данные для подключения к коммутатору VPU-сети находятся в "vpu_data.router_info["router_info"]["netconf_params"]".

Все данные по VPU можно посмотреть в методе self.vpu_info. Параметры описаны в классе BaseVpuData в файле проекта /vpu_common/vpu_helper.py.

Например, чтобы получить параметры, переданные обработчику, используйте метод self.handler_params.

Каждый файл-обработчик должен содержать функцию make_handler. Эта функция создаёт объект обработчика:

Пример функции
def make_handler(vpu_data: BaseVpuData) -> BaseVpu:
    """Get object for VPU work.

    Args:
        vpu_data (BaseVpuData): VPU information

    Return:
        BaseVpu: Initialized vpu handler object
    """  

    return CustomVpuHandler(vpu_data)

Методы для работы с VPU

Чтобы DCImanager 6 мог взаимодействовать с VPU, переопределите методы класса BaseVpu:

  • check_access — проверка доступа к маршрутизатору для работы с VPU;
  • tune_vpu — предварительная конфигурация маршрутизатора при настройке модуля VPU;
  • create_net — настройка VPU-сети на маршрутизаторе при создании этой сети в интерфейсе DCImanager 6;
  • delete_net — удаление VPU сети на маршрутизаторе при удалении этой сети в интерфейсе DCImanager 6.

При переопределении методов укажите требуемый формат запросов и возвращаемых значений. Все вспомогательные представления описаны в файле проекта /vpu_common/vpu_helper.py.

Загрузка обработчика в платформу

Чтобы загрузить обработчик в платформу:

  1. Создайте директорию со следующей структурой:

    handler_dir/
    ├── __init__.py
    └── my_handler.py
    Пояснения
  2. Создайте архив tar.gz с этой директорией: 

    tar -czvf custom_handler.tar.gz handler_dir
    Пояснения к команде
  3. Авторизуйтесь в DCImanager 6 с правами администратора: 

    curl -o- -k https://example.com/api/auth/v4/public/token \
        -H "isp-box-instance: true" \
        -d '{
            "email": "<admin_email>",
            "password": "<admin_pass>"
        }'
    
    Пояснения к команде

    В ответ придёт сообщение вида: 

    {"id":"24","token":"24-cee181d2-ccaa-4b64-a229-234aa7a25db6"}

    Сохраните из полученного ответа значение параметра token — токена авторизации.

  4. Создайте описание для обработчика: 

    curl -o- -k https://example.com/api/eservice/v3/custom_equipment \
        -H "isp-box-instance: true" \
        -H "x-xsrf-token: <token>" \
        -d '{
            "device_type": "<device>",
            "handler": "<internal_handler_name>",
            "name": "<handler_name>",
            "protocol": ["<handler_protocol>"],
            "features": []
        }'
    
    Пояснения к команде

    Ответ будет содержать id созданного разработчика. Сохраните это значение.

    Пример ответа
    {"id": 1}
  5. Загрузите архив с обработчиком в платформу: 

    curl -o- -k https://example.com/api/eservice/v3/custom_equipment/<handler_id>/content \
        -H "isp-box-instance: true" \
        -H "x-xsrf-token: <token>" \
        -F "data=@custom_handler.tar.gz" \
        -F "handler_import=<import_path>"
    Пояснения к команде
    Вы также можете использовать эту команду для загрузки новых версий обработчика в платформу.

Проверка обработчика

  1. Загрузите обработчик в платформу.
  2. Настройте модуль VPU.
  3. Проверьте как выполняются методы обработчика. Например, создайте или удалите VPU-сеть.



Связанные статьи

Дата последнего обновления статьи: 26.05.2023. Статья подготовлена техническими писателями ISPsystem