Получение условных данных с использованием таблиц PyEZ - PullRequest
0 голосов
/ 26 декабря 2018

Я пытаюсь создать пользовательскую таблицу / представление для интерфейсов Junos.Да, я знаю, что она уже существует как встроенная таблица / таблица по умолчанию, но это учебное упражнение, которое я планирую расширить позже.

Проблема в том, что я хочу получить только inet адрес семейства, то есть ifa-local только в том случае, если раздел address-family включает address-family / address-family-name из inet .

Есть ли способ сделать это с моей точки зрения, YAML, или мне нужно захватить все разделы семейства адресов с моей точки зрения и программно сохранить только inet * 1016?* строфа в моем скрипте на питоне?И как это будет работать?

Вот структура XML (для ясности удалены неважные биты):

<rpc-reply xmlns:junos="http://xml.juniper.net/junos/15.1F6/junos">
    <interface-information xmlns="http://xml.juniper.net/junos/15.1F6/junos-interface" junos:style="normal">
        <physical-interface>
            <name>ge-0/0/9</name>
            <logical-interface>
                <name>ge-0/0/9.0</name>
                <address-family>
                    <address-family-name>inet</address-family-name>
                    <mtu>3986</mtu>
                    <route-table>0</route-table>
                    <interface-address>
                        <ifa-destination>10.0.2.88/30</ifa-destination>
                        <ifa-local>10.0.2.89</ifa-local>
                        <ifa-broadcast>10.0.2.91</ifa-broadcast>
                    </interface-address>
                </address-family>
                <address-family>
                    <address-family-name>iso</address-family-name>
                    <mtu>3983</mtu>
                    <route-table>0</route-table>
                </address-family>
            </logical-interface>
        </physical-interface>
    </interface-information>
</rpc-reply>

Это мой YAML:

JunosDCDiscoveryInterfaces:
    rpc: get-interface-information
    item: physical-interface/logical-interface
    key: name
    view: JunosDCDiscoveryInterfacesView

JunosDCDiscoveryInterfacesView:
    fields:
        name: name
        description: description
        active: { if-config-flags/iff-up : flag }
        # ipv4_address only if address-family/address-family-name is 'inet'
        ipv4_address: {address-family/interface-address/ifa-local}

НаконецВот код Python, который я использовал бы для отображения каждого интерфейса на маршрутизаторе:

logical_interfaces = JunosDCDiscoveryInterfaces(client.device).get()
for logical_interface in logical_interfaces:
    print(f'{logical_interface.name} {logical_interface.active} {logical_interface.description} {logical_interface.ipv4_address}')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...