From ca96d2600a9e82a7c871d107df56b96283b18c81 Mon Sep 17 00:00:00 2001 From: IluaAir Date: Wed, 11 Mar 2026 23:29:08 +0300 Subject: [PATCH] Add Quasar model and TTP template - Introduced a new `Quasar` model for parsing Quasar devices. - Created a corresponding TTP template defining required and optional groups for configuration parsing. --- oxi/interfaces/models/quasar.py | 21 ++++++++ oxi/interfaces/models/templates/quasar.ttp | 61 ++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 oxi/interfaces/models/quasar.py create mode 100644 oxi/interfaces/models/templates/quasar.ttp diff --git a/oxi/interfaces/models/quasar.py b/oxi/interfaces/models/quasar.py new file mode 100644 index 0000000..f01a005 --- /dev/null +++ b/oxi/interfaces/models/quasar.py @@ -0,0 +1,21 @@ +from oxi.interfaces import BaseDevice, register_parser + + +@register_parser(["quasar", "qos"]) +class Quasar(BaseDevice): + template = "quasar.ttp" + + def interfaces(self) -> list[dict]: + inter = self.raw["interfaces"] + # test = self.raw["mass"] + print(inter) + # print(test) + return inter + + +if __name__ == "__main__": + with open("./test7.txt") as file: + data = file.read() + quasar = Quasar(data) + qt = quasar.parse() + print(qt) diff --git a/oxi/interfaces/models/templates/quasar.ttp b/oxi/interfaces/models/templates/quasar.ttp new file mode 100644 index 0000000..45ded7a --- /dev/null +++ b/oxi/interfaces/models/templates/quasar.ttp @@ -0,0 +1,61 @@ + +Базовый шаблон для нового устройства. Скопируйте этот файл, переименуйте +в <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": "" +} + + + +# Engine {{ version }} +# Product Name {{ model }} +# Product Serial Number {{ serial_number }} + + + +{{ ignore("\s*") }}config {{ interface }} ipv4 address {{ ip_address }}/{{ mask }} gateway {{ gateway }} {{ ignore }} + + + +{{ ignore("\s*") }}config interface {{ interface | _start_ }} fec none mode force-up enable +{{ ignore("\s*") }}config interface {{ interface | _start_ }} description {{ description | ORPHRASE | strip('"')}} + \ No newline at end of file