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.
This commit is contained in:
18
oxi/interfaces/models/huawei.py
Normal file
18
oxi/interfaces/models/huawei.py
Normal file
@@ -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())
|
||||
@@ -1,6 +1,6 @@
|
||||
<doc>
|
||||
Базовый шаблон для нового устройства. Скопируйте этот файл, переименуйте
|
||||
в <vendor>.ttp и заполните группы под формат конфигурации вашего устройства.
|
||||
в <vendor>.ttp и заполните группы под формат конфигурации вашего устройства.
|
||||
|
||||
Обязательные группы: system, interfaces.
|
||||
Опциональная группа: vlans — добавляйте только если устройство поддерживает VLAN.
|
||||
|
||||
58
oxi/interfaces/models/templates/huawei.ttp
Normal file
58
oxi/interfaces/models/templates/huawei.ttp
Normal file
@@ -0,0 +1,58 @@
|
||||
<doc>
|
||||
Базовый шаблон для нового устройства. Скопируйте этот файл, переименуйте
|
||||
в <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
|
||||
</doc>
|
||||
<vars>
|
||||
default_system = {
|
||||
"model": "",
|
||||
"serial_number": "",
|
||||
"version": ""
|
||||
}
|
||||
</vars>
|
||||
|
||||
<group name="system" default="default_system">
|
||||
# VRP (R) software, Version {{ version }} ({{ model }} {{ serial_number }})
|
||||
</group>
|
||||
|
||||
<group name="interfaces">
|
||||
interface {{ interface }}
|
||||
description {{ description }}
|
||||
ip address {{ ip_address }} {{ mask | to_cidr }}
|
||||
</group>
|
||||
<group name="vlans">
|
||||
vlan batch {{ vlan_ids | ORPHRASE | unrange(" to ", " ") | split(" ")}}
|
||||
</group>
|
||||
Reference in New Issue
Block a user