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, EthPortTable
die 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-information
z. B. .
rpc: get-interface-information
Das Anforderungs-Tag kann mit einer der folgenden Methoden gefunden werden:
Anhängen der
| display xml rpc
Option nach dem Befehl in der Junos OS CLIAusführen der Junos PyEZ-Instanzmethode
Device
display_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.