Définition de vues pour les tables de configuration Junos PyEZ
Les tables de configuration Junos PyEZ peuvent extraire des données spécifiques de la base de données de configuration sélectionnée d’un équipement Junos ou définir des ressources structurées qui peuvent être utilisées pour configurer un équipement Junos par programmation. Une table est associée à une vue, qui est utilisée pour sélectionner et référencer des éléments dans les données de la table. 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 noms de champs définis par l’utilisateur aux éléments XML des éléments de table sélectionnés. Une vue vous permet d’accéder à des champs spécifiques dans les données 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.
Lors de la récupération des données de configuration à l’aide de tables ayant la get
propriété ou la set
propriété, les champs d’affichage spécifient les données de configuration que l’application doit récupérer pour l’objet. Pour les tables qui incluent la propriété et définissent les set
ressources que vous pouvez configurer sur un appareil, les champs définis dans la vue limitent les instructions que vous pouvez configurer pour cette ressource.
Les vues Junos PyEZ, comme les tableaux, sont mises en forme à l’aide de YAML. Afficher les définitions associées aux tables de configuration peut inclure un certain nombre de paramètres, qui sont résumés dans le tableau 1.
Nom du paramètre d’affichage |
Paramètre d’affichage |
Table Type |
Description |
---|---|---|---|
Nom de la vue |
– |
|
Identificateur de vue défini par l’utilisateur. |
Éléments de champ |
|
|
Tableau associatif, ou dictionnaire, de paires clé-valeur qui mappe des noms de champs définis par l’utilisateur à des expressions XPath qui sélectionnent des éléments dans les données de configuration. Les noms de champs doivent être des noms de variables Python valides. Les expressions XPath sont relatives au contexte défini par la Lorsque l’étendue Table utilise |
Groupes de champs |
|
|
Tableau associatif, ou dictionnaire, de paires clé-valeur qui mappe des noms de champs définis par l’utilisateur à des expressions XPath qui sélectionnent des éléments dans les données de configuration. Les noms de champs doivent être des noms de variables Python valides. Les expressions XPath sont relatives au contexte défini par le paramètre correspondant Lorsque l’étendue Table utilise |
Groupes |
|
|
Tableau associatif, ou dictionnaire, de paires clé-valeur qui mappent un nom de groupe défini par l’utilisateur à une expression XPath qui définit le contexte XPath pour les champs de ce groupe. L’expression Xpath est relative au contexte défini par la |
Considérez les tableaux et vues de configuration Junos PyEZ suivants. UserTable
, qui inclut la get
propriété, extrait les données de configuration des comptes d’utilisateurs sur l’équipement cible. UserConfigTable
, qui inclut la set
propriété, définit une ressource de configuration structurée qui peut être utilisée pour configurer les comptes d’utilisateurs sur l’équipement cible et récupérer les données de configuration des comptes d’utilisateurs.
--- UserTable: get: system/login/user view: UserView UserView: groups: auth: authentication fields: username: name userclass: class uid: uid uidgroup: { uid: group } fullgroup: { full-name: group } fields_auth: password: encrypted-password --- UserConfigTable: set: system/login/user key-field: username view: UserConfigView UserConfigView: groups: auth: authentication fields: username: name userclass: class uid: uid fields_auth: password: encrypted-password
Les sections suivantes traitent des différents composants de la vue :
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. Par exemple :
--- UserTable: # Table definition view: UserView UserView: # View definition
Champs (champs)
Vous personnalisez les vues afin qu’elles ne référencent que les éléments nécessaires dans les données de configuration sélectionnées. Pour ce faire, vous incluez la fields
propriété et un tableau associatif contenant le mappage des noms de champs définis par l’utilisateur aux expressions XPath qui sélectionnent les éléments souhaités dans les éléments de la table de configuration. Les noms de champs doivent être des noms de variables Python valides. Les expressions XPath sont relatives à l’étendue de configuration définie par la get
propriété or set
dans la définition de la table.
Lors de la récupération des données de configuration à l’aide de tables qui incluent la get
propriété ou , set
les champs définis dans la vue identifient les instructions à extraire de la configuration. Pour les tables qui incluent la propriété et définissent les set
ressources que vous pouvez configurer sur un appareil, les champs identifient les instructions que vous pouvez configurer pour cette ressource. Vous devez définir explicitement des champs pour tous les éléments d’identification d’une ressource de configuration. Ces champs d’identificateur sont ensuite référencés dans la key-field
propriété de la définition de table correspondante.
Considérez l’exemple de hiérarchie de configuration suivant :
user@router> show configuration system login | display xml <rpc-reply> <configuration> <system> <login> ... <user> <name>user1</name> <uid>2001</uid> <class>super-user</class> <authentication> <encrypted-password>...</encrypted-password> </authentication> </user> <user> <name>readonly</name> <uid>3001</uid> <class>read-only</class> <authentication> <encrypted-password>...</encrypted-password> </authentication> </user> </login> </system> </configuration> </rpc-reply>
Si la table get
ou set
le paramètre définit l’étendue comme system/login/user
, l’expression XPath de chaque champ de la définition de vue est relative à ce contexte. La définition de vue suivante mappe les noms username
de champ définis par l’utilisateur, userclass
, et uid
aux éléments enfants de l’élément <user>
:
UserTable: get: system/login/user ... UserView: fields: username: name userclass: class uid: uid
Si la définition de table inclut la set
propriété, vous devez définir explicitement des champs pour tous les éléments d’identification qui identifient l’objet de manière unique, ce qui dans ce cas est <name>
. La propriété Table key-field
doit référencer tous les champs View qui correspondent à des éléments d’identification pour un objet. Vous devez toujours définir au moins un élément d’identificateur dans les fields
propriétés et key-field
dans set
les tables.
Dans le script Python, vous pouvez ensuite accéder à un élément View en tant que propriété variable.
from jnpr.junos import Device from myTables.ConfigTables import UserTable with Device(host='router.example.com') as dev: users = UserTable(dev) users.get() for account in users: print("Username is {}\nUser class is {}".format(account.name, account.userclass))
Lors de la récupération des données de configuration, chaque objet qui contient un <name>
élément dans les données possède une propriété par défaut name
que vous pouvez utiliser pour accéder à la valeur de cet élément.
Les champs d’affichage peuvent inclure différentes options en fonction du type de table qui fait référence à cet affichage. Les tables qui définissent des ressources de configuration structurées (set
) peuvent inclure des vérifications de type et de contrainte pour chaque champ afin de s’assurer que l’application Junos PyEZ fournit des données valides lors de la configuration de la ressource sur un périphérique. Les tables qui récupèrent les données de configuration (get
) peuvent inclure des options qui renvoient des valeurs d’attribut pour des éléments spécifiques ou qui spécifient le type de données à utiliser dans l’application. Les options de champ (tables 'get' ) et les options de champ (tables 'set') décrivent les options qui peuvent être incluses lors de l'utilisation get
de tables et set
, respectivement.
Options de champ (tables 'get')
Les tables qui incluent la propriété et récupèrent uniquement les get
données de configuration d’un appareil peuvent définir un certain nombre d’options ou d’opérateurs pour les champs de la vue associée. Cette section présente les différentes options.
Le format du champ détermine le type de la valeur d’un champ. Par défaut, les valeurs de champ sont stockées sous forme de chaînes. Vous pouvez spécifier un type différent pour la valeur dans le mappage des champs. L’exemple suivant définit la valeur de l’élément uid
comme étant un entier :
UserView: fields: username: name userclass: class uid: { uid : int }
Vous pouvez également définir la valeur de l’élément de champ sur une valeur booléenne à l’aide de la syntaxe suivante :
fieldname: { element-name: (True | False)=regex(expression) }
La valeur de l’élément est évaluée par rapport à l’expression régulière passée à regex()
. Si la valeur de l’élément correspond à l’expression, la valeur de l’élément de champ est définie sur la valeur booléenne définie dans le format. Dans l'exemple suivant, le superuser
champ est défini sur True si la valeur de l class
'élément contient 'super-user' :
superuser: { class : True=regex(super-user) }
Junos PyEZ fournit également l’opérateur des champs dans les group
vues de configuration. L’opérateur group
vous permet d’accéder à la valeur de l’attribut pour les junos:group
éléments hérités des groupes de configuration Junos. Cette valeur indique le groupe dont cet élément a hérité.
Par exemple, dans la configuration suivante, l’utilisateur remote
est hérité du groupe de configuration configuré au niveau de global
la [edit groups global]
hiérarchie.
<user junos:group="global"> <name junos:group="global">remote</name> <uid junos:group="global">2000</uid> ... </user>
Vous incluez l’opérateur group
dans le mappage des champs pour référencer la valeur de l’attribut junos:group
au lieu de la valeur de l’élément. L’exemple suivant définit les uidgroup
champs et fullgroup
avec l’opérateur group
. Lorsque vous accédez à ces noms de champ dans un script, le champ fait référence à la valeur de l’attribut junos:group
associé à l’élément uid
or full-name
.
UserView: groups: auth: authentication fields: username: name userclass: class uid: uid uidgroup: { uid: group } fullgroup: { full-name: group } fields_auth: password: encrypted-password
Options de champ (tables 'set')
Les tables qui définissent des ressources de configuration structurées (set
) peuvent inclure des vérifications de type et de contrainte pour chaque champ de la vue associée afin de garantir que l’application Junos PyEZ fournit des données valides lors de la configuration de la ressource sur un périphérique. Les vérifications de type garantissent que l’application Junos PyEZ fournit le type de données correct lorsqu’elle configure les instructions pour une ressource spécifique. Les vérifications de contraintes vous permettent de définir une valeur par défaut pour les instructions et de vous assurer que l’application fournit des valeurs qui se trouvent dans la plage correcte pour ces instructions. Les vérifications de type et de contrainte prises en charge, qui sont incluses en tant qu’options pour les champs de la vue associée, sont décrites dans cette section.
Les tableaux 2 et 3 résument respectivement les vérifications de type et de contrainte que vous pouvez définir pour les champs de la vue d’une set
table de configuration. Les vérifications de type s’excluent mutuellement, mais plusieurs vérifications de contrainte peuvent être définies pour chaque champ.
|
Description |
Exemple |
---|---|---|
|
Le champ n’accepte que les valeurs booléennes de |
|
|
Le champ n’accepte qu’une seule des valeurs définies dans la |
|
|
Le champ n’accepte que les valeurs à virgule flottante |
|
|
Le champ n’accepte que les valeurs entières |
|
|
Le champ n’accepte que les valeurs de chaîne |
|
Nom de la vérification de contrainte |
Description |
Exemple |
---|---|---|
|
Valeur par défaut d’un champ. Un champ utilise sa valeur par défaut lorsque l’utilisateur ne le configure pas explicitement. Si l’utilisateur appelle la méthode pour réinitialiser les |
|
|
Valeur maximale d’un champ, qui est interprétée en fonction du champ |
|
|
Valeur minimale d’un champ, qui est interprétée en fonction du champ |
|
Vous ne pouvez définir qu’une seule vérification de type pour un champ, mais vous pouvez définir plusieurs vérifications de contrainte. Ainsi, un champ peut inclure une default
valeur, une valeur minimale (minValue
) et une valeur maximale (maxValue
).
native_vlan : { 'native-vlan-id' : { 'type' : 'int', 'default' : 501, 'minValue' : 0, 'maxValue' : 4094 } }
Les minValue
options et maxValue
sont interprétées en fonction de la valeur de l’option type
. Par défaut, les valeurs de champ sont des chaînes. Pour les chaînes, minValue
et maxValue
sont les longueurs minimale et maximale de la chaîne. Pour les nombres entiers et les nombres à virgule flottante, les valeurs sont les valeurs minimale et maximale de ce type.
Si vous incluez des vérifications de type ou de contrainte pour un champ et que l’utilisateur fournit des données de configuration qui échouent aux vérifications, l’application Junos PyEZ lève l’exception appropriée TypeError
avec ValueError
un message décrivant l’erreur.
Groupes (groupes) et Groupes de champs (fields_)
Les groupes fournissent une méthode de raccourci pour sélectionner et référencer des éléments au sein d’un ensemble de nœuds spécifique dans un élément de table.
Dans les données de configuration suivantes, l’élément <authentication>
contient un élément enfant correspondant à la méthode d’authentification de l’utilisateur :
<configuration> <system> <login> ... <user> <name>user1</name> <uid>2001</uid> <class>super-user</class> <authentication> <encrypted-password>...</encrypted-password> </authentication> </user> <user> <name>readonly</name> <uid>3001</uid> <class>read-only</class> <authentication> <encrypted-password>...</encrypted-password> </authentication> </user> </login> </system> </configuration>
Dans la définition de la vue, vous pouvez utiliser la fields
propriété pour accéder aux éléments enfants en fournissant l’expression XPath complète à chaque élément par rapport à la hiérarchie de configuration sélectionnée. Par exemple, si la table get
ou set
la propriété sélectionne des éléments au niveau de la [edit system login]
hiérarchie, le mappage des <user>
éléments de champ utilise l’expression XPath suivante :
UserConfigTable: set: system/login/user ... UserConfigView: fields: password: authentication/encrypted-password
Vous pouvez également créer un groupe qui définit le contexte XPath sur l’élément <authentication>
, puis définir des éléments de groupe de champs qui fournissent simplement l’expression XPath relative à ce contexte. Vous pouvez définir autant de groupes que vous le souhaitez dans une définition de vue.
Pour créer un groupe, incluez la groups
propriété et mappez un nom de groupe défini par l’utilisateur à l’expression XPath qui définit le nouveau contexte. Définissez ensuite un groupe de champs dont le nom est fields_
suivi du nom du groupe. Le groupe de champs est un tableau associatif contenant le mappage des noms de champs définis par l’utilisateur aux expressions XPath qui sont maintenant relatives au contexte défini dans groups
. Les noms de champs doivent être des noms de variables Python valides.
L’exemple suivant définit le groupe auth
et le groupe fields_auth
de champs correspondant. Le auth
groupe définit le contexte au niveau de la system/login/user/authentication
hiérarchie et le password
champ fait référence à la valeur de l’élément encrypted-password
.
UserConfigTable: set: system/login/user ... UserConfigView: groups: auth: authentication fields_auth: password: encrypted-password ...
Que vous utilisiez des champs ou des groupes de champs, vous accédez à la valeur de la même manière dans le script Junos PyEZ en utilisant les noms de champs définis par l’utilisateur.