Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Définition de vues pour les tables opérationnelles Junos PyEZ qui analysent les sorties non structurées

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é. Une table est associée à une vue, qui est utilisée pour accéder aux champs des éléments de table et les mapper à des variables Python définies par l’utilisateur. Vous associez une table à une vue particulière en incluant la view propriété dans la définition de la table, qui prend le nom de la vue comme argument.

Une vue mappe vos variables définies par l’utilisateur aux données des éléments de table sélectionnés. Une vue vous permet d’accéder à des champs spécifiques dans la sortie en tant que variables avec des propriétés qui peuvent être manipulées en Python. Junos PyEZ gère l’extraction des données en Python ainsi que toute conversion de type ou normalisation des données. Les clés définies dans la vue doivent être des noms de variables Python valides.

Cette rubrique traite des différents composants de la vue.

Récapitulatif des paramètres dans les vues pour l’analyse de la sortie non structurée

Les vues Junos PyEZ, comme les tableaux, sont mises en forme à l’aide de YAML. Les vues qui analysent une sortie non structurée peuvent inclure un certain nombre de paramètres, qui sont résumés dans le tableau 1.

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

Paramètre d’affichage

Description

Nom de la vue

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

columns

(Facultatif) Liste des titres de colonne dans la sortie de la commande.

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. Pour chaque itération des données, l’expression est évaluée à l’aide de la fonction Python eval . La clé et la valeur calculée sont ajoutées aux données correspondant à cette itération.

exists

(Facultatif) Tableau associatif, ou dictionnaire, de paires clé-valeur qui mappent une clé définie par l’utilisateur à une chaîne. Si la chaîne est présente dans la sortie, la variable est définie sur True, sinon, la variable est définie sur False.

fields

(Facultatif) Tableau associatif, ou dictionnaire, de paires clé-valeur qui mappent une clé définie par l’utilisateur au nom d’une table imbriquée qui analyse une section spécifique de la sortie de la commande.

filters

(Facultatif) Liste d’une ou plusieurs clés définies sous columns. Le dernier ensemble de données comprend uniquement les données des colonnes sélectionnées.

regex

(Facultatif) Liste d’expressions régulières pour correspondre au contenu souhaité.

Nom de la vue

Le nom de la vue est un identificateur défini par l’utilisateur pour la vue. Vous associez une table à une vue particulière en incluant la propriété dans la définition de table view et en fournissant le nom de la vue comme argument.

L’exemple suivant définit une vue nommée ChassisFanView, qui est référencée par le paramètre Table view :

Colonnes

Vous pouvez utiliser le columns paramètre dans une vue pour extraire et analyser la sortie de commande mise en forme en lignes et en colonnes.

Considérez la sortie de commande suivante show ospf neighbor :

Pour extraire les données, incluez le columns paramètre dans la vue et mappez le nom de votre variable Python au nom de la colonne. L’application stocke la clé et la valeur extraites de la sortie de la commande pour cette colonne sous la forme d’une paire clé-valeur dans le dictionnaire de l’élément donné.

La vue suivante extrait les données de chaque colonne de la sortie de la show ospf neighbor commande :

Lorsque vous récupérez et imprimez les données dans l’application Junos PyEZ, les données de chaque voisin incluent les clés de colonne et les données correspondantes.

Pour filtrer les données afin d’inclure uniquement les données des colonnes sélectionnées, incluez le filters paramètre dans la vue. Pour plus d’informations, reportez-vous à la section Filtres.

Certaines sorties de commandes incluent des titres de colonnes qui s’étendent sur plusieurs lignes, par exemple :

Pour définir un titre de colonne multiligne dans une vue, définissez l’élément clé de colonne sur une liste de mots dans chaque ligne pour ce titre. La vue suivante définit les colonnes de la sortie de la commande précédente :

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 est utilisé eval dans la définition de la vue. L’entrée cpu modifie la valeur existante du cpu champ pour chaque élément du dictionnaire de données, et l’entrée max crée une nouvelle paire clé-valeur pour chaque élément du dictionnaire de données.

Considérez l’exemple de sortie suivant pour la show threads commande vty :

Le paramètre View eval modifie chaque cpu entrée pour omettre le signe de pourcentage (%). Par conséquent, les données incluent « 0 » au lieu de « 0 % ». De plus, il ajoute une nouvelle clé, max, et sa valeur calculée pour chaque élément.

Pour obtenir des exemples d’utilisation eval dans la définition de table, reportez-vous à la section Expression d’évaluation (évaluation).

Existe

Vous pouvez utiliser le paramètre facultatif exists dans une vue pour indiquer si une chaîne est présente dans la sortie de la commande. exists est un dictionnaire de paires clé-valeur qui mappent un nom de variable Python défini par l’utilisateur à la chaîne à faire correspondre dans la sortie de la commande. Si la chaîne est présente dans la sortie, la variable prend la valeur True. Dans le cas contraire, la variable prend la valeur False.

Considérez la sortie de la show host_loopback status-summary commande vty.

Le tableau suivant définit exists pour tester si la sortie de la commande inclut une No detected wedges chaîne ou une No toolkit errors chaîne :

Lorsque vous utilisez la table et la vue pour rechercher les chaînes et imprimer les valeurs résultantes dans votre application Junos PyEZ, les deux variables sont définies sur True dans ce cas.

Champs

La sortie de la commande peut être longue et complexe, et vous aurez peut-être besoin d’une logique différente pour analyser différentes sections de la sortie. Dans certains cas, vous ne pouvez pas analyser correctement la sortie de la commande à l’aide d’une seule table et d’une seule vue. Pour analyser ce type de sortie, vous pouvez inclure le paramètre facultatif fields dans la vue. fields est un dictionnaire de paires clé-valeur qui mappe une clé définie par l’utilisateur au nom d’une table imbriquée qui sélectionne une section spécifique de la sortie de la commande. Chaque table imbriquée peut référencer sa propre vue, qui est utilisée pour analyser les données sélectionnées par cette table.

Considérons la sortie de la show xmchip 0 pt stats commande vty, qui comporte deux sections de données différentes :

La vue suivante XMChipStatsView utilise le fields paramètre pour définir deux tables supplémentaires, qui sont utilisées pour analyser les deux sections différentes de la sortie de la commande. Les _WANPTStatTable tables et _FabricPTStatTable extraient les données des sections et WAN PT statistics , Fabric PT statistics respectivement. Dans ce cas, les tables utilisent le delimiter paramètre pour extraire et fractionner les données, de sorte qu’elles n’ont pas besoin de référencer une vue distincte.

Lorsque vous récupérez et imprimez les données dans l’application Junos PyEZ, chaque clé définie sous fields contient les données sélectionnées et analysées par la table correspondante.

Comme autre exemple, considérez la sortie de la show ttp statistics commande vty :

La FPCTTPStatsView vue utilise le fields paramètre pour référencer plusieurs tables imbriquées, qui extraient les données dans les différentes sections de la sortie. Chaque table fait référence à sa propre vue ou utilise le delimiter paramètre pour analyser les données de cette section.

Lorsque vous récupérez et imprimez les données dans l’application Junos PyEZ, chaque fields clé contient les données qui ont été extraites et analysées par la table correspondante.

Filtres

Le columns paramètre extrait les données de la sortie de la commande qui sont mises en forme dans des lignes et des colonnes. Lorsque vous incluez le columns paramètre dans une vue, vous pouvez éventuellement l’inclure filters pour filtrer les données de colonne incluses dans la sortie finale. Le filters paramètre définit une liste d’une ou plusieurs clés définies sous columns. Le dernier ensemble de données comprend uniquement les données des colonnes sélectionnées. Vous pouvez fournir des filtres par défaut dans la définition de la vue, et vous pouvez également définir ou remplacer des valeurs de filtre dans l’application Junos PyEZ.

Considérez la sortie de la show ospf neighbor commande :

Dans la vue suivante, le columns paramètre définit des clés pour toutes les colonnes de la sortie de commande correspondante, mais le filters paramètre inclut uniquement les données des colonnes et Address State dans le dictionnaire de données.

Le code Junos PyEZ suivant appelle get() d’abord sans aucun argument, ce qui récupère les données à l’aide de la liste par défaut de filtres définie dans la vue. Le deuxième appel à get() inclut l’argument filters , qui remplace la liste de filtres définie dans la vue.

Lorsque vous exécutez l’application, le premier appel à get() utilise les filtres définis dans la vue, et le deuxième appel utilise les filtres définis dans l’appel, qui remplacent ceux définis dans la vue.

Regex

Vous pouvez utiliser le paramètre facultatif regex d’une vue pour faire correspondre et extraire des champs spécifiques dans la sortie de la commande. regex est un dictionnaire qui mappe des clés à des expressions régulières. Si la table correspondante ne définit item: '*'pas , Junos PyEZ combine les expressions régulières et fait correspondre le résultat à chaque ligne de sortie. Toutefois, si la table définit item: '*' l’extraction des données sous la forme d’une seule chaîne de texte, Junos PyEZ compare chaque expression régulière individuelle à la chaîne de texte entière.

Le groupe de capture défini dans l’expression régulière détermine les données extraites du champ et stockées dans le dictionnaire de données. Si vous définissez un groupe de capture, seule la valeur de ce groupe est stockée dans les données. Dans le cas contraire, Junos PyEZ stocke la valeur qui correspond à l’expression complète. Par exemple, (d+.d+) récupère et stocke une valeur flottante à partir de l’expression de recherche de chaîne, alors que (d+).d+ ne stocke que la partie entière des données. Si vous définissez plusieurs groupes, seule la valeur du premier groupe est stockée.

Junos PyEZ utilise le pyparsing module pour définir un certain nombre de mots-clés intégrés que vous pouvez utiliser à la place d’une expression régulière. Le tableau 2 répertorie le mot-clé, une brève description et l’expression correspondante, où pp est dérivé de import pyparsing as pp.

Tableau 2 : Mots-clés des paramètres d’expressions régulières

Mot-clé

Description

Expression

hex_numbers

Mot ne contenant que des caractères hexadécimaux

hex_numbers = pp.OneOrMore(pp.Word(pp.nums, min=1))
    & pp.OneOrMore(pp.Word('abcdefABCDEF', min=1))

numbers

Mot constitué d’un entier ou d’un nombre à virgule flottante

numbers = (pp.Word(pp.nums) + pp.Optional(pp.Literal('.') +
     pp.Word(pp.nums))).setParseAction(lambda i: ''.join(i))

percentage

Mot composé de chiffres et d’un signe de pourcentage à la fin (%)

percentage = pp.Word(pp.nums) + pp.Literal('%')

printables

Un ou plusieurs mots composés de caractères imprimables (tous les caractères autres que des espaces)

printables = pp.OneOrMore(pp.Word(pp.printables))

word

Mot composé de caractères alphabétiques ou alphanumériques

word = pp.Word(pp.alphanums) | pp.Word(pp.alphas)

words

Une ou plusieurs word chaînes de caractères

words = (pp.OneOrMore(word)).setParseAction(lambda i: ' '.join(i))

Considérez la sortie de commande suivante show icmp statistics . Chaque section de sortie est sous un titre de section spécifique, et les données se composent d’un nombre et d’un ou plusieurs mots.

Pour analyser la sortie précédente, la vue principale définit fields, qui fait référence à des tables et des vues imbriquées qui analysent chaque section de la sortie. Les vues imbriquées définissent le regex paramètre à faire correspondre aux données extraites par la table correspondante.

Par exemple, la _ICMPDiscardsTable table sélectionne les données sous la ICMP Discards section de la sortie de la commande. La _ICMPDiscardsView vue définit deux clés, value et name, qui correspondent à des expressions régulières. value correspond à un ou plusieurs chiffres et name correspond à un ou plusieurs mots. Étant donné que la table ne définit item: '*'pas , les expressions régulières sont combinées et mises en correspondance avec chaque ligne de données de cette section.

Le _ICMPErrorsTable tableau sélectionne les données sous la ICMP Errors section de la sortie de la commande. La _ICMPErrorsView vue définit les error clés et name et utilise les mots-clés numbers intégrés et words à la place de la définition explicite des expressions régulières.

Si la table définit item: '*', les données extraites sont considérées comme une chaîne de texte. Dans ce cas, chaque expression régulière de la vue correspondante correspond à la chaîne entière.

Prenons l’exemple de la sortie de la show ithrottle id 0 commande.

Le tableau suivant permet item: '*' d’extraire les données sous la forme d’une seule chaîne. Le paramètre View regex définit trois expressions régulières. Chaque motif d’expression régulière est mis en correspondance avec la chaîne entière. Étant donné que les expressions régulières définissent la capture de groupes, Junos PyEZ stocke uniquement les données qui correspondent au groupe.

Lorsque vous récupérez et imprimez les données dans l’application Junos PyEZ, les données incluent les trois regex éléments, qui contiennent la valeur correspondante par le groupe de capture pour cette expression.