Définition des tables opérationnelles Junos PyEZ pour l’analyse de sorties non structurées
RÉSUMÉ Créez des tables personnalisées qui sélectionnent des données à partir de la sortie de la commande CLI ou vty pour extraire des informations opérationnelles d’un équipement Junos.
Tables opérationnelles (op) Junos PyEZ pour sortie non structurée extraient des données de la sortie texte d’une commande CLI exécutée sur un équipement Junos ou d’une commande vty exécutée sur un concentrateur PIC flexible (FPC) donné. Les données extraites sont ensuite converties en JSON. Cela vous permet de récupérer et d’analyser rapidement les informations d’état opérationnel de l’équipement. Les tables d’opération Junos PyEZ pour la sortie non structurée sont particulièrement utiles lorsque vous avez besoin d’analyser une sortie de commande qui ne peut pas être retournée dans un format structuré tel que XML.
Cette rubrique traite des différents composants de la table.
Récapitulatif des paramètres dans les tables op pour l’analyse de la sortie non structurée
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 |
|
CLI ou vty à exécuter. |
Arguments de commande |
|
(Facultatif) Lorsque vous définissez la commande en tant que modèle Jinja, |
FPC cible |
|
(Facultatif) Concentrateur PIC flexible (FPC) sur lequel exécuter une commande vty. |
Élément de table |
|
(Facultatif) Chaîne ou expression régulière qui définit comment diviser la sortie en sections. Ces sections deviennent la référence itérable de la vue associée. Spécifiez '*' pour extraire et faire correspondre la chaîne entière plutôt que chaque ligne. |
Clé de l’élément de table |
|
(Facultatif) Chaîne ou liste de chaînes qui définissent une ou plusieurs clés qui identifient de manière unique chaque élément de la table. |
Touches sélectionnées |
|
(Facultatif) Liste d’une ou plusieurs clés d’élément de table pour lesquelles renvoyer des données. |
Titre de la section |
|
(Facultatif) Chaîne qui sélectionne la section de sortie contenant les données à analyser. |
Délimiteur de champ |
|
(Facultatif) Délimiteur qui définit comment fractionner les données dans la sortie de commande composée de paires clé-valeur. Les données extraites sont stockées sous forme de paires clé-valeur dans un dictionnaire. |
Expression d’évaluation |
|
(Facultatif) Tableau associatif, ou dictionnaire, d’une ou plusieurs paires clé-valeur qui mappent une clé définie par l’utilisateur à une chaîne contenant une expression mathématique. Lorsque vous récupérez les données, l’expression est évaluée à l’aide de la fonction Python |
Affichage du tableau |
|
(Facultatif) Vue utilisée pour extraire les données de champ des éléments de la table. |
Modèle TextFSM |
|
(Facultatif) Booléen qui spécifie si un modèle TextFSM est utilisé pour analyser les données. |
Identificateur de plate-forme de modèle TextFSM |
|
(Facultatif) Lorsqu’un modèle TextFSM est utilisé, spécifiez la plate-forme du modèle. |
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. L’exemple suivant définit une table nommée ChassisFanTable
:
--- ChassisFanTable: command: show chassis fan key: fan-name view: ChassisFanView
Commande
Une table d’opération Junos PyEZ pour la sortie non structurée extrait les données de la sortie texte d’une commande CLI ou vty. Vous devez inclure la command
propriété dans la définition Table pour spécifier la commande CLI à exécuter sur un périphérique ou la commande vty à exécuter sur un FPC donné. Vous pouvez définir la commande comme une simple chaîne ou un modèle Jinja.
Par exemple, le tableau suivant exécute la show chassis fan
commande sur l’appareil.
--- ChassisFanTable: command: show chassis fan key: fan-name view: ChassisFanView
Le tableau suivant exécute la show cmerror module brief
commande vty sur le FPC cible.
--- CMErrorTable: command: show cmerror module brief target: fpc1 key: module view: CMErrorView
Lorsque vous définissez la commande en tant que modèle Jinja, vous devez également fournir au args
paramètre un dictionnaire de paires clé-valeur qui mappent les variables du modèle aux valeurs utilisées lors du rendu du modèle. Pour plus d’informations sur la définition de la commande en tant que modèle Jinja, consultez Arguments de commande (arguments).
Arguments de commande (args)
Vous pouvez définir la commande CLI ou vty pour le command
paramètre à l’aide d’un modèle Jinja et remplacer les arguments de commande par des variables. Lorsque vous utilisez un modèle Jinja, vous devez également définir le args
paramètre, qui est un dictionnaire de paires clé-valeur qui mappe les noms de variables dans le modèle Jinja aux valeurs utilisées lors du rendu du modèle. Vous pouvez fournir des valeurs par défaut pour les variables de modèle dans la définition de table, et vous pouvez également définir les valeurs dans l’application Junos PyEZ.
Pour définir des valeurs par défaut pour les variables de modèle, incluez le paramètre dans la définition de table args
et mappez chaque variable de modèle à sa valeur par défaut. Le tableau suivant définit une commande à l’aide d’un modèle Jinja qui a une variable, protocol
. Le args
paramètre définit la valeur par défaut de protocol
, qui est utilisée lorsque vous appelez la get()
méthode dans votre script et ne fournit pas d’argument qui remplace cette valeur par défaut.
--- DdosPolicerStatsTable: command: show ddos policer stats {{ protocol }} args: protocol: ospf target: Null title: "DDOS Policer Statistics:" key: location view: DdosPolicerStatsView
De plus, vous pouvez définir l’argument args
en tant que dictionnaire dans la méthode Table get()
pour :
définir une valeur pour toute variable de modèle qui n’a pas de valeur par défaut définie dans la table
remplacer la valeur par défaut définie dans la table pour une ou plusieurs variables de modèle
L'exemple suivant exécute la commande de la table précédente en utilisant le protocole 'bgp' au lieu de la valeur par défaut 'ospf'.
from jnpr.junos import Device from jnpr.junos.command.pfe_ddos_policer import DdosPolicerStatsTable from pprint import pprint import json with Device(host='router1.example.com') as dev: stats = DdosPolicerStatsTable(dev) stats.get(target='fpc0', args={'protocol':'bgp'}) pprint(json.loads(stats.to_json()))
FPC cible (fpc)
Les tables d’opération Junos PyEZ peuvent exécuter des commandes vty sur un concentrateur PIC flexible (FPC) spécifique. Lorsque vous utilisez une commande vty, la table doit inclure le target
paramètre permettant de définir le FPC cible. Vous pouvez définir target
et Null
forcer l’utilisateur à spécifier le FPC cible dans l’application, ou vous pouvez définir target
un FPC par défaut, et l’utilisateur peut éventuellement remplacer cette valeur dans l’application.
Le tableau suivant exécute la show memory
commande vty, mais définit target: Null
, ce qui nécessite que l’utilisateur fournisse le FPC cible dans l’application Junos PyEZ :
--- FpcMemory: command: show memory target: Null key: ID key_items: - 0 - 1 view: FPCMemoryView
Le tableau suivant exécute la show memory
commande vty sur FPC 1, sauf si l’utilisateur remplace cette valeur dans l’application Junos PyEZ.
--- FpcMemory: command: show memory target: fpc1 key: ID key_items: - 0 - 1 view: FPCMemoryView
Dans l’application Junos PyEZ, pour définir le FPC cible ou remplacer le FPC par défaut défini dans la table, définissez l’argument de la target
méthode de get()
la table sur le FPC souhaité, par exemple :
from jnpr.junos import Device from jnpr.junos.command.fpc_memory import FpcMemory from pprint import pprint import json with Device(host='router.example.com') as dev: stats = FpcMemory(dev) stats.get(target='fpc0') pprint(json.loads(stats.to_json()))
Élément de table (élément)
La propriété facultative Table item
est une chaîne ou une expression régulière qui définit comment fractionner la sortie de la commande pour l’analyse. Si la sortie contient des ensembles de données similaires et répétitifs, vous pouvez définir item
une correspondance et extraire chaque itération des données. Par exemple, show interfaces
renvoie un ensemble de données similaire pour de nombreuses interfaces. Vous pouvez également définir item: '*'
le moment où vous devez extraire les données sous la forme d’un seul bloc de texte.
Considérez la sortie suivante pour la show devices local
commande vty :
TSEC Ethernet Device Driver: .le1, Control 0x4296c218, (1000Mbit) HW reg base 0xff724000 [0]: TxBD base 0x7853ce20, RxBD Base 0x7853d640 [1]: TxBD base 0x7853d860, RxBD Base 0x7853e080 [2]: TxBD base 0x7853e2a0, RxBD Base 0x785422c0 [3]: TxBD base 0x785426e0, RxBD Base 0x78544700 Receive: 185584608 bytes, 2250212 packets, 0 FCS errors, 0 multicast packets 107271 broadcast packets, 0 control frame packets 0 PAUSE frame packets, 0 unknown OP codes 0 alignment errors, 0 frame length errors 0 code errors, 0 carrier sense errors 0 undersize packets, 0 oversize packets 0 fragments, 0 jabbers, 0 drops Receive per queue: [0]: 0 bytes, 0 packets, 0 dropped 0 jumbo, 0 truncated jumbo [1]: 0 bytes, 0 packets, 0 dropped 0 jumbo, 0 truncated jumbo [2]: 0 bytes, 0 packets, 0 dropped 0 jumbo, 0 truncated jumbo [3]: 203586808 bytes, 2250219 packets, 0 dropped 0 jumbo, 0 truncated jumbo Transmit: 288184646 bytes, 2038370 packets, 0 multicast packets 106531 broadcast packets, 0 PAUSE control frames 0 deferral packets, 0 excessive deferral packets 0 single collision packets, 0 multiple collision packets 0 late collision packets, 0 excessive collision packets 0 total collisions, 0 drop frames, 0 jabber frames 0 FCS errors, 0 control frames, 0 oversize frames 0 undersize frames, 0 fragments frames Transmit per queue: [0]: 10300254 bytes, 72537 packets 0 dropped, 0 fifo errors [1]: 4474302 bytes, 106531 packets 0 dropped, 0 fifo errors [2]: 260203538 bytes, 1857137 packets 0 dropped, 0 fifo errors [3]: 199334 bytes, 2179 packets 0 dropped, 0 fifo errors TSEC status counters: kernel_dropped:0, rx_large:0 rx_short: 0 rx_nonoctet: 0, rx_crcerr: 0, rx_overrun: 0 rx_bsy: 0,rx_babr:0, rx_trunc: 0 rx_length_errors: 0, rx_frame_errors: 0 rx_crc_errors: 0 rx_errors: 0, rx_ints: 2250110, collisions: 0 eberr:0, tx_babt: 0, tx_underrun: 0 tx_timeout: 0, tx_timeout: 0,tx_window_errors: 0 tx_aborted_errors: 0, tx_ints: 2038385, resets: 1 TSEC Ethernet Device Driver: .le3, Control 0x42979220, (1000Mbit) HW reg base 0xff726000 [0]: TxBD base 0x78545720, RxBD Base 0x78545f40 [1]: TxBD base 0x78546160, RxBD Base 0x78546980 [2]: TxBD base 0x78546ba0, RxBD Base 0x7854abc0 [3]: TxBD base 0x7854afe0, RxBD Base 0x7854d000 Receive: 0 bytes, 0 packets, 0 FCS errors, 0 multicast packets 0 broadcast packets, 0 control frame packets 0 PAUSE frame packets, 0 unknown OP codes 0 alignment errors, 0 frame length errors 0 code errors, 0 carrier sense errors 0 undersize packets, 0 oversize packets 0 fragments, 0 jabbers, 0 drops Receive per queue: [0]: 0 bytes, 0 packets, 0 dropped 0 jumbo, 0 truncated jumbo [1]: 0 bytes, 0 packets, 0 dropped 0 jumbo, 0 truncated jumbo [2]: 0 bytes, 0 packets, 0 dropped 0 jumbo, 0 truncated jumbo [3]: 0 bytes, 0 packets, 0 dropped 0 jumbo, 0 truncated jumbo Transmit: 6817984 bytes, 106531 packets, 0 multicast packets 106531 broadcast packets, 0 PAUSE control frames 0 deferral packets, 0 excessive deferral packets 0 single collision packets, 0 multiple collision packets 0 late collision packets, 0 excessive collision packets 0 total collisions, 0 drop frames, 0 jabber frames 0 FCS errors, 0 control frames, 0 oversize frames 0 undersize frames, 0 fragments frames Transmit per queue: [0]: 0 bytes, 0 packets 0 dropped, 0 fifo errors [1]: 4474302 bytes, 106531 packets 0 dropped, 0 fifo errors [2]: 0 bytes, 0 packets 0 dropped, 0 fifo errors [3]: 0 bytes, 0 packets 0 dropped, 0 fifo errors TSEC status counters: kernel_dropped:0, rx_large:0 rx_short: 0 rx_nonoctet: 0, rx_crcerr: 0, rx_overrun: 0 rx_bsy: 0,rx_babr:0, rx_trunc: 0 rx_length_errors: 0, rx_frame_errors: 0 rx_crc_errors: 0 rx_errors: 0, rx_ints: 0, collisions: 0 eberr:0, tx_babt: 0, tx_underrun: 0 tx_timeout: 0, tx_timeout: 0,tx_window_errors: 0 tx_aborted_errors: 0, tx_ints: 106531, resets: 1
Le tableau suivant extrait chaque section de la sortie qui commence par TSEC Ethernet Device Driver:
. Dans ce cas, la valeur de key: name
est dérivée du groupe de capture dans l’expression régulière définie dans item
.
--- DevicesLocalTable: command: show devices local target: fpc1 item: 'TSEC Ethernet Device Driver: (\.?\w+),' key: name view: DevicesLocalView DevicesLocalView: fields: TSEC_status_counters: _TSECStatusCountersTable receive_counters: _ReceiveTable transmit_per_queue: _TransmitQueueTable
Vous pouvez également définir item
à l'aide d'un astérisque ('*') si vous souhaitez faire correspondre la section entière de la sortie au lieu de faire correspondre chaque ligne. Lorsque vous incluez item: '*'
, dans la plupart des cas, vous devez également inclure le title
paramètre pour spécifier l’en-tête de la section de sortie à extraire. L’extraction de la sortie à l’aide de item: '*'
est utile lorsque vous incluez le regex
paramètre dans une vue et que vous souhaitez que chaque expression corresponde à l’intégralité de la chaîne de texte. Dans le cas contraire, les regex
expressions sont combinées et mises en correspondance avec chaque ligne.
Le tableau suivant extrait le bloc de texte sous l’en-tête Receive:
et compare chaque expression régulière à l’intégralité de la chaîne de texte :
_ReceiveTable: item: '*' title: 'Receive:' view: _ReceiveView _ReceiveView: regex: bytes: '(\d+) bytes' packets: '(\d+) packets' FCS_errors: '(\d+) FCS errors' broadcast_packets: '(\d+) broadcast packets'
Clé de l’élément de table (clé)
La propriété facultative key
définit les champs en sortie qui sont utilisés pour identifier de manière unique un élément de table. Vous pouvez identifier un élément de table à l’aide d’une seule clé ou d’une liste de clés. Si la table et la vue renvoient des données itératives, la key
valeur doit faire référence à un nom de variable ou de champ défini dans la vue.
Considérons le résultat suivant show chassis fan
:
Item Status RPM Measurement Fan 1 OK 5280 Spinning at normal speed Fan 2 OK 5280 Spinning at normal speed Fan 3 OK 5280 Spinning at normal speed Fan 4 OK 5280 Spinning at normal speed Fan 5 OK 5280 Spinning at normal speed
Le tableau suivant définit la clé d’élément de tableau comme fan-name
, qui correspond à la valeur sous la Item
colonne de la sortie.
ChassisFanTable: command: show chassis fan key: fan-name view: ChassisFanView ChassisFanView: columns: fan-name: Item fan-status: Status fan-rpm: RPM fan-measurement: Measurement
Lorsque vous récupérez et imprimez les données dans l’application Junos PyEZ, chaque élément du dictionnaire résultant utilise la valeur de ce champ comme clé.
dict_keys(['Fan 1', 'Fan 2', 'Fan 3', 'Fan 4', 'Fan 5'])
Vous pouvez également le définir key
sous forme de liste pour identifier un élément de table à l’aide d’une clé composée. Par exemple :
--- FPCIPV4AddressTable: command: show ipv4 address target: fpc1 key: - name - addr view: FPCIPV4AddressView FPCIPV4AddressView: columns: index: Index addr: Address name: Name
Touches sélectionnées (key_items)
Le key
paramètre définit les champs en sortie qui identifient de manière unique un élément de table. Lorsque vous incluez le key
paramètre dans une table, vous pouvez utiliser le paramètre facultatif key_items
pour renvoyer uniquement des données pour certaines valeurs de clé. key_items
définit la clé ou la liste de clés des éléments de table pour lesquels récupérer des données. Vous pouvez définir le key_items
paramètre dans la définition de table ou dans l’application Junos PyEZ.
Considérons le résultat suivant show chassis fan
:
Item Status RPM Measurement Fan 1 OK 5280 Spinning at normal speed Fan 2 OK 5280 Spinning at normal speed Fan 3 OK 5280 Spinning at normal speed Fan 4 OK 5280 Spinning at normal speed Fan 5 OK 5280 Spinning at normal speed
La table suivante définit la clé de l’élément de table en tant que fan-name
et récupère uniquement les données de l’élément de table dont la valeur de clé est égale à Fan 1
.
ChassisFanTable: command: show chassis fan key: fan-name key_items: - Fan 1 view: ChassisFanView ChassisFanView: columns: fan-name: Item fan-status: Status fan-rpm: RPM fan-measurement: Measurement
Dans l’application Junos PyEZ, pour définir le renvoi ou le key_items
remplacement de ce qui est key_items
défini dans la table, définissez l’argument key_items
dans la méthode de la table sur une liste ou un tuple des éléments souhaités get()
, par exemple :
from jnpr.junos import Device from jnpr.junos.command.chassis_fan import ChassisFanTable from pprint import pprint import json with Device(host='router.example.com') as dev: fans = ChassisFanTable(dev) fans.get(key_items=['Fan 1', 'Fan 2']) pprint(json.loads(fans.to_json()))
user@host:~$ python3 junos-pyez-get-fan-data.py {'Fan 1': {'fan-measurement': 'Spinning at normal speed', 'fan-name': 'Fan 1', 'fan-rpm': 5280, 'fan-status': 'OK'}, 'Fan 2': {'fan-measurement': 'Spinning at normal speed', 'fan-name': 'Fan 2', 'fan-rpm': 5280, 'fan-status': 'OK'}}
Titre de la section (title)
Les tables peuvent inclure le paramètre facultatif title
pour définir le point de départ d’une section dans la sortie de la commande à partir de laquelle extraire et analyser les données. Lorsque la table définit item: '*'
, vous devez inclure title
pour spécifier l’en-tête de la section de sortie à extraire
Par exemple, considérez la sortie de commande suivante, qui est incluse dans un ensemble plus grand de sortie :
... TSEC status counters: kernel_dropped:0, rx_large:0 rx_short: 0 rx_nonoctet: 0, rx_crcerr: 0, rx_overrun: 0 rx_bsy: 0,rx_babr:0, rx_trunc: 0 rx_length_errors: 0, rx_frame_errors: 0 rx_crc_errors: 0 rx_errors: 0, rx_ints: 2250110, collisions: 0 eberr:0, tx_babt: 0, tx_underrun: 0 tx_timeout: 0, tx_timeout: 0,tx_window_errors: 0 tx_aborted_errors: 0, tx_ints: 2038385, resets: 1 ...
Le tableau suivant utilise le paramètre pour extraire et analyser les title
données de la TSEC status counters
section de la sortie. Dans ce cas, la table est définie item
comme '*', ce qui considère les données comme une seule chaîne de texte.
_TSECStatusCountersTable: item: '*' title: 'TSEC status counters:' view: _TSECStatusCountersView _TSECStatusCountersView: regex: kernel_dropped: 'kernel_dropped:(\d+)' rx_large: 'rx_large:(\d+)'
Délimiteur de champ (délimiteur)
Certaines commandes opérationnelles renvoient une sortie composée uniquement de paires clé-valeur. Si vous souhaitez simplement récupérer l’ensemble des données et extraire chaque paire clé-valeur, vous pouvez utiliser le paramètre pour définir le delimiter
mode de fractionnement de chaque paire de données au lieu de définir une vue distincte. Junos PyEZ utilise le délimiteur pour fractionner les données à la limite spécifiée et stocke chaque paire clé-valeur dans un dictionnaire.
Considérez la sortie suivante pour la show link stats
commande vty.
PPP LCP/NCP: 0 HDLC keepalives: 0 RSVP: 0 ISIS: 0 OSPF Hello: 539156 OAM: 0 BFD: 15 UBFD: 0 LMI: 0 LACP: 0 ETHOAM: 0 SYNCE: 0 PTP: 0 L2TP: 0 LNS-PPP: 0 ARP: 4292 ELMI: 0 VXLAN MRESOLVE: 0 Unknown protocol: 42
Le tableau suivant définit le délimiteur comme étant le caractère deux-points (:) :
--- FPCLinkStatTable: command: show link stats target: fpc1 delimiter: ":"
Lorsque vous récupérez les données dans l’application Junos PyEZ, la table fractionne chaque ligne de sortie au niveau du délimiteur et stocke les paires clé-valeur dans un dictionnaire.
{'ARP': 4292, 'ELMI': 0, 'SYNCE': 0, 'ISIS': 0, 'BFD': 15, 'PPP LCP/NCP': 0, 'OAM': 0, 'ETHOAM': 0, 'LACP': 0, 'LMI': 0, 'Unknown protocol': 42, 'UBFD': 0, 'L2TP': 0, 'HDLC keepalives': 0, 'LNS-PPP': 0, 'OSPF Hello': 539156, 'RSVP': 0, 'VXLAN MRESOLVE': 0, 'PTP': 0}
Expression d’évaluation (eval)
Vous pouvez utiliser le paramètre facultatif eval
pour ajouter ou modifier des paires clé-valeur dans les données finales renvoyées par la table et la vue. Le eval
paramètre mappe un nom de clé à une chaîne contenant une expression mathématique qui est évaluée par la fonction Python eval
. Vous pouvez inclure le paramètre dans les tables et les eval
vues, et eval
vous pouvez définir et calculer plusieurs valeurs.
Lorsque vous l’utilisez eval
dans une table, elle fait référence au dictionnaire de données complet pour le calcul, et la clé et la valeur calculée sont ajoutées en tant qu’élément supplémentaire unique au dictionnaire. Lorsque vous l’utilisez eval
dans une vue, l’expression est calculée à chaque itération des données et la valeur calculée est ajoutée aux données de cette itération. Si le nom de la eval
clé correspond à une clé définie dans la vue, eval
remplace la valeur de cette clé par la valeur calculée. Si le nom de la eval
clé ne correspond pas à une clé définie dans la vue, eval
ajoute la nouvelle clé et la nouvelle valeur calculée aux données.
L’expression eval
peut faire référence au data
dictionnaire renvoyé par la vue. L’expression doit être référencée data
à l’aide d’une variable de modèle Jinja, afin que Junos PyEZ puisse remplacer la variable par le dictionnaire lors de l’évaluation de l’expression.
L’exemple suivant utilise eval
dans la définition de table pour inclure une seule entrée supplémentaire dans le dictionnaire de données. La clé de l’élément ajouté est cchip_errors_from_lkup_chip
, et sa valeur est la somme du nombre d’interruptions.
--- CChipLiInterruptStatsTable: command: show xmchip {{ chip_instance }} li interrupt-stats target: NULL args: chip_instance: 0 key: - li_block - name eval: cchip_errors_from_lkup_chip: "reduce(lambda x,y: x+y, [v['interrupts'] for k,v in {{ data }}.items()])" view: CChipLiInterruptStatsView CChipLiInterruptStatsView: columns: li_block: LI Block name: Interrupt Name interrupts: Number of Interrupts last_occurance: Last Occurrence
Vous pouvez également définir eval
dans le tableau pour calculer et ajouter plusieurs paires clé-valeur, par exemple :
--- CChipDRDErrTable: command: show xmchip {{ instance }} drd error-stats args: instance: 0 target: NULL key: Interrupt Name item: '*' eval: cchip_drd_wan_errors: sum([v['interrupt_count'] for k, v in {{ data }}.items() if k.endswith('_0')]) cchip_drd_fab_errors: sum([v['interrupt_count'] for k, v in {{ data }}.items() if k.endswith('_1')]) view: CChipDRDErrView CChipDRDErrView: regex: cchip_drd_wan_timeouts: 'Total WAN reorder ID timeout errors:\s+(\d+)' cchip_drd_fab_timeouts: 'Total fabric reorder ID timeout errors:\s+(\d+)' columns: interrupt_name: Interrupt Name interrupt_count: Number of Interrupts filters: - interrupt_count
Pour plus d’informations sur l’utilisation eval
dans une vue, reportez-vous à la section Expression d’évaluation (évaluation).
Vue tabulaire (vue)
La view
propriété associe la définition de la table à une vue particulière. Une vue définit la manière dont la sortie de la table doit être analysée et mappe les noms de variables Python que vous avez définis par l’utilisateur aux champs de sortie des éléments de table sélectionnés. Vous pouvez personnaliser l’affichage pour ne sélectionner que certains champs dans les éléments de la table.
Si la sortie se compose uniquement de paires clé-valeur, vous pouvez utiliser le paramètre Table delimiter
pour extraire les données et stocker les paires clé-valeur dans un dictionnaire. Dans ce cas, vous n’avez pas besoin de définir une vue distincte.
Modèles TextFSM (plate-forme et use_textfsm)
Les tables Junos PyEZ peuvent référencer un modèle TextFSM pour analyser la sortie des commandes des équipements Juniper Networks ou d’autres fournisseurs. Vous devez installer la ntc-templates
bibliothèque sur votre serveur Junos PyEZ ou votre environnement virtuel afin d’utiliser les modèles TextFSM dans vos tables.
Pour utiliser un modèle TextFSM afin d’analyser la sortie de la commande, incluez-le use_textfsm: True
dans la table. Vous pouvez utiliser un modèle TextFSM seul ou en conjonction avec une vue Junos PyEZ. Junos PyEZ utilise les platform
valeurs et command
pour déterminer le nom de fichier du modèle.
Par exemple, le tableau suivant utilise le modèle juniper_junos_show_arp_no-resolve.textfsm pour analyser la sortie de commande d’un périphérique Junos Juniper Networks :
--- ArpTableTextFSM: command: show arp no-resolve platform: juniper_junos key: MAC use_textfsm: True
Pour plus d’informations sur l’utilisation des tables Junos PyEZ avec des modèles TextFSM, consultez Utiliser des tables Junos PyEZ avec des modèles TextFSM.