Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Définir des tables opérationnelles Junos PyEZ pour l’analyse des résultats non structurés

Créez des tables personnalisées qui sélectionnent des données à partir de la sortie de la commande CLI ou vty pour extraire les informations opérationnelles d’un équipement Junos.

Les tableaux opérationnels (op) de Junos PyEZ pour la sortie non structurée peuvent extraire des données à partir de la sortie texte de :

  • Une commande CLI exécutée sur un équipement Junos

  • Une commande vty exécutée sur un concentrateur PIC flexible (FPC) donné

Les données extraites sont ensuite converties en JSON. Les tables d’opérations Junos PyEZ pour la sortie non structurée vous permettent de récupérer et d’analyser rapidement les informations sur l’état opérationnel de l’équipement. Les tables sont particulièrement utiles lorsque vous devez analyser une sortie de commande que vous ne pouvez pas récupérer dans un format structuré tel que XML.

Cette rubrique traite des différents composants du tableau.

Résumé des paramètres dans les tableaux d’opérations pour l’analyse des résultats non structurés

Les tables Junos PyEZ sont mises en forme à l’aide de YAML. Les définitions de table d’opérations peuvent inclure un certain nombre de paramètres obligatoires et facultatifs. Le Tableau 1 récapitule les paramètres.

Tableau 1 : Paramètres des tables d’opérations Junos PyEZ pour la sortie non structurée

Nom du paramètre de table

Paramètre de table

Descriptif

Nom de la table

–

Identificateur défini par l’utilisateur pour la table.

Commande

command

Commande CLI ou vty à exécuter.

Arguments de commande

args

(Facultatif) Lorsque vous définissez la commande en tant que modèle Jinja, args est un tableau associatif, ou dictionnaire, de paires clé-valeur. Les entrées mappent les variables du modèle de commande aux valeurs par défaut utilisées lors du rendu du modèle.

FPC cible

target

(Facultatif) FPC sur lequel exécuter une commande vty.

Élément du tableau

item

(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 pour la vue associée.

Spécifiez '*' pour extraire et faire correspondre la chaîne entière plutôt que des lignes individuelles.

Clé d’élément de table

key

(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 table.

Touches sélectionnées

key_items

(Facultatif) Liste d’une ou plusieurs clés d’élément de table pour lesquelles renvoyer des données.

Titre de la section

title

(Facultatif) Chaîne qui sélectionne la section de sortie contenant les données à analyser.

Délimiteur de champ

delimiter

(Facultatif) Délimiteur qui définit comment diviser 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

eval

(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. La clé et la valeur calculée sont ajoutées aux données finales renvoyées par la table et la vue.

Vue du tableau

view

(Facultatif) Vue utilisée pour extraire les données de champ des éléments de table.

Modèle TextFSM

use_textfsm

(Facultatif) Booléen qui spécifie s’il faut utiliser un modèle TextFSM pour analyser les données.

Identifiant de plate-forme de modèle TextFSM

platform

(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 identifiant 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:

Commande

Une table Junos PyEZ op 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 sous la forme d’une simple chaîne de caractères ou d’un modèle Jinja.

Par exemple, le tableau suivant exécute la show chassis fan commande sur l’appareil.

Le tableau suivant exécute la show cmerror module brief commande vty sur le FPC cible.

Lorsque vous définissez la commande en tant que modèle Jinja, vous devez également fournir le args paramètre. Le args paramètre est 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 (args).

Arguments de commande (args)

Vous pouvez définir la commande CLI ou vty pour le command paramètre en tant que modèle Jinja qui remplace les arguments de commande par des variables. Lorsque vous utilisez un modèle Jinja, vous devez également définir le args paramètre. Le args paramètre est un dictionnaire de paires clé-valeur qui mappent les noms de variables du 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 les valeurs par défaut des variables de modèle, incluez le args paramètre dans la définition de table 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. L’application utilise la valeur par défaut lorsque vous appelez la get() méthode dans votre script et ne fournissez pas d’argument qui remplace cette valeur par défaut.

De plus, vous pouvez définir l’argument args get() en tant que dictionnaire dans la méthode de la table pour :

  • Définissez une valeur pour toute variable de modèle qui n’a pas de valeur par défaut définie dans le tableau

  • Remplacez la valeur par défaut définie dans le tableau pour une ou plusieurs variables de modèle

L’exemple suivant exécute la commande du tableau précédent en utilisant le protocole 'bgp' au lieu de la valeur par défaut de 'ospf'.

FPC cible (fpc)

Les tables d’op Junos PyEZ peuvent exécuter des commandes vty sur un FPC spécifique. Lorsque vous utilisez une commande vty, la table doit inclure le target paramètre pour définir le FPC cible. Vous pouvez définir target Null et forcer l’utilisateur à spécifier le FPC cible dans l’application. Vous pouvez également 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. Ainsi, l’utilisateur doit spécifier le FPC cible dans l’application Junos PyEZ :

Le tableau suivant exécute la commande vty sur FPC show memory 1, sauf si l’utilisateur remplace cette valeur dans l’application Junos PyEZ.

Dans l’application Junos PyEZ, vous pouvez définir le FPC cible ou remplacer le FPC par défaut défini dans le tableau. Pour spécifier le FPC, définissez l’argument target get() dans la méthode de la table sur le FPC requis, par exemple :

Élément de tableau (élément)

La propriété facultative Table item est une chaîne ou une expression régulière qui définit comment diviser 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 la correspondance et l’extraction de 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: '*' quand 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 :

Le tableau suivant extrait chaque section de la sortie commençant par TSEC Ethernet Device Driver:. Dans ce cas, la valeur de est key: name dérivée du groupe de capture dans l’expression régulière définie dans item.

Vous pouvez également définir item 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 est item: '*' utile lorsque vous incluez le regex paramètre dans une vue et que vous souhaitez que chaque expression corresponde à la chaîne de texte entière. Sinon, les regex expressions sont combinées et mises en correspondance avec chaque ligne.

Le tableau suivant extrait le bloc de texte sous le titre Receive: et compare chaque expression régulière à la chaîne de texte entière :

Clé d’élément de table (clé)

La propriété facultative key définit les champs de sortie 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 clé unique 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 à une variable ou à un nom de champ défini dans la vue.

Considérez le résultat suivant show chassis fan :

Le tableau suivant définit la clé de l’élément Tableau comme fan-name, qui correspond à la valeur sous la Item colonne de la sortie.

Lorsque vous récupérez et imprimez les données dans l’application Junos PyEZ, chaque élément du dictionnaire obtenu utilise la valeur de ce champ comme clé.

Vous pouvez également définir key une liste pour identifier un élément de table à l’aide d’une clé composite. Par exemple :

Touches sélectionnées (key_items)

Le key paramètre définit les champs de 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 les données de certaines valeurs de clé. key_items définit la clé ou la liste des clés des éléments de table pour lesquels récupérer les données. Vous pouvez définir le key_items paramètre dans la définition Table ou dans l’application Junos PyEZ.

Considérez le résultat suivant show chassis fan :

La table suivante définit la clé de l’élément de table comme fan-name et ne récupère que les données de l’élément de table avec une valeur de clé égale à Fan 1.

Dans l’application Junos PyEZ, vous pouvez définir le key_items à renvoyer et remplacer celui key_items défini dans le tableau. Définissez l’argument key_items get() dans la méthode de la table sur une liste ou un tuple des éléments souhaités. Par exemple :

Titre de la section (titre)

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 le tableau 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 large de sortie :

Le tableau suivant utilise le title paramètre pour extraire et analyser les données de la TSEC status counters section de la sortie. Dans ce cas, la table se définit item comme « * », ce qui considère les données comme une chaîne de texte unique.

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 delimiter paramètre au lieu de définir une vue distincte. Le delimiter paramètre définit comment diviser chaque paire de données. 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.

Le tableau suivant définit le délimiteur comme étant le caractère deux-points (:) :

Lorsque vous récupérez les données dans l’application Junos PyEZ, la table divise chaque ligne de sortie au niveau du délimiteur et stocke les paires clé-valeur dans un dictionnaire.

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. Vous pouvez inclure le paramètre dans les tables et les eval vues, et eval définir et calculer plusieurs valeurs.

Lorsque vous utilisez eval dans une table, il fait référence au dictionnaire de données complet pour le calcul. La clé et la valeur calculée sont ajoutées en tant qu’élément supplémentaire unique au dictionnaire. Lorsque vous utilisez eval dans une vue, l’expression est calculée à chaque itération des données. La valeur calculée est ajoutée aux données pour 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 valeur calculée aux données.

L’expression eval peut faire référence au data dictionnaire renvoyé par la vue. L’expression doit faire référence data à l’aide d’une variable modèle Jinja, afin que Junos PyEZ puisse remplacer la variable par le dictionnaire lors de l’évaluation de l’expression.

À partir de la version 2.8.1 de Junos PyEZ, les expressions utilisées dans les instructions Table et View eval sont évaluées à l’aide d’une implémentation restreinte afin de réduire les risques de sécurité liés à l’exécution de code. Junos PyEZ analyse et valide chaque expression par rapport à un ensemble pris en charge de syntaxe, de fonctions, de méthodes et d’opérations Python avant l’évaluation. Les expressions contenant des éléments non pris en charge ou non sécurisés sont rejetées avec une UnsafeExpressionError erreur. Le Tableau 2 présente les expressions prises en charge.

Tableau 2 : expressions prises en charge dans les instructions d’évaluation
Catégorie Syntaxe prise en charge Exemple

Arithmétique

+ - * / // % **

a+b
a*100

Logique booléenne

and, or

a > 0 and b > 0

Littéraux

Entiers, flottants

123
3.14

Littéraux de chaîne

'text'

Littéraux du dictionnaire

{'a':1}

Liste littérale

[1,2,3]

Définir des littéraux

{1,2,3}

Littéraux de uplet

(1,2,3)

Comparaison
Opérateurs

== != < <= > >=

{{ cpu }} > 80

Dictionnaire
Compréhensions

{k:v for ...}

{k:v for k,v in {{ data }}.items()}

Liste
Compréhensions

[expr for ...]

[v['errors'] for k,v in {{ data }}.items()]

Ensemble
Compréhensions

{expr for ...}

{k for k in {{ data }}.keys()}

Expressions conditionnelles

x if cond else y

'busy' if {{ cpu }} > 80 else 'idle'

Fonctions

abs()—Valeur absolue
dict()—Création d’un dictionnaire
isinstance(): vérification de type
len()—Longueur d’un itérable
max()—Valeur maximale
min()—Valeur minimale
sum()—Somme d’un itérable

sum([1,2,3])

Générateur
expressions

(expr for ...)

(v for v in {{ data }}.values())

Indexation

[n]

{{ data }}[0]

Adhésion

in, not in

'xe' in {{ name }}

Méthodes

endswith()—Vérification du suffixe de chaîne
get()—Recherche sécurisée dans le dictionnaire
items(): renvoie les clés et les valeurs du dictionnaire
keys(): renvoie les clés du dictionnaire
values(): renvoie les valeurs du dictionnaire

{{ data }}.items()

Découpage

[start:end:step]

'{{ cpu }}'[:-1]

Opérateurs unaires

+x, -x, not x

-{{ cpu }}

L’exemple suivant est utilisé eval dans la définition Table pour inclure une seule entrée supplémentaire dans le dictionnaire de données. La clé de l’élément ajouté est total_interrupts, et sa valeur est la somme du nombre d’interruptions.

Vous pouvez également définir eval dans le tableau de calculer et d’ajouter plusieurs paires clé-valeurs, par exemple :

Pour plus d’informations sur l’utilisation dans une vue, voir Expression d’évaluation eval (eval).

Vue du tableau (afficher)

La view propriété associe la définition Table à une vue particulière. Une vue définit comment la sortie de la table doit être analysée et mappe les noms de vos variables Python définis par l’utilisateur aux champs de sortie des éléments de table sélectionnés. Vous pouvez personnaliser la vue 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 (plateforme et use_textfsm)

Les tables Junos PyEZ peuvent référencer un modèle TextFSM pour analyser la sortie de commande des périphériques Juniper Networks ou des périphériques d’autres fournisseurs. Vous devez installer la bibliothèque sur votre serveur Junos PyEZ ou votre environnement virtuel afin d’utiliser des ntc-templates modèles TextFSM dans vos tables.

Pour utiliser un modèle TextFSM pour analyser la sortie de la commande, incluez-la use_textfsm: True dans le tableau. Vous pouvez utiliser uniquement le modèle TextFSM ou vous pouvez utiliser le modèle conjointement 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 :

Pour plus d’informations sur l’utilisation des tables Junos PyEZ avec des modèles TextFSM, reportez-vous à la section Utilisation des tables Junos PyEZ avec des modèles TextFSM.

Tableau de l’historique des modifications

La prise en charge des fonctionnalités est déterminée par la plateforme et la version que vous utilisez. Utilisez l’explorateur de fonctionnalités pour déterminer si une fonctionnalité est prise en charge sur votre plateforme.

Libération
Descriptif
2.8.1
À partir de la version 2.8.1 de Junos PyEZ, les expressions utilisées dans les instructions Table et View eval sont évaluées à l’aide d’une implémentation restreinte.