Définir des tables opérationnelles Junos PyEZ pour l’analyse de sorties structurées
RÉSUMÉ Créez des tables personnalisées qui sélectionnent des éléments spécifiques à partir de la sortie XML RPC pour extraire des informations opérationnelles d’un équipement Junos.
Tables opérationnelles (op) Junos PyEZ pour la sortie structurée extraient des données de la sortie XML d’un RPC exécuté sur un périphérique Junos. Cela vous permet de récupérer et de consulter rapidement les informations pertinentes sur l’état opérationnel de l’appareil.
Les tables Junos PyEZ sont mises en forme à l’aide de YAML. Les définitions de table peuvent inclure un certain nombre de paramètres obligatoires et facultatifs, qui sont résumés dans le tableau 1.
Nom du paramètre de la table |
Paramètre de table |
Description |
|---|---|---|
Nom de la table |
– |
Identificateur défini par l’utilisateur pour la table. |
Commande RPC |
|
Demandez le nom de la balise du RPC à exécuter. |
Arguments RPC par défaut |
|
(Facultatif) Options de commande et arguments par défaut pour le RPC. |
Clé d’argument facultative RPC |
|
(Facultatif) Référence au premier argument facultatif d’une commande lorsque cet argument ne nécessite pas de mot-clé spécifique. Si vous n’incluez pas cette propriété, vous devez spécifier le mot-clé, ou le nom de l’option, pour les arguments facultatifs qui sont inclus dans la liste des arguments de méthode |
Élément de table |
|
XPath expression relative à l’élément de niveau supérieur dans l’élément Ces éléments deviennent la référence de la vue associée. |
Clé de l’élément de table |
|
(Facultatif) XPath expression ou une liste d’expressions XPath qui sélectionne la ou les balises dont les valeurs identifient de manière unique l’élément Table pour les éléments qui n’utilisent pas l’élément comme identificateur ou pour les cas où des Si l’élément utilise l’élément |
Affichage du tableau |
|
Vue utilisée pour extraire les données de champ des éléments de la table. |
Prenons l’exemple de la table d’opération Junos PyEZ suivante, EthPortTable, qui est incluse dans la distribution Junos PyEZ. Le tableau extrait les informations sur l’état de fonctionnement des interfaces Ethernet sur l’équipement cible :
---
EthPortTable:
rpc: get-interface-information
args:
media: True
interface_name: '[afgxe][et]-*'
args_key: interface_name
item: physical-interface
view: EthPortView
Les sections suivantes traitent des différentes composantes du tableau.
Nom de la table
Le nom de la table est un identificateur défini par l’utilisateur pour la table. Le fichier ou la chaîne YAML peut contenir une ou plusieurs tables. Le début du document YAML doit être justifié à gauche. Par exemple :
--- EthPortTable: # Table definition
Commande RPC (rpc)
Les tables d’opération Junos PyEZ pour la sortie structurée extraient des informations spécifiques de la sortie XML d’un RPC. Vous devez inclure la rpc propriété dans la définition de la table op pour spécifier le RPC à exécuter sur un périphérique.
La rpc valeur est la balise de requête XML Junos d’une commande. Par exemple, le nom de la balise de requête de la show interfaces commande est get-interface-information.
rpc: get-interface-information
La balise de requête peut être trouvée à l’aide de l’une des méthodes suivantes :
Ajout de l’option
| display xml rpcaprès la commande dans l’interface de ligne de commande Junos OSExécution de la méthode d’instance
display_xml_rpc('command', format='text')Junos PyEZDeviceRecherche de la commande et de la balise correspondante dans l’explorateur d’API XML Junos
Arguments RPC par défaut (args)
La propriété facultative args définit les options de commande et les arguments par défaut pour le RPC. Celles-ci sont répertoriées sous forme de paires clé-valeur qui sont mises en retrait sous args. Un argument default est utilisé lorsque vous appelez la get() méthode dans votre script et que vous ne fournissez pas d’argument qui remplace cette valeur par défaut.
Si une option n’est qu’un indicateur qui ne nécessite pas de valeur spécifique, vous pouvez l’inclure dans la liste des arguments en définissant la valeur de l’option sur True dans la définition de la table. Par exemple, la show interfaces media commande est mappée à la get-interface-information balise request avec l’argument media: True. Si une option nécessite une valeur, définissez la valeur de l’argument sur la valeur que vous souhaitez utiliser par défaut.
rpc: get-interface-information
args:
media: True
interface_name: '[afgxe][et]-*'
Si le nom de l’option dans l’interface de ligne de commande (CLI) de Junos OS comporte un trait d’union, vous devez remplacer les tirets du nom par des traits de soulignement.
Par défaut, Junos PyEZ normalise toutes les clés et valeurs de table, ce qui supprime tous les espaces de début et de fin et remplace les séquences d’espaces internes par un seul espace. Pour désactiver la normalisation d’une table, incluez-la normalize: False dans la liste des arguments.
args:
normalize: False
Clé d’argument facultative RPC (args_key)
La propriété facultative args_key est utilisée dans les cas où une commande CLI utilise un premier argument facultatif qui ne nécessite pas que vous spécifiiez explicitement un nom d’option ou un mot-clé. Dans l’exemple suivant, la commande prend un nom d’interface show interfaces comme argument facultatif :
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
La args_key propriété vous permet d’utiliser cet argument facultatif lors de la récupération de données opérationnelles sans avoir à spécifier explicitement le mot-clé ou le nom de l’option.
args_key: interface_name
Si vous incluez la propriété dans votre définition de args_key table, vous pouvez spécifier la valeur de l’argument, mais omettre le nom de l’option lorsque vous récupérez les données.
eths = EthPortTable(dev).get('ge-0/3/0')
Si vous omettez la propriété dans votre args_key définition de table, vous devez spécifier explicitement le nom de l’option si vous souhaitez inclure ce paramètre lors de la récupération des données.
eths = EthPortTable(dev).get(interface_name='ge-0/3/0')
Élément de table (élément)
La propriété Table item , qui est requise dans toutes les définitions d’op Table, identifie les données à extraire de la sortie RPC. La item valeur est une expression XPath relative à l’élément de niveau supérieur dans la <rpc-reply> balise qui sélectionne les éléments souhaités. Ces éléments deviennent la référence de la vue associée.
L’exemple suivant montre un exemple de sortie de commande CLI tronquée :
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>
Pour sélectionner les <physical-interface> éléments à partir de cette sortie, incluez la item propriété et spécifiez le XPath qui sélectionne l’élément. Dans ce cas, l’élément <physical-interface> est un enfant direct de l’élément de niveau <interface-information> supérieur, et l’expression XPath de la item valeur est simplement le nom de l’élément.
item: physical-interface
Ces éléments deviennent la référence de la vue associée.
Différents périphériques peuvent émettre différents éléments de sortie pour le même RPC. Par conséquent, l’XPath de l’objet peut varier en fonction du système. La item propriété prend en charge l’utilisation de l’opérateur pipe ( | ) pour spécifier un « ou » implicite à sélectionner parmi plusieurs noeuds possibles. Lorsque la item propriété inclut cet opérateur, elle key doit utiliser une liste. Par exemple :
UTMStatusTable:
rpc: show-utmd-status
item: //multi-routing-engine-item/utmd-status | //utmd-status
view: UTMStatusView
key:
- re-name | Null
Clé de l’élément de table (clé)
La propriété facultative key est une expression XPath ou une liste d’expressions XPath qui sélectionne la ou les balises utilisées pour identifier de manière unique un élément de table pour les éléments qui n’utilisent pas l’élément <name> comme identificateur ou pour les cas où vous souhaitez utiliser des clés composites.
Dans la sortie de commande suivante, chaque <physical-interface> élément est identifié de manière unique par son <name> élément enfant :
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>
Si la propriété Table item sélectionne les <physical-interface> éléments, vous pouvez omettre la key propriété de la définition Table si vous souhaitez utiliser l’élément <name> comme clé par défaut.
En revanche, considérez la sortie de commande suivante show route brief :
<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>
Lors de la sélection des éléments, il n’y a pas d’élément correspondant <name> pour identifier de manière unique chaque entrée d’itinéraireroute-table/rt. Lorsque l’identificateur <name> est absent, la key propriété peut spécifier la ou les balises qui identifient de manière unique chaque élément. Dans ce cas, vous pouvez identifier chaque route-table/rt élément de manière unique en l’utilisant <rt-destination> comme clé.
item: route-table/rt key: rt-destination
De plus, à partir de la version 2.3.0 de Junos PyEZ, une table peut être définie key: Null pour indiquer qu’aucune clé n’est requise. Dans ce cas, la table et la vue renvoient les données sous la forme d’un dictionnaire simple plutôt que d’un dictionnaire imbriqué avec des clés.
Les éléments de table peuvent être définis par une clé composée d’un seul élément ou de plusieurs éléments. Les clés à élément unique utilisent une expression XPath simple pour la valeur de la key propriété. Les clés composites sont définies par une liste d’expressions XPath. Considérez la définition suivante du tableau :
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
La clé composite de cette définition de table peut être similaire à ce qui suit :
('FPC 2', 'MIC 0', 'PIC 0')
Si une clé composite fait référence à un élément manquant, Junos PyEZ remplace la valeur de la clé par None.
('FPC 0', None, 'PIC 0')
La key propriété doit utiliser une liste lorsqu’elle item inclut l’opérateur pipe ( | ).
La key propriété prend également en charge l’opérateur pipe ( | ), qui permet à la table de sélectionner parmi plusieurs nœuds possibles. L’opérateur vous permet d’utiliser la même table même dans les cas où différents systèmes émettent des éléments de sortie différents pour le même RPC. Par exemple, LLDPNeighborTable, qui est affiché ici à titre de référence, peut sélectionner l’élément lldp-local-interface or lldp-local-port-id comme clé :
---
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
Lorsque la key propriété utilise l’opérateur | , chaque clé présente dans la réponse RPC est ajoutée à la liste des clés. L’opérateur peut être utilisé pour spécifier un « ou » implicite et est utile dans les situations où différents noms de balises sont présents pour différents types de configurations ou de versions. Par exemple, si le RPC renvoie lldp-local-interface en tant qu’identificateur pour un périphérique et que le même RPC renvoie lldp-local-port-id en tant qu’identificateur pour un autre périphérique, la table sélectionne automatiquement la clé appropriée.
Vue tabulaire (vue)
La view propriété associe la définition de la table à une vue particulière. Une vue mappe vos noms de champs définis par l’utilisateur aux éléments des éléments de table sélectionnés à l’aide d’expressions XPath. Vous pouvez personnaliser la vue pour ne sélectionner que les éléments nécessaires dans les éléments de la table.