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

Opérations (op) Junos PyEZ Les tables 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 de la sortie sous forme de variables avec des propriétés que vous pouvez manipuler en Python. Junos PyEZ gère l’extraction des données en Python ainsi que toute conversion de type ou normalisation de 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 des sorties non structurées

Les vues Junos PyEZ, comme les tables, sont mises en forme à l’aide de YAML. Les vues qui analysent la sortie non structurée peuvent inclure un certain nombre de paramètres. Le Tableau 1 récapitule les paramètres.

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

Paramètre de vue

Descriptif

Nom de l’affichage

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. L’expression est évaluée pour chaque itération des données. 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. L’ensemble final de données ne comprend que les données des colonnes sélectionnées.

regex

(Facultatif) Liste des expressions régulières correspondant au contenu souhaité.

Nom de l’affichage

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

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

Colonnes

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

Considérez le résultat de commande suivant 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 commande de cette colonne sous forme de 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 de n’inclure que les données des colonnes sélectionnées, incluez le filters paramètre dans la vue. Pour plus d’informations, voir filtres.

Certaines sorties de commande 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 égal à 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. 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 View. L’entrée cpu modifie la valeur existante du cpu champ pour chaque élément du dictionnaire de données. 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 comprennent « 0 » au lieu de « 0 % ». En outre, il ajoute une nouvelle clé, maxet sa valeur calculée pour chaque élément.

Pour obtenir des exemples d’utilisation eval dans la définition Table, consultez Expression d’évaluation (eval).

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 commande. 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.

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 Table and View pour tester 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 des commandes peut être longue et complexe, et vous pouvez avoir 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 mappent 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 analyse 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 commande. _FabricPTStatTable Les _WANPTStatTable et Les tableaux extraient les données des WAN PT statistics sections et des Fabric PT statistics sections, respectivement. Dans ce cas, les tables utilisent le delimiter paramètre pour extraire et diviser les données. Ainsi, les tables 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.

Autre exemple, considérons 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 commande qui est mise en forme en lignes et en colonnes. Lorsque vous incluez le columns paramètre dans une vue, vous pouvez éventuellement inclure le paramètre pour filtrer les filters données de colonne incluses dans la sortie finale. La filters valeur est une liste d’une ou plusieurs clés définies sous columns. L’ensemble final de données ne comprend que 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 les valeurs de filtre dans l’application Junos PyEZ.

Considérez le résultat 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. Avec le paramètre included filters , le dictionnaire de données résultant inclut uniquement les données des Address colonnes and State .

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éfinis 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. 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 dans une vue pour faire correspondre et extraire des champs spécifiques dans la sortie de la commande. regex est un dictionnaire qui mappe les clés aux expressions régulières. Si la table correspondante ne définit item: '*'pas , Junos PyEZ combine les expressions régulières et compare le résultat à chaque ligne de sortie. Toutefois, si la table définit item: '*' l’extraction des données sous la forme d’une chaîne de texte unique, Junos PyEZ fait correspondre 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. Sinon, 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 exploite 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 3 répertorie le mot-clé, une brève description et l’expression correspondante, où pp est dérivé de import pyparsing as pp.

Tableau 3 : mots-clés des paramètres regex

Mot-clé

Descriptif

L’expression

hex_numbers

Mot contenant uniquement des caractères hexadécimaux

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

numbers

Mot composé d’un entier ou d’une valeur 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 les 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

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

Considérez le résultat de commande suivant show icmp statistics . Chaque section de sortie se trouve sous un titre de section spécifique et les données sont constituées d’un nombre et d’un ou plusieurs mots.

Pour analyser la sortie précédente, la vue principale définit , qui fait fieldsré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 à comparer aux données extraites par la table correspondante.

Par exemple, le _ICMPDiscardsTable tableau sélectionne les données sous la ICMP Discards section dans la sortie de la commande. L’affichage _ICMPDiscardsView 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. Comme le tableau 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 dans la sortie de la commande. La _ICMPErrorsView vue définit les error touches et name . Les champs utilisent les mots-clés numbers intégrés et words au lieu de définir explicitement des expressions régulières.

Si le tableau 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.

Considérez le résultat 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 de la vue 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 des groupes de capture, Junos PyEZ ne stocke que 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 comprennent les trois regex éléments, qui contiennent la valeur correspondante du groupe de capture pour cette expression.

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.