From 197550558de864986e6720145129d8ae3781c326 Mon Sep 17 00:00:00 2001 From: IluaAir Date: Sat, 28 Feb 2026 10:39:03 +0300 Subject: [PATCH] Add Huawei model and TTP template - Introduced a new `Huawei` model - Created a corresponding TTP template for Huawei devices. - Updated the base template to correct HTML entity encoding for vendor placeholders. --- oxi/interfaces/models/huawei.py | 18 ++++++ oxi/interfaces/models/templates/_template.ttp | 2 +- oxi/interfaces/models/templates/huawei.ttp | 58 +++++++++++++++++++ 3 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 oxi/interfaces/models/huawei.py create mode 100644 oxi/interfaces/models/templates/huawei.ttp diff --git a/oxi/interfaces/models/huawei.py b/oxi/interfaces/models/huawei.py new file mode 100644 index 0000000..4d53dbb --- /dev/null +++ b/oxi/interfaces/models/huawei.py @@ -0,0 +1,18 @@ +from oxi.interfaces import register_parser +from oxi.interfaces.base import BaseDevice + + +@register_parser(["vrp", "huawei"]) +class Huawei(BaseDevice): + template = "huawei.ttp" + + def vlans(self): + vlan_ids = self.raw["vlans"].get("vlan_ids") + return [{"vlan_id": vlan} for vlan in vlan_ids] + + +if __name__ == "__main__": + with open("./test4.txt") as file: + data = file.read() + huawei = Huawei(data) + print(huawei.parse()) diff --git a/oxi/interfaces/models/templates/_template.ttp b/oxi/interfaces/models/templates/_template.ttp index 3e6593d..2362b98 100644 --- a/oxi/interfaces/models/templates/_template.ttp +++ b/oxi/interfaces/models/templates/_template.ttp @@ -1,6 +1,6 @@ Базовый шаблон для нового устройства. Скопируйте этот файл, переименуйте -в .ttp и заполните группы под формат конфигурации вашего устройства. +в <vendor>.ttp и заполните группы под формат конфигурации вашего устройства. Обязательные группы: system, interfaces. Опциональная группа: vlans — добавляйте только если устройство поддерживает VLAN. diff --git a/oxi/interfaces/models/templates/huawei.ttp b/oxi/interfaces/models/templates/huawei.ttp new file mode 100644 index 0000000..22f6283 --- /dev/null +++ b/oxi/interfaces/models/templates/huawei.ttp @@ -0,0 +1,58 @@ + +Базовый шаблон для нового устройства. Скопируйте этот файл, переименуйте +в <vendor>.ttp и заполните группы под формат конфигурации вашего устройства. + +Обязательные группы: system, interfaces. +Опциональная группа: vlans — добавляйте только если устройство поддерживает VLAN. + +--- Группа system --- +Должна возвращать одиночный словарь с полями: + model (str) — модель устройства + serial_number (str) — серийный номер + version (str) — версия прошивки + +--- Группа interfaces --- +Должна возвращать список словарей. Каждый элемент: + interface (str) — имя интерфейса (alias поля name) + ip_address (str|None) — IPv4-адрес + mask (int|None) — длина префикса (напр. 24) + description (str|None) — описание интерфейса + + Если устройство возвращает маску в виде 255.255.255.0, конвертируйте + её в prefix length в методе interfaces() класса устройства. + +--- Группа vlans --- +Должна возвращать список словарей. Каждый элемент: + id (int) — номер VLAN (alias поля vlan_id) + description (str|None) — название VLAN (alias поля name) + +--- Полезные модификаторы TTP --- + {{ field | ORPHRASE }} — одно слово или фраза до конца строки + {{ field | _start_ }} — начало новой записи группы + {{ field | strip('"') }} — убрать кавычки + {{ field | replace("yes","True") }} — замена подстроки + {{ field | exclude("pattern") }} — пропустить строку при совпадении + {{ ignore }} — захватить и выбросить значение + {{ ignore('.*') }} — выбросить всё до конца строки +Подробнее: docs/templates.md + + +default_system = { + "model": "", + "serial_number": "", + "version": "" +} + + + +# VRP (R) software, Version {{ version }} ({{ model }} {{ serial_number }}) + + + +interface {{ interface }} + description {{ description }} + ip address {{ ip_address }} {{ mask | to_cidr }} + + +vlan batch {{ vlan_ids | ORPHRASE | unrange(" to ", " ") | split(" ")}} +