Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Utiliser les tables de configuration Junos PyEZ pour configurer des ressources structurées sur les équipements Junos

Les tables et vues de configuration Junos PyEZ qui spécifient la set propriété vous permettent de définir des ressources structurées pouvant être utilisées pour configurer par programmation les équipements Junos. Après avoir chargé ou importé la définition de la table pour votre ressource structurée dans votre application Junos PyEZ, l’application peut configurer la ressource sur vos équipements. Cette rubrique traite du processus général et de certaines tâches spécifiques d’utilisation des tables et vues de configuration Junos PyEZ pour configurer des ressources structurées sur un équipement.

Processus de configuration général

La propriété Configuration Table set identifie le niveau de hiérarchie de configuration auquel une ressource est configurée et définit le contexte XPath pour les champs de la vue. Par exemple, le tableau suivant définit une user ressource au niveau de la [edit system login] hiérarchie :

Les champs inclus dans la vue définissent les déclarations de branche que l’utilisateur peut configurer pour cette ressource. Un champ peut définir une valeur par défaut, ainsi que des vérifications de type et de contrainte.

Pour configurer une ressource structurée sur un équipement, vous devez charger ou importer la Table dans votre application. Vous créez ensuite un objet Table et l’associez à l’objet Device représentant l’équipement cible. Par exemple :

Pour définir des valeurs pour les déclarations de configuration d’une ressource, définissez les noms de champs correspondants (tels que définis dans la vue) sur les valeurs souhaitées.

La valeur par défaut d’un champ est None à moins que la vue ne définisse explicitement une valeur par défaut pour ce champ. Si la vue définit une vérification de type ou de contrainte pour un champ, l’application doit fournir le type de données et la valeur corrects pour ce champ et, dans l’idéal, gérer toutes les erreurs susceptibles d’être soulevées en cas d’échec du contrôle. Vous devez toujours définir des valeurs pour tous les champs clés déclarés dans la propriété de key-field la table, qui est usernamedans cet exemple .

Le code suivant importe UserConfigTable et configure les valeurs pour le username, userclasset password les champs. Le crypt module calcule le hachage du mot de passe de l’utilisateur pour la configuration. Dans cet exemple, Python3 doit utiliser la crypt() fonction avec un seul argument.

Pour obtenir des informations détaillées sur des tâches de configuration plus spécifiques, telles que la configuration d’instructions avec des mots-clés ou plusieurs valeurs de forme fixe, la configuration de plusieurs instances d’une instruction ou d’une ressource, la suppression d’une déclaration de branche ou d’un conteneur, ou la configuration d’une propriété d’objet qui correspond à un attribut XML Junos, consultez les sections suivantes :

Après avoir configuré un objet, vous devez appeler la append() méthode pour créer la configuration XML Junos correspondante et l’ajouter à l’objet qui stocke l’ensemble lxml maître des modifications de configuration pour cet objet Table. Les modifications de configuration incluent uniquement les champs qui ont une valeur par défaut définie dans la vue ou une valeur configurée par l’utilisateur. Les champs qui conservent leur valeur None initiale sont ignorés.

Après avoir construit le XML, la append() méthode réinitialise également tous les champs à leurs valeurs par défaut ou si None la vue ne définit pas une valeur par défaut pour ce champ. Cela vous permet de configurer plusieurs objets dans la même application et de ne pas utiliser involontairement une valeur définie pour une ressource lorsque vous configurez des ressources ultérieures. Chaque fois que vous configurez une nouvelle ressource, vous devez appeler append() pour ajouter les modifications de configuration à l’ensemble principal de modifications. Pour plus d’informations sur la append() méthode, voir Utiliser append() pour générer les données de configuration Junos XML.

Si nécessaire, vous pouvez également réinitialiser manuellement tous les champs d’un objet Table en appelant la reset() méthode.

La reset() méthode restaure tous les champs à leurs valeurs par défaut ou si None la vue ne définit pas de valeur par défaut. La reset() méthode ne réinitialise que les valeurs actuelles des champs. Elle n’affecte pas le XML contenant les modifications de configuration qui ont été construites jusqu’à ce point par des appels à la append() méthode.

Vous pouvez récupérer la configuration XML représentant vos modifications à n’importe quel point de l’application en appelant la get_table_xml() méthode, qui est décrite en détail dans Afficher vos modifications de configuration.

Après avoir configuré tous les objets nécessaires et appelé append(), vous pouvez charger vos modifications de configuration dans la base de données de configuration partagée sur l’équipement en utilisant l’une des deux méthodes suivantes :

  • Appelez la set() méthode, qui appelle automatiquement le lock(), load(), commit()et les unlock() méthodes

  • Appelez le lock(), load(), commit()et les unlock() méthodes individuellement

Note:

Lorsque vous créez l’instance Table avec un gestionnaire de contexte (with ... as syntaxe) qui inclut le mode paramètre permettant d’utiliser un mode de configuration spécifique, le gestionnaire de contexte gère l’ouverture, le verrouillage, la fermeture et le déverrouillage de la base de données. Dans ce cas, il vous suffit d’appeler les load() méthodes et commit() pour configurer l’équipement. L’appel de la lock() méthode ou set() entraîne une LockError exception.

L’utilisation de la méthode unique set() offre une simplicité, mais l’appel des méthodes individuelles offre une flexibilité supplémentaire, par exemple lorsque vous devez appeler d’autres méthodes après avoir chargé les données de configuration, mais avant de les engager. Par exemple, vous pouvez appeler les diff() méthodes ou pdiff() pour examiner les différences de configuration après avoir chargé les données, mais avant de les valider. Ou vous devrez peut-être appeler la rollback() méthode pour réinitialiser la configuration du candidat à la configuration active au lieu de la commettre. Pour plus d’informations sur l’utilisation des différentes méthodes de chargement et de validation des données de configuration, voir Utiliser Junos PyEZ pour configurer les équipements Junos et Utiliser Junos PyEZ pour valider la configuration.

Dans le cas d’opérations de charge et de validation importantes qui peuvent s’écouler, vous pouvez ajuster l’intervalle de délai RPC en incluant le paramètre dans la timeout liste d’arguments ou commit() de set() méthode. Pour plus d’informations, consultez comment contrôler l’intervalle de délai d’expiration RPC.

Une table de configuration qui spécifie le set paramètre est un superset et possède toutes les fonctionnalités d’une table de configuration qui spécifie le get paramètre. Vous pouvez récupérer les données de configuration de la même manière dans votre application Junos PyEZ, que la table spécifie set ou get. Pour plus d’informations sur l’utilisation des tables de configuration pour récupérer des données de configuration, voir Utiliser les tables de configuration Junos PyEZ pour récupérer les données de configuration.

Configurer des instructions composées d’un mot-clé de forme fixe

Une instruction leaf est une déclaration de configuration CLI qui ne contient aucune autre déclaration. La plupart des instructions de branche définissent une valeur pour une caractéristique d’un objet de configuration et ont la forme suivante :

Certaines instructions de branche sont composées uniquement d’un mot-clé de forme fixe, sans valeur de forme variable associée. Par exemple, l’énoncé ftp au niveau de la [edit system services] hiérarchie est un exemple de mot-clé de forme fixe.

L’API XML Junos représente ces déclarations avec une balise vide.

Pour configurer un mot-clé de forme fixe dans votre application Junos PyEZ, comme l’instruction ftp sous [edit system services], définissez la valeur du nom de champ correspondant tel que défini dans le View égale à la valeur Truebooléenne .

Prenons l’exemple de la vue suivante, qui définit le ftp champ avec une contrainte de type pour s’assurer que la valeur du champ est un booléen :

Pour configurer le ftp champ dans votre application Junos PyEZ, définissez le champ égal à True.

Configurer plusieurs valeurs pour la même déclaration

Certaines instructions de branche Junos OS acceptent plusieurs valeurs, qui peuvent être définies par l’utilisateur ou tirées d’un ensemble de valeurs prédéfinies. La notation CLI utilise des crochets pour enfermer toutes les valeurs dans une seule instruction, comme dans les éléments suivants :

Par exemple, vous devrez peut-être configurer une liste d’ID VLAN pour une interface de tronc, comme dans la configuration suivante :

Pour configurer une déclaration leaf avec plusieurs valeurs dans votre application Junos PyEZ, définissez la valeur du champ correspondant (tel que défini dans la vue) sur une liste Python contenant les valeurs souhaitées. Dans l’exemple suivant, le vlan_list champ correspond à l’instruction vlan-id-list de la CLI. Pour configurer l’instruction avec plusieurs ID VLAN, définissez le nom de champ égal à la liste des ID.

Note:

La liste Python que vous utilisez pour la valeur d’un champ dans votre application Junos PyEZ est une liste de valeurs délimitées par des virgules. Ceci est différent de la liste d’espace délimitée que vous configurez dans l’interface cli.

Configurer plusieurs instances de la même déclaration

Dans certaines situations, la configuration Junos OS vous permet de configurer plusieurs instances de la même instruction. Par exemple, vous pouvez configurer plusieurs adresses dans la même famille de protocoles pour une interface logique. Dans l’extrait de configuration suivant, l’interface de bouclage comporte plusieurs adresses configurées au niveau de la [edit interfaces lo0 unit 0 family inet] hiérarchie :

La représentation xml de Junos de la configuration est la suivante :

Lorsque vous utilisez des tables de configuration Junos PyEZ pour gérer les ressources structurées, vous définissez des valeurs pour les instructions de configuration en définissant les noms de champs correspondants aux valeurs souhaitées. Cependant, vous ne pouvez pas définir le même champ deux fois dans votre application Junos PyEZ, car la deuxième valeur remplacera la première valeur. Au lieu de cela, vous devez définir le champ sur une liste de valeurs, et Junos PyEZ gère la conversion en XML.

Examinez le tableau et la vue suivants :

L’exemple de code suivant illustre comment configurer plusieurs adresses pour l’interface de bouclage dans une application Junos PyEZ. Dans ce cas, vous définissez le ip_address champ comme une liste d’adresses.

La configuration qui en résulte est :

Configurer plusieurs instances de la même ressource

Lorsque vous utilisez des tables de configuration Junos PyEZ pour configurer des ressources structurées, vous devrez peut-être configurer plusieurs objets ou enregistrements pour la même ressource. Par exemple, vous pouvez configurer plusieurs interfaces ou utilisateurs en même temps. Pour configurer plusieurs objets pour la même ressource structurée dans une application Junos PyEZ, vous devez définir les valeurs des champs d’un objet, appeler la append() méthode, puis répéter ce processus pour chaque objet suivant.

Par exemple, pour configurer plusieurs utilisateurs, définir les valeurs de champ pour le premier utilisateur et appeler la append() méthode. Ensuite, définissez les valeurs de champ pour le deuxième utilisateur et appelez la append() méthode. La append() méthode construit les données XML Junos pour la modification de configuration et les ajoute à l’objet lxml qui stocke l’ensemble maître des modifications de configuration. La méthode réinitialise automatiquement tous les champs à leurs valeurs par défaut, telles que définies dans la vue, ou si None un champ n’a pas de valeur définie par défaut.

L’exemple suivant configure deux objets utilisateur et valide les modifications :

Note:

Si vous n’appelez pas la append() méthode après avoir configuré un des objets multiples pour la même ressource, les valeurs de champ du deuxième objet remplaceront les valeurs de champ du premier objet.

L’exemple de code suivant configure les deux mêmes utilisateurs à l’aide d’une syntaxe plus compacte :

Supprimer des conteneurs ou des déclarations leaf

Dans certains cas, vous devrez peut-être supprimer des conteneurs ou des instructions de branche dans la configuration. Lorsque vous utilisez les tables de configuration Junos PyEZ pour gérer les ressources structurées, vous pouvez effectuer cette opération dans votre application en définissant la valeur de champ appropriée sur {'operation' : 'delete'}. Vous devez toujours définir des valeurs pour tous les champs clés lors de la suppression d’une instruction de conteneur ou de branche pour indiquer à quel objet la suppression s’applique.

Prenons la table et la vue de configuration Junos PyEZ suivantes :

Pour supprimer une instruction leaf pour la ressource définie dans la table et la vue, définissez la valeur du champ correspondant à cette déclaration à {'operation' : 'delete'}. L’exemple suivant supprime l’instruction uid utilisateur jsmith:

Pour supprimer un conteneur de la configuration, la vue doit définir un champ pour ce conteneur. Dans l’exemple Table et View, le champ de configuration défini par la set propriété est system/login. La vue définit le champ 'user', qui correspond au system/login/user conteneur. Cette définition vous permet de supprimer des objets utilisateur, si nécessaire. Si vous ne définissez pas de champ pour le conteneur, vous pouvez uniquement supprimer des instructions dans le conteneur, mais vous ne pouvez pas supprimer le conteneur lui-même.

Pour supprimer un conteneur dans l’application Junos PyEZ, définissez la valeur du champ correspondant au conteneur sur {'operation' : 'delete'}, et définissez le champ clé pour indiquer l’objet à supprimer. L’exemple suivant supprime l’utilisateur jsmith de la configuration :

L’application imprime les données de configuration XML Junos renvoyées par la get_table_xml() méthode. L’élément utilisateur avec l’identifiant « jsmith » inclut l’attribut operation="delete" permettant à Junos OS de supprimer cet objet de la configuration.

Configurer les propriétés correspondant aux attributs XML Junos

Certaines commandes de mode de configuration, par exemple deactivate protect, appliquer ou supprimer une propriété spécifique, telle que la propriété inactive ou protéger, dans une déclaration de configuration. Dans la CLI, cette propriété est indiquée par une balise précédant l’instruction de configuration. La configuration XML junos indique cette propriété à l’aide d’un attribut XML pour l’objet.

Par exemple, la commande suivante désactive l’interface donnée.

Lorsque vous affichez la configuration dans la CLI, la inactive balise précède le nom de l’interface.

De même, dans la sortie XML Junos, l’élément <interface> de la même interface inclut l’attribut inactive="inactive" .

Les tables de configuration Junos PyEZ vous permettent de définir des attributs XML pris en charge pour un objet lors de la configuration des ressources structurées. Prenons la table et la vue de configuration Junos PyEZ suivantes :

Pour définir l’attribut XML d’un objet de configuration donné, définissez son champ (défini par la vue) dans un dictionnaire contenant l’attribut et sa valeur. Par exemple, pour définir une interface mais la désactiver immédiatement, définissez le champ correspondant à l’élément <interface> sur {'inactive':'inactive'}. L’exemple suivant configure et désactive l’interface donnée :

L’application imprime les données de configuration XML Junos renvoyées par la get_table_xml() méthode. L’élément d’interface avec l’identifiant « ge-1/0/2 » inclut l’attribut inactive="inactive" .

Pour activer un objet inactif, définissez le champ Vue correspondant à l’objet inactif sur {'active':'active'}.

De même, pour protéger l’élément de configuration ou supprimer l’attribut protect d’un élément protégé, définissez la valeur de champ appropriée sur {'protect':'protect'} ou {'unprotect':'unprotect'}. Pour plus d’informations sur les attributs XML dans la configuration de Junos OS, consultez le Guide du développeur Junos XML Management Protocol .

Utiliser append() pour générer les données de configuration Junos XML

Lorsque vous utilisez des tables de configuration Junos PyEZ pour configurer des ressources structurées, vous définissez les valeurs des champs d’une ressource, puis appelez la append() méthode. Chaque appel à la append() méthode génère les données de configuration Junos XML pour l’ensemble de modifications en cours et les ajoute à l’objet lxml qui stocke l’ensemble maître des modifications de configuration.

L’appel de la append() méthode génère les données de configuration XML Junos pour votre ressource. Les modifications de configuration incluent uniquement les champs qui ont une valeur par défaut définie dans la vue ou une valeur configurée par l’utilisateur. Les champs qui conservent leur valeur None initiale sont ignorés.

Après avoir construit le XML, la append() méthode réinitialise également tous les champs à leurs valeurs par défaut, telles que définies dans la vue, ou si None un champ n’a pas de valeur définie par défaut. La réinitialisation des champs garantit que lorsque vous configurez plusieurs objets dans la même application, vous ne définissez pas une valeur de champ pour un objet, puis vous l’utilisez involontairement dans les appels ultérieurs à append() un autre objet. Ainsi, vous devez définir de nouvelles valeurs pour tous les key-field champs pour chaque appel à append().

Note:

Une fois que vous ajoutez des nœuds à l’ensemble principal de modifications de configuration, vous ne pouvez pas annuler l’opération.

La append() méthode n’ajoute que les nouvelles modifications à l’objet lxml contenant l’ensemble maître des modifications de configuration. Vous devez appeler explicitement la set() méthode ou les load() méthodes et commit() pour charger et valider les modifications sur l’équipement.

Afficher vos modifications de configuration

Lorsque vous utilisez des tables de configuration Junos PyEZ pour configurer des ressources structurées, vous définissez les valeurs des champs d’une ressource, puis appelez la append() méthode. Chaque appel à la append() méthode génère les données de configuration Junos XML pour l’ensemble de modifications en cours et les ajoute à l’objet lxml qui stocke l’ensemble maître des modifications de configuration. Parfois, vous devrez peut-être examiner les données de configuration qui ont été construites jusqu’à un certain point de l’application, ou vous pouvez consulter les différences entre les configurations du candidat et des configurations actives après avoir chargé vos modifications de configuration sur l’équipement.

Pour récupérer les données de configuration XML Junos contenant vos modifications, appelez la méthode de get_table_xml() l’objet Table. La get_table_xml() méthode renvoie la configuration XML qui a été construite jusqu’à ce point de l’application. Lorsque vous appelez la set() méthode ou les load() méthodes et commit() , l’application charge et valide ces données de configuration Junos XML sur l’équipement.

L’exemple suivant appelle la get_table_xml() méthode pour récupérer les modifications de configuration, puis les stocke dans la configXML variable. Avant d’appeler la append() méthode, la get_table_xml() méthode renvoie None. Ainsi, l’application sérialise et imprime les données de configuration XML uniquement si la valeur renvoyée n’est pas None.

La get_table_xml() méthode renvoie uniquement les données XML Junos pour vos modifications de configuration. Vous pouvez également comparer les configurations candidates et actives après avoir chargé les modifications de configuration sur l’équipement pour examiner les différences avant de valider les modifications.

Pour récupérer les différences, vous pouvez appeler le lock(), load(), commit()et unlock() les méthodes séparément et afficher vos différences de configuration en appelant la pdiff() méthode après avoir chargé les données, mais avant de les valider. La pdiff() méthode avec une liste d’arguments vide compare la configuration du candidat à la configuration active et imprime la différence de format de correctif directement sur la sortie standard.

Comment contrôler l’intervalle de délai d’expiration RPC

Lorsque vous utilisez les tables de configuration Junos PyEZ pour configurer des ressources structurées, vous pouvez charger et valider vos modifications de configuration en appelant la set() méthode ou les load() méthodes et commit() . Les set() méthodes et commit() utilisent la valeur de délai d’expiration RPC définie dans le device module. Si vous ne configurez pas de nouvelle valeur pour la Device timeout propriété, Junos PyEZ utilise la valeur par défaut de 30 secondes.

Les modifications de configuration importantes peuvent dépasser la valeur de délai d’expiration par défaut ou configurée, ce qui entraîne l’expiration de l’opération avant que la configuration ne puisse être téléchargée et validée sur l’équipement. Pour prendre en charge certaines modifications de configuration pouvant nécessiter des temps de charge et de validation plus longs que l’intervalle de délai par défaut ou configuré, définissez l’argument timeout=seconds sur une valeur appropriée lorsque vous appelez la set() méthode ou commit() dans votre application. Par exemple :