Definieren von Junos PyEZ-Betriebstabellen zum Parsen strukturierter Ausgaben
ZUSAMMENFASSUNG Erstellen Sie benutzerdefinierte Tabellen, die bestimmte Elemente aus der RPC-XML-Ausgabe auswählen, um Betriebsinformationen von einem Junos-Gerät zu extrahieren.
Junos PyEZ Operational (op) Tabellen für strukturierte Ausgabe: Extrahieren von Daten aus der XML-Ausgabe eines RPC, der auf einem Junos-Gerät ausgeführt wird. Auf diese Weise können Sie die relevanten Betriebszustandsinformationen für das Gerät schnell abrufen und überprüfen.
Junos PyEZ-Tabellen werden mit YAML formatiert. Op-Tabellendefinitionen können eine Reihe von erforderlichen und optionalen Parametern enthalten, die in Tabelle 1 zusammengefasst sind.
Name der Tabellenparameter |
Tabellen-Parameter |
Beschreibung |
|---|---|---|
Tabellenname |
– |
Benutzerdefinierter Bezeichner für die Tabelle. |
RPC-Befehl |
|
Anforderungstagname des auszuführenden RPC. |
RPC-Standardargumente |
|
(Optional) Standardbefehlsoptionen und -argumente für den RPC. |
Optionaler RPC-Argumentschlüssel |
|
(Optional) Verweis auf das optionale erste Argument eines Befehls, wenn für dieses Argument kein bestimmtes Schlüsselwort erforderlich ist. Wenn Sie diese Eigenschaft nicht einschließen, müssen Sie das Schlüsselwort oder den Optionsnamen für optionale Argumente angeben, die beim Abrufen der Betriebsdaten in der |
Tabellenelement |
|
XPath-Ausdruck relativ zum Element der obersten Ebene innerhalb des Elements, das Diese Elemente werden zur Referenz für die zugeordnete Ansicht. |
Schlüssel für Tabellenelemente |
|
(Optional) XPath-Ausdruck oder eine Liste von XPath-Ausdrücken, die das Tag oder die Tags auswählt, deren Werte das Tabellenelement für Elemente, die das Wenn das Element das |
Tabellenansicht |
|
Ansicht, die zum Extrahieren von Felddaten aus den Tabellenelementen verwendet wird. |
Betrachten Sie die folgende Junos PyEZ-Op-Tabelle, EthPortTabledie in der Junos PyEZ-Distribution enthalten ist. Die Tabelle extrahiert Betriebszustandsinformationen für Ethernet-Schnittstellen auf dem Zielgerät:
---
EthPortTable:
rpc: get-interface-information
args:
media: True
interface_name: '[afgxe][et]-*'
args_key: interface_name
item: physical-interface
view: EthPortView
In den folgenden Abschnitten werden die verschiedenen Komponenten der Tabelle erläutert.
Tabellenname
Der Tabellenname ist ein benutzerdefinierter Bezeichner für die Tabelle. Die YAML-Datei oder -Zeichenfolge kann eine oder mehrere Tabellen enthalten. Der Anfang des YAML-Dokuments muss linksbündig ausgerichtet werden. Zum Beispiel:
--- EthPortTable: # Table definition
RPC-Befehl (rpc)
Junos PyEZ op Tabellen für die strukturierte Ausgabe extrahieren spezifische Informationen aus der XML-Ausgabe eines RPC. Sie müssen die rpc Eigenschaft in die op-Tabellendefinition aufnehmen, um den RPC anzugeben, der auf einem Gerät ausgeführt werden soll.
Der rpc Wert ist das Junos XML-Anforderungs-Tag für einen Befehl. Der Name des Anforderungs-Tags für den show interfaces Befehl lautet get-interface-informationz. B. .
rpc: get-interface-information
Das Anforderungs-Tag kann mit einer der folgenden Methoden gefunden werden:
Anhängen der
| display xml rpcOption nach dem Befehl in der Junos OS CLIAusführen der Junos PyEZ-Instanzmethode
Devicedisplay_xml_rpc('command', format='text')Suchen des Befehls und des entsprechenden Tags im Junos XML API Explorer
RPC-Standardargumente (args)
Die optional-Eigenschaft args definiert die Standardbefehlsoptionen und -argumente für den RPC. Diese werden als Schlüssel-Wert-Paare aufgeführt, die unter eingerückt sind args. Ein Standardargument wird verwendet, wenn Sie die get() Methode im Skript aufrufen und kein Argument angeben, das diesen Standardwert überschreibt.
Wenn eine Option nur ein Flag ist, für das kein bestimmter Wert erforderlich ist, können Sie sie in die Argumentliste aufnehmen, indem Sie den Optionswert in der Tabellendefinition auf True festlegen. Beispielsweise wird der show interfaces media Befehl dem get-interface-information Anforderungstag mit dem Argument media: True. Wenn für eine Option ein Wert erforderlich ist, legen Sie den Argumentwert auf den Wert fest, den Sie als Standardwert verwenden möchten.
rpc: get-interface-information
args:
media: True
interface_name: '[afgxe][et]-*'
Wenn der Optionsname in der Befehlszeilenschnittstelle (CLI) von Junos OS mit Bindestrich versehen ist, müssen Sie alle Bindestriche im Namen in Unterstriche ändern.
Standardmäßig normalisiert Junos PyEZ alle Tabellenschlüssel und -werte, wodurch alle führenden und nachfolgenden Leerzeichen entfernt und Sequenzen interner Leerzeichen durch ein einzelnes Leerzeichen ersetzt werden. Um die Normalisierung für eine Tabelle zu deaktivieren, fügen Sie sie in die Argumentliste ein.normalize: False
args:
normalize: False
Optionaler RPC-Argumentschlüssel (args_key)
Sie verwenden die optional-Eigenschaft args_key in Fällen, in denen ein CLI-Befehl ein optionales erstes Argument akzeptiert, für das Sie keinen expliziten Optionsnamen oder ein Schlüsselwort angeben müssen. Im folgenden Beispiel akzeptiert der show interfaces Befehl einen Schnittstellennamen als optionales Argument:
user@router> show interfaces ? Possible completions: <[Enter]> Execute this command <interface-name> Name of physical or logical interface ge-0/0/0 ge-0/0/0.0
Die args_key Eigenschaft ermöglicht es Ihnen, dieses optionale Argument beim Abrufen von Betriebsdaten zu verwenden, ohne das Schlüsselwort oder den Optionsnamen explizit angeben zu müssen.
args_key: interface_name
Wenn Sie die args_key Eigenschaft in die Tabellendefinition aufnehmen, können Sie den Argumentwert angeben, aber den Optionsnamen beim Abrufen der Daten weglassen.
eths = EthPortTable(dev).get('ge-0/3/0')
Wenn Sie die args_key Eigenschaft in der Tabellendefinition weglassen, müssen Sie den Optionsnamen explizit angeben, wenn Sie diesen Parameter beim Abrufen der Daten einschließen möchten.
eths = EthPortTable(dev).get(interface_name='ge-0/3/0')
Tabellenelement (Element)
Die Table-Eigenschaft item , die in allen op-Tabellendefinitionen erforderlich ist, identifiziert die Daten, die aus der RPC-Ausgabe extrahiert werden sollen. Der item Wert ist ein XPath-Ausdruck relativ zum Element der obersten Ebene innerhalb des Tags, das <rpc-reply> die gewünschten Elemente auswählt. Diese Elemente werden zur Referenz für die zugeordnete Ansicht.
Das folgende Beispiel zeigt ein Beispiel für eine abgeschnittene CLI-Befehlsausgabe:
user@router> show interfaces media "[afgxe][et]-*" | display xml
<rpc-reply xmlns:junos="http://xml.juniper.net/junos/15.1R1/junos">
<interface-information xmlns="http://xml.juniper.net/junos/15.1R1/junos-interface" junos:style="normal">
<physical-interface>
<name>ge-0/0/0</name>
<admin-status junos:format="Enabled">up</admin-status>
<oper-status>up</oper-status>
...
</physical-interface>
<physical-interface>
<name>ge-0/0/1</name>
<admin-status junos:format="Enabled">up</admin-status>
<oper-status>up</oper-status>
...
</physical-interface>
</interface-information>
</rpc-reply>
Um die <physical-interface> Elemente aus dieser Ausgabe auszuwählen, schließen Sie die item Eigenschaft ein, und geben Sie den XPath an, der das Element auswählt. In diesem Fall ist das <physical-interface> Element ein direktes untergeordnetes Element des Elements der obersten Ebene <interface-information> , und der XPath-Ausdruck für den item Wert ist nur der Elementname.
item: physical-interface
Diese Elemente werden zur Referenz für die zugeordnete Ansicht.
Verschiedene Geräte können unterschiedliche Ausgabeelemente für denselben RPC ausgeben. Daher kann der XPath des Elements je nach System variieren. Die item Eigenschaft unterstützt die Verwendung des Pipe-Operators ( | ), um ein implizites "oder" anzugeben, um aus mehreren möglichen Knoten auszuwählen. Wenn die item Eigenschaft diesen Operator enthält, muss die key Eigenschaft eine Liste verwenden. Zum Beispiel:
UTMStatusTable:
rpc: show-utmd-status
item: //multi-routing-engine-item/utmd-status | //utmd-status
view: UTMStatusView
key:
- re-name | Null
Tabellenelementschlüssel (Schlüssel)
Die optionale key Eigenschaft ist ein XPath-Ausdruck oder eine Liste von XPath-Ausdrücken, die auswählt, welche Tags verwendet werden, um ein Tabellenelement für die Elemente, die das <name> Element nicht als Bezeichner verwenden, eindeutig zu identifizieren, oder für Fälle, in denen Sie zusammengesetzte Schlüssel verwenden möchten.
In der folgenden Befehlsausgabe wird jedes <physical-interface> Element eindeutig durch sein <name> untergeordnetes Element identifiziert:
user@router> show interfaces media "[afgxe][et]-*" | display xml
<rpc-reply>
<interface-information>
<physical-interface>
<name>ge-0/0/0</name>
...
</physical-interface>
<physical-interface>
<name>ge-0/0/1</name>
...
</physical-interface>
</interface-information>
</rpc-reply>
Wenn die Table-Eigenschaft item die <physical-interface> Elemente auswählt, können Sie die key Eigenschaft aus der Tabellendefinition weglassen, wenn Sie das <name> Element standardmäßig als Schlüssel verwenden möchten.
Betrachten Sie im Gegensatz dazu die folgende show route brief Befehlsausgabe:
<rpc-reply>
<route-information>
<route-table>
...
<rt junos:style="brief">
<rt-destination>10.0.0.0/24</rt-destination>
<rt-entry>
<active-tag>*</active-tag>
<current-active/>
<last-active/>
<protocol-name>Static</protocol-name>
<preference>5</preference>
<age junos:seconds="9450374">15w4d 09:06:14</age>
...
</rt-entry>
</rt>
<rt junos:style="brief">
<rt-destination>10.0.10.0/24</rt-destination>
<rt-entry>
<active-tag>*</active-tag>
<current-active/>
<last-active/>
<protocol-name>Direct</protocol-name>
<preference>0</preference>
<age junos:seconds="9450380">15w4d 09:06:20</age>
...
</rt-entry>
</rt>
</route-table>
</route-information>
</rpc-reply>
Bei der Auswahl der route-table/rt Elemente gibt es kein entsprechendes <name> Element, um jeden Routeneintrag eindeutig zu identifizieren. Wenn der <name> Bezeichner nicht vorhanden ist, kann die key Eigenschaft angeben, welches Tag oder welche Tags jedes Element eindeutig identifizieren. In diesem Fall können Sie jedes route-table/rt Element eindeutig identifizieren, indem Sie es als Schlüssel verwenden <rt-destination> .
item: route-table/rt key: rt-destination
Darüber hinaus kann ab Junos PyEZ, Version 2.3.0, eine Tabelle definiert key: Null werden, die angibt, dass ein Schlüssel nicht erforderlich ist. In diesem Fall geben die Tabelle und die Ansicht die Daten als einfaches Wörterbuch und nicht als geschachteltes Wörterbuch mit Schlüsseln zurück.
Tabellenelemente können durch einen Schlüssel definiert werden, der aus einem einzelnen Element oder mehreren Elementen besteht. Bei Einzelelementschlüsseln wird ein einfacher XPath-Ausdruck für den Wert der key Eigenschaft verwendet. Zusammengesetzte Schlüssel werden durch eine Liste von XPath-Ausdrücken definiert. Betrachten Sie die folgende Tabellendefinition:
PicHwTable:
rpc: get-chassis-inventory
item: .//name[starts-with(.,'PIC')]/parent::*
key:
- ancestor::*[starts-with(name,'FPC')]/name
- ancestor::*[starts-with(name,'MIC')]/name
- name
view: PicHwView
Der zusammengesetzte Schlüssel für diese Tabellendefinition könnte in etwa wie folgt aussehen:
('FPC 2', 'MIC 0', 'PIC 0')
Wenn ein zusammengesetzter Schlüssel auf ein fehlendes Element verweist, ersetzt Junos PyEZ den Wert im Schlüssel durch None.
('FPC 0', None, 'PIC 0')
Die key Eigenschaft muss eine Liste verwenden, wenn die item Eigenschaft den Pipe-Operator ( | ) enthält.
Die key Eigenschaft unterstützt auch den Pipe-Operator ( | ), mit dem die Tabelle aus mehreren möglichen Knoten auswählen kann. Der Operator ermöglicht es Ihnen, dieselbe Tabelle auch dann zu verwenden, wenn verschiedene Systeme unterschiedliche Ausgabeelemente für denselben RPC ausgeben. Beispielsweise kann die LLDPNeighborTable, die hier als Referenz gezeigt wird, das lldp-local-interface Element or lldp-local-port-id als Schlüssel auswählen:
---
LLDPNeighborTable:
rpc: get-lldp-neighbors-information
item: lldp-neighbor-information
key: lldp-local-interface | lldp-local-port-id
view: LLDPNeighborView
LLDPNeighborView:
fields:
local_int: lldp-local-interface | lldp-local-port-id
local_parent: lldp-local-parent-interface-name
remote_type: lldp-remote-chassis-id-subtype
remote_chassis_id: lldp-remote-chassis-id
remote_port_desc: lldp-remote-port-description
remote_sysname: lldp-remote-system-name
Wenn die key Eigenschaft den | Operator verwendet, wird jeder Schlüssel, der in der RPC-Antwort vorhanden ist, der Liste der Schlüssel hinzugefügt. Der Operator kann verwendet werden, um ein implizites "oder" anzugeben, und ist nützlich in Situationen, in denen unterschiedliche Tag-Namen für verschiedene Arten von Konfigurationen oder Releases vorhanden sind. Wenn z. B. der RPC als Bezeichner für ein Gerät zurückgegeben lldp-local-interface wird und derselbe RPC als Bezeichner für ein anderes Gerät zurückgegeben wird lldp-local-port-id , wählt die Tabelle automatisch den entsprechenden Schlüssel aus.
Tabellenansicht (Ansicht)
Die view Eigenschaft ordnet die Tabellendefinition einer bestimmten Ansicht zu. Eine Ansicht ordnet Ihre benutzerdefinierten Feldnamen mithilfe von XPath-Ausdrücken Elementen in den ausgewählten Tabellenelementen zu. Sie können die Ansicht so anpassen, dass nur die erforderlichen Elemente aus den Tabellenelementen ausgewählt werden.