Junos インターフェイス用のカスタム テーブル/ビューを作成しようとしています。はい、組み込み/既定のテーブルとして既に存在することは知っていますが、これは後で拡張する予定の学習演習です。
問題は、 inetファミリ アドレスのみを取得したいということです。つまり、 address-familyスタンザにaddress-family/address-family-name of inetが含まれている場合にのみifa-localになります。
ビュー YAML 内からこれを行う方法はありますか、それともビューですべてのアドレス ファミリ スタンザを取得し、プログラムでPython スクリプトにinetスタンザのみを保持する必要がありますか? そして、それはどのように機能しますか?
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}')