Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Utiliser Junos Snapshot Administrator en Python (JSNAPy) dans les playbooks Ansible

Exécutez des tests JSNAPy dans le cadre d’un guide Ansible pour capturer et auditer les instantanés de l’environnement d’exécution des équipements Junos.

Junos® Snapshot Administrator in Python (JSNAPy) vous permet de capturer et d’auditer les snapshots d’environnement d’exécution de vos équipements Junos. Vous pouvez capturer et vérifier la configuration et l’état de fonctionnement d’un appareil, ainsi que vérifier les modifications apportées à un équipement. Juniper Networks fournit un module Ansible que vous pouvez utiliser pour exécuter des tests JSNAPy sur des équipements Junos dans le cadre d’un playbook Ansible. Le tableau 1 présente les modules disponibles.

Tableau 1 : module JSNAPy

Ensemble de contenu

Nom du module

juniper.device collection

jsnapy

Vous devez installer Junos Snapshot Administrator en Python sur le nœud de contrôle Ansible pour pouvoir utiliser le juniper.device.jsnapy module. Pour obtenir des instructions d’installation et des informations sur la création de fichiers de configuration et de test JSNAPy, reportez-vous à la section Junos Snapshot Administrator de la documentation Python.

Les sections suivantes expliquent comment utiliser le module dans les juniper.device.jsnapy playbooks Ansible.

Vue d’ensemble du module

Le juniper.device.jsnapy module vous permet d’exécuter des fonctions JSNAPy à partir d’un playbook Ansible, notamment :

  • Capture et enregistrement d’un instantané de l’environnement d’exécution

  • Comparaison de deux instantanés

  • prendre un instantané et l’évaluer immédiatement

Le module nécessite de spécifier l’argument action et l’argument ou config_file l’argument test_files . L’argument action spécifie l’action JSNAPy à effectuer. Le Tableau 2 présente les valeurs valides action et les commandes JSNAPy équivalentes.

Tableau 2 : valeurs d’argument de l’action jsnapy

Valeur de l’action

Description

Commande JSNAPy équivalente

check

Comparez deux instantanés existants en fonction des cas de test donnés ou, si aucun cas de test n’est fourni, comparez les instantanés nœud par nœud.

jsnapy --check

snap_post

Prenez des instantanés pour les commandes ou les RPC spécifiés dans les fichiers de test après avoir apporté des modifications sur les périphériques donnés.

jsnapy --snap

snap_pre

Prenez des instantanés pour les commandes ou les RPC spécifiés dans les fichiers de test avant d’apporter des modifications sur les périphériques donnés.

jsnapy --snap

snapcheck

Prenez des instantanés des commandes ou des RPC spécifiés dans les fichiers de test et évaluez-les immédiatement par rapport à des critères prédéfinis dans les cas de test.

jsnapy --snapcheck

Lorsque vous exécutez JSNAPy sur la ligne de commande, JSNAPy effectue l'action demandée sur les hôtes spécifiés dans la section du fichier de hosts configuration. En revanche, le module Ansible exécute l’action demandée sur les hôtes spécifiés dans le playbook Ansible. En conséquence, le module peut soit référencer un fichier de configuration, en ignorant la hosts section, soit référencer directement un ou plusieurs fichiers de test.

Ainsi, en plus de l’argument action , le juniper.device.jsnapy module a également besoin de l’argument config_file ou de l’argument test_files pour spécifier le fichier de configuration JSNAPy ou les fichiers de test JSNAPy à utiliser pour l’action donnée. Le tableau 3 présente les config_file arguments and test_files .

Tableau 3 : Arguments de fichier jsnapy

Argument du module

Valeur

Informations complémentaires

config_file

Chemin d’accès absolu ou relatif à un fichier de configuration JSNAPy.

Si le chemin est relatif, le module recherche le fichier de configuration aux emplacements suivants et dans l’ordre indiqué :

  • Annuaire des playbooks Ansible

  • dir répertoire d’arguments, s’il est fourni

  • /etc/jsnapy/testfiles (uniquement si l’argument dir est omis)

Si le fichier de configuration fait référence aux fichiers de test à l’aide d’un chemin d’accès relatif, le module vérifie d’abord les fichiers de test dans le répertoire playbook, puis recherche les fichiers de test dans le répertoire par défaut testfiles , ce qui varie en fonction de la version de JSNAPy et de votre environnement.

test_files

Chemin d’accès absolu ou relatif à un fichier de test JSNAPy. Il peut s’agir d’un chemin d’accès à un seul fichier ou d’une liste de chemins d’accès aux fichiers.

Pour chaque fichier de test qui spécifie un chemin relatif, le module vérifie le fichier aux emplacements suivants et dans l’ordre indiqué :

  • Annuaire des playbooks Ansible

  • dir répertoire d’arguments, s’il est fourni

  • /etc/jsnapy/testfiles (uniquement si l’argument dir est omis)

Les config_file arguments et test_files peuvent prendre un chemin d’accès absolu ou relatif. Lorsque vous utilisez un chemin d’accès relatif au fichier, vous pouvez éventuellement inclure l’argument dir module pour spécifier le répertoire dans lequel résident les fichiers. Si un config_file argument ou test_files utilise un chemin d’accès relatif au fichier, le module vérifie d’abord le fichier dans le répertoire du playbook Ansible, même si l’argument dir est présent. Si le fichier n’existe pas dans le répertoire playbook, le module vérifie dans le dir répertoire des arguments, s’il est spécifié, ou dans le répertoire /etc/jsnapy/testfiles , si l’argument dir est omis. Le playbook génère un message d’erreur si le fichier est introuvable.

Il est important de noter que lorsque vous incluez le dir paramètre, le module vérifie cet emplacement uniquement pour l’argument ou test_files spécifiéconfig_file. Ainsi, lorsque vous spécifiez un fichier de configuration, le module ne vérifie pas le dir répertoire des fichiers de test que vous spécifiez dans le fichier de configuration. Si le fichier de configuration fait référence à des chemins relatifs pour les fichiers de test, le module recherche les fichiers de test uniquement dans le répertoire playbook et dans le répertoire par défauttestfiles.

Supposons que vous ayez le fichier de configuration JSNAPy suivant, jsnapy_config_base_tests.yaml, qui réside dans le répertoire ~/jsnapy/testfiles et fait référence à plusieurs fichiers de test JSNAPy :

L’exemple de playbook suivant effectue l’action snap_pre pour chacun des fichiers de test du fichier de configuration jsnapy_config_base_tests.yaml . Si le fichier de configuration n’existe pas dans le répertoire playbook, le module recherche le fichier dans le dir répertoire, qui dans ce cas est ~/jsnapy/testfiles. Le fichier de configuration utilise des chemins relatifs pour les fichiers de test. Par conséquent, le module vérifie d’abord les fichiers de test dans le répertoire playbook, puis recherche les fichiers de test dans le répertoire testfiles par défaut.

Alternativement, le jsnapy module peut utiliser le test_files paramètre pour spécifier les fichiers de test individuels à utiliser. Le playbook suivant exécute les mêmes tests que dans l’exemple du playbook précédent. Dans ce cas, le module vérifie d’abord les fichiers de test dans le répertoire playbook, puis vérifie les fichiers de test dans le dir répertoire.

Note:

À partir de Junos Snapshot Administrator dans Python version 1.3.0, l’emplacement par défaut des fichiers de configuration et de test est ~/jsnapy/testfiles. Toutefois, l’emplacement par défaut dans un environnement virtuel ou pour les versions antérieures est /etc/jsnapy/testfiles.

Le module effectue l’action demandée sur les hôtes spécifiés dans le playbook Ansible, même s’il fait référence à un fichier de configuration comprenant une hosts section. Le module signale un échec s’il rencontre une erreur et ne parvient pas à exécuter les tests JSNAPy. Il ne signale pas d’échec si un ou plusieurs des tests JSNAPy échouent. Pour vérifier les résultats du test JSNAPy, enregistrez la réponse du module et utilisez le ansible.builtin.assert module pour vérifier le résultat attendu dans la réponse.

Junos Snapshot Administrator en Python consigne par défaut les informations relatives à ses opérations dans le fichier /var/log/jsnapy/jsnapy.log . Le juniper.device.jsnapy module peut éventuellement inclure l’argument logfile , qui spécifie le chemin d’accès à un fichier accessible en écriture sur le nœud de contrôle Ansible où les informations relatives à la tâche particulière sont consignées. Le niveau de détail et les options de débogage d’Ansible déterminent le niveau d’informations enregistrées dans le fichier. Par défaut, seuls les messages de niveau de gravité AVERTISSEMENT ou supérieur sont consignés. Pour consigner des messages égaux ou supérieurs au niveau de gravité INFO ou au niveau de gravité DEBUG, exécutez le playbook avec l’option -v de ligne de commande ou -vv respectivement.

Lorsque vous exécutez des tests JSNAPy dans un playbook Ansible, vous pouvez enregistrer ou résumer les informations relatives aux tests JSNAPy ayant échoué. Pour plus d’informations, consultez Examiner les tests JSNAPy ayant échoué.

Prendre et comparer des instantanés

JSNAPy vous permet de capturer des instantanés de l’environnement d’exécution de vos équipements Junos avant et après une modification, puis de comparer les instantanés pour vérifier les changements attendus ou identifier des problèmes inattendus. Le juniper.device.jsnapy module vous permet de prendre et de comparer des instantanés JSNAPy dans le cadre d’un playbook Ansible. Le module enregistre chaque snapshot de chaque hôte dans un fichier séparé dans le répertoire d’instantanés JSNAPy par défaut en utilisant un nom de fichier prédéterminé. Pour plus d’informations sur les fichiers de sortie, consultez Comprendre la sortie du module jsnapy.

Pour prendre des instantanés de référence d’un ou de plusieurs périphériques avant d’apporter des modifications, définissez l’argument du module sur snap_pre, puis spécifiez un fichier de action configuration ou un ou plusieurs fichiers de test.

Le playbook suivant enregistre les instantanés PRE pour chaque appareil du groupe d’inventaire Ansible. La tâche fait référence au fichier de configuration jsnapy_config_base_tests.yaml dans le répertoire ~/jsnapy/testfiles et consigne les messages dans le fichier jsnapy_tests.log dans le répertoire playbook.

Pour prendre un instantané d’un ou de plusieurs périphériques après avoir effectué des modifications, définissez l’argument du action module sur snap_post, puis spécifiez un fichier de configuration ou un ou plusieurs fichiers de test.

Le playbook suivant enregistre les instantanés de l’auto-test de démarrage (POST) pour chaque appareil du groupe d’inventaire Ansible. La tâche fait référence au même fichier de configuration jsnapy_config_base_tests.yaml dans le répertoire ~/jsnapy/testfiles et consigne les messages dans le fichier jsnapy_tests.log du répertoire playbook.

Lorsque le jsnapy module effectue une snap_pre action ou une snap_post action, il enregistre chaque instantané de chaque hôte dans un fichier séparé à l'aide de noms de fichiers générés automatiquement qui contiennent une balise 'PRE' ou 'POST', respectivement. Pour comparer les instantanés et PRE POST afin de vérifier rapidement les mises à jour ou d’identifier les problèmes susceptibles d’avoir résulté des modifications, définissez l’argument du module sur check, et spécifiez le même fichier de action configuration ou les mêmes fichiers de test que ceux utilisés pour prendre les instantanés.

Lorsque le module effectue une check action, JSNAPy compare les instantanés PRE et POST de chaque test sur chaque appareil et les évalue par rapport aux critères définis dans la tests: section des fichiers de test. Si les fichiers de test ne définissent aucun cas de test, JSNAPy compare à la place les instantanés nœud par nœud. Pour vérifier les résultats du test, enregistrez la réponse du module, puis utilisez le ansible.builtin.assert module pour vérifier le résultat attendu dans la réponse.

Le guide suivant compare les instantanés pris pour les appareils précédemment exécutés snap_pre et snap_post les actions pour chaque appareil du groupe d’inventaire Ansible. Les résultats sont évalués à l’aide des critères des fichiers de test référencés dans le fichier de configuration. Le playbook enregistre la réponse du module sous la forme 'test_result' et utilise le ansible.builtin.assert module pour vérifier que tous les tests réussis sur l'appareil donné.

Lorsque vous exécutez le playbook, les assertions identifient rapidement les appareils qui ont échoué aux tests.

Effectuer des opérations de Snapcheck

JSNAPy vous permet de prendre des instantanés pour les commandes ou les RPC spécifiés dans les fichiers de test JSNAPy et d’évaluer immédiatement les instantanés par rapport à des critères prédéfinis dans les cas de test. Le juniper.device.jsnapy module vous permet d’effectuer une opération de vérification d’enclenchement JSNAPy dans le cadre d’un playbook Ansible.

Pour prendre un instantané et l’évaluer immédiatement en fonction de l’ensemble prédéfini de critères dans la tests: section des fichiers de test, définissez l’argument du module sur snapcheck, et spécifiez un fichier de action configuration ou un ou plusieurs fichiers de test. Pour vérifier les résultats du test, enregistrez la réponse du module, puis utilisez le ansible.builtin.assert module pour vérifier le résultat attendu dans la réponse.

Par exemple, pour chaque appareil du groupe d’inventaire Ansible, le playbook suivant enregistre un instantané distinct pour chaque commande ou RPC dans les fichiers de test, enregistre la réponse du module et utilise le ansible.builtin.assert module pour vérifier que tous les tests définis dans les fichiers de test ont réussi sur cet appareil.

Comprendre la sortie du module jsnapy

Lorsque le juniper.device.jsnapy module effectue une snap_preaction , snap_post, ou , il snapcheck enregistre automatiquement les instantanés dans le répertoire des instantanés JSNAPy. Le module utilise les répertoires JSNAPy par défaut, sauf si vous modifiez le fichier de configuration JSNAPy (jsnapy.cfg) pour spécifier un emplacement différent. Le module crée un fichier distinct pour chaque commande ou RPC exécutée sur chaque appareil du groupe d’inventaire Ansible. Le Tableau 4 indique les noms de fichier des fichiers d’instantanés pour chaque valeur de l’argument action .

Note:

À partir de Junos Snapshot Administrator dans Python version 1.3.0, les répertoires par défaut pour les fichiers de test et les instantanés JSNAPy sont respectivement ~/jsnapy/testfiles et ~/jsnapy/snapshots. Toutefois, les répertoires par défaut dans un environnement virtuel ou pour les versions antérieures sont /etc/jsnapy/testfiles et /etc/jsnapy/snapshots.

Tableau 4 : noms de fichiers de sortie JSNAPy

action valeur

Fichiers de sortie

snap_pre

hostname_PRÉ_hash_command.format

snap_post

hostname_POST_hash_command.format

snapcheck

hostname_snap_temp_hash_command.format
ou
hostname_PRÉ_hash_command.format

où:

  • hostname: nom d’hôte du périphérique sur lequel la commande ou le RPC est exécuté.

  • (PRE | PUBLIER | snap_temp) : balise identifiant l’action. L’opération snapcheck utilise la balise dans les PRE versions actuelles ; dans les versions antérieures, l’opération utilise la snap_temp balise.

  • hash: hachage généré à partir des fichiers de kwargs test qui incluent les rpc clés et kwargs .

    Si les fichiers de test utilisent le même RPC mais incluent des arguments différents, et que les RPC sont exécutés sur le même hôte, le hachage garantit des noms de fichiers de sortie uniques dans ces cas. Si un fichier de test définit la command clé ou si un fichier de test définit la rpc clé mais ne l’inclut kwargs pas, le hachage est omis.

  • command: commande ou RPC exécutée sur l’équipement géré. Le module remplace les espaces et les caractères spéciaux dans la commande ou le nom RPC par des traits de soulignement ( _ ).

  • format: format de la sortie, par exemple, xml.

Note:

Le jsnapy module différencie les noms de fichiers d’instantanés pour une action donnée en se basant uniquement sur le nom d’hôte et la commande ou RPC. Par conséquent, si le module prend des instantanés sur le même périphérique pour la même action à l’aide de fichiers de test qui définissent la même commande ou RPC, le module générera des instantanés avec le même nom de fichier, et le nouveau fichier écrasera l’ancien fichier.

Par exemple, si le module inclut action: "snap_pre" et référence des fichiers de test qui exécutent les show chassis fpc commandes et show interfaces terse sur les périphériques dc1a.example.net et dc1b.example.net, les fichiers résultants sont les suivants :

Si le module inclut action: "snap_post" et fait référence à un fichier de test qui exécute le RPC avec kwargs item interface_name: lo0 sur le get-interface-information périphérique dc1a.example.net, le fichier résultant est :

En plus de générer les fichiers d’instantanés, le jsnapy module peut également renvoyer les clés suivantes dans la réponse du module :

  • action—JSNAPy action effectuée par le module.

  • changed: indique si l’état de l’appareil a changé. Étant donné que JSNAPy ne signale que l’état, la valeur est toujours false.

  • failed: indique si la tâche playbook a échoué.

  • msg—Résultats des tests JSNAPy.

Passer en revue les tests JSNAPy ayant échoué

Lorsque vous exécutez des tests JSNAPy sur des périphériques Junos, vous pouvez rapidement vérifier si tous les tests JSNAPy ont réussi en enregistrant la jsnapy réponse du module et en utilisant le ansible.builtin.assert module pour vérifier que le passPercentage est égal à 100. Toutefois, en cas d’échec d’un ou de plusieurs tests, il peut être difficile d’identifier et d’extraire les tests ayant échoué si les résultats sont nombreux.

Le juniper.device.jsnapy module fournit les options suivantes pour voir les tests JSNAPy ayant échoué :

  • jsnapy plug-in de rappel : affiche un résumé des tests JSNAPy ayant échoué après la sortie du playbook.

  • dest_dir module argument : écrit les tests JSNAPy ayant échoué dans les fichiers du répertoire spécifié.

Le jsnapy plugin de rappel vous permet d’extraire et de résumer facilement les informations sur les tests JSNAPy ayant échoué. Lorsque vous activez le jsnapy plug-in de rappel et exécutez un playbook qui inclut des tests JSNAPy, le plug-in résume les informations relatives aux tests JSNAPy ayant échoué après le playbook PLAY RECAP.

Le jsnapy plugin de rappel est désactivé par défaut. Pour activer le plug-in de jsnapy rappel, ajoutez l’instruction callback_whitelist = jsnapy au fichier de configuration Ansible.

Lorsque vous activez le plug-in de jsnapy rappel et exécutez un playbook, le plug-in résume les tests JSNAPy ayant échoué dans un format lisible par l’homme. Par exemple:

À partir de juniper.device la version 1.0.6, le juniper.device.jsnapy module prend également en charge l’argumentdest_dir. Vous pouvez inclure l’argument et snapcheck check les dest_dir opérations qui évaluent les instantanés par rapport à des critères de test. Lorsque vous effectuez une check opération ou snapcheck et que vous incluez l’argumentdest_dir, le module écrit chaque test JSNAPy ayant échoué pour un hôte donné dans un fichier du répertoire de sortie spécifié.

Par exemple, considérez le guide suivant :

Lorsque vous exécutez le playbook, le module génère un fichier dans le dest_dir répertoire pour chaque test ayant échoué sur l’hôte donné. Par exemple, les fichiers suivants ont été générés pour les échecs bgp_neighbor et bgp_summary les tests sur les hôtes r1 et r3.

Exemple : Utiliser Ansible pour effectuer une opération Snapcheck JSNAPy

Le juniper.device.jsnapy module vous permet d’exécuter des tests JSNAPy sur des équipements Junos dans le cadre d’un playbook Ansible. Cet exemple utilise le jsnapy module pour effectuer une snapcheck action de vérification de l’état de fonctionnement des équipements Junos après l’application de modifications de configuration spécifiques.

Exigences

Cet exemple utilise les composants matériels et logiciels suivants :

  • Nœud de contrôle Ansible en cours d’exécution :

    • Python 3.10 ou version ultérieure

    • Ansible 2.17 ou version ultérieure avec la juniper.device collection installée

    • Junos PyEZ version 2.7.3 ou ultérieure

    • Junos Snapshot Administrator dans Python version 1.3.7 ou ultérieure

Avant d’exécuter le playbook Ansible, assurez-vous d’avoir :

  • Équipements Junos sur lesquels NETCONF sur SSH est activé et un compte d’utilisateur configuré avec les autorisations appropriées

  • Paire de clés publique/privée SSH configurée pour l’utilisateur approprié sur le nœud de contrôle Ansible et l’équipement Junos

  • Fichier d’inventaire Ansible existant avec les hôtes requis définis

Aperçu

Dans cet exemple, le playbook Ansible configure les sessions d’appairage BGP sur trois équipements Junos et utilise le jsnapy module pour vérifier que la session BGP est établie pour chaque adresse voisine. Si le playbook vérifie que les sessions sont établies sur un appareil, il confirme la validation de la nouvelle configuration. Si le playbook ne confirme pas la validation, l’équipement Junos revient automatiquement à la configuration précédemment validée. Le projet Ansible définit les variables de groupe et d’hôte du playbook sous les group_vars répertoires et host_vars , respectivement.

Le livre de jeu comporte deux pièces. La première lecture, Load and commit BGP configuration, génère et assemble la configuration, charge la configuration sur l’appareil et la valide à l’aide d’une opération de validation confirmée. Si la configuration est mise à jour, un gestionnaire en est informé. La pièce exécute les tâches suivantes :

Remove build directory

Supprime le répertoire de compilation existant pour le périphérique donné, s’il est présent.

Create build directory

Crée un nouveau répertoire de compilation vide pour le périphérique donné.

Build BGP configuration

Utilise le template module avec le modèle Jinja2 et les variables hôtes pour afficher la configuration BGP de l’équipement donné et l’enregistrer dans un fichier dans le répertoire de construction de l’appareil.

Assemble configuration parts

Utilise le assemble module pour assembler le fichier de configuration de l’appareil à partir des fichiers du répertoire de construction de cet appareil.

Dans cet exemple, seul le fichier de configuration BGP sera présent et le fichier de configuration résultant est identique au fichier de configuration BGP rendu dans la tâche précédente. Si vous ajoutez ultérieurement de nouvelles tâches pour générer des fichiers de configuration supplémentaires à partir d’autres modèles, le assemble module combinera tous les fichiers en une seule configuration.

Load and commit config, require confirmation

Charge la configuration sur l’équipement Junos et valide la configuration à l’aide d’une opération qui nécessite une commit confirmed confirmation explicite pour que la validation devienne permanente. Si cette tâche apporte une modification à la configuration, elle en informe également un gestionnaire qui interrompt l’exécution du playbook pendant une durée spécifiée. La mise en pause de l’exécution du playbook permet aux homologues BGP d’établir des connexions avant l’exécution de la deuxième lecture.

Si la configuration demandée est déjà présente sur l’appareil, le config module ne charge pas et ne valide pas la configuration. Dans ce cas, le module retourne changed: false, et ne notifie donc pas le gestionnaire.

La deuxième lecture, Verify BGP, effectue une opération JSNAPy snapcheck sur chaque périphérique à l’aide des tests contenus dans les fichiers de test JSNAPy. Si tous les tests réussissent, le jeu confirme également le commit. La pièce exécute les tâches suivantes :

Execute snapcheck

Effectue une opération JSNAPy snapcheck qui, dans ce cas, valide que la session BGP est établie pour chacun des voisins de l’équipement et qu’il n’y a pas d’homologues en panne.

Dans cet exemple, le playbook fait directement référence aux fichiers de test JSNAPy en définissant l’argument test_files égal à la liste des fichiers de test JSNAPy. L’argument dir spécifie le répertoire dans lequel les fichiers de test sont stockés.

Confirm commit

Exécute une opération de vérification de validation, qui confirme l’opération de validation précédente, à condition que la première lecture du playbook ait mis à jour la configuration et que tous les tests JSNAPy aient réussi. Si le playbook met à jour la configuration mais ne confirme pas la validation, l’équipement Junos restaure automatiquement la configuration précédemment validée.

Note:

Vous pouvez confirmer l’opération de validation précédente avec une commit check opération ou commit sur le périphérique, qui correspond respectivement à l’argument check: true ou commit: true dans le config module.

Verify BGP configuration

(Facultatif) Indique explicitement si les tests JSNAPy ont réussi ou échoué sur l’appareil donné. Cette tâche n’est pas spécifiquement requise, mais elle permet d’identifier plus facilement quand les tests JSNAPy échouent et sur quels appareils.

Configuration

Définition des variables de groupe

Procédure étape par étape

Pour définir les variables de groupe :

  • Dans le fichier group_vars/all , définissez des variables pour le répertoire de construction et pour les noms de fichiers des fichiers de configuration et journaux.

Définition du modèle Jinja2 et des variables hôtes

Définir le modèle Jinja2

Pour créer le modèle Jinja2 utilisé pour générer la configuration BGP :

  1. Créez un fichier nommé bgp-template.j2 dans le répertoire playbook du projet.

  2. Ajoutez le modèle de configuration BGP au fichier.

Définition des variables hôtes

Pour définir les variables hôtes utilisées avec le modèle Jinja2 pour générer la configuration BGP :

  1. Dans le répertoire host_vars du projet, créez un fichier distinct nommé hostname.yaml pour chaque hôte.

  2. Définissez les variables de l’hôte r1 dans le fichier r1.yaml .

  3. Définissez les variables de l’hôte r2 dans le fichier r2.yaml .

  4. Définissez les variables de l’hôte r3 dans le fichier r3.yaml .

Créer les fichiers de test JSNAPy

Procédure étape par étape

Le jsnapy module référence les fichiers de test JSNAPy dans le répertoire ~/jsnapy/testfiles . Pour créer les fichiers de test JSNAPy :

  1. Créez le fichier jsnapy_test_file_bgp_states.yaml , qui exécute la commande et teste que show bgp neighbor l’état pair BGP est établi.

  2. Créez le fichier jsnapy_test_file_bgp_summary.yaml , qui exécute la show bgp summary commande et affirme que le nombre d’homologues BGP en aval doit être égal à 0.

Créer le playbook Ansible

Définir la première lecture pour configurer l’appareil

Pour créer la première lecture, qui effectue le rendu de la configuration, la charge sur l’appareil et valide la configuration en tant qu’opération de validation confirmée :

  1. Incluez le modèle standard pour le playbook et le premier play, qui exécute les modules localement.

  2. Créez les tâches qui remplacent le répertoire de construction existant par un répertoire vide, qui stockera les nouveaux fichiers de configuration.

  3. Créez la tâche qui affiche la configuration BGP à partir du fichier de modèle Jinja2 et des variables hôtes, puis stockez-la dans le fichier bgp.conf dans le répertoire de génération de cet hôte.

  4. Créez une tâche pour assembler les fichiers de configuration du répertoire de construction dans le fichier de configuration final junos.conf .

  5. Créez la tâche qui charge la configuration sur l’appareil, effectue une opération de validation qui nécessite une confirmation et informe le gestionnaire donné, si la configuration a été modifiée.

  6. Créez un gestionnaire qui interrompt l’exécution du playbook si la configuration de l’appareil est mise à jour. Définissez la durée de pause sur une valeur adaptée à votre environnement.

Définir le deuxième jeu pour effectuer des opérations JSNAPy

Pour créer la deuxième lecture, qui effectue une opération d’accrochage JSNAPy et confirme la configuration validée, à condition que la configuration ait changé et que les tests JSNAPy aient réussi :

  1. Incluez le passe-partout pour la deuxième lecture, qui exécute les modules localement.

  2. Créez une tâche pour effectuer une opération de vérification instantanée JSNAPy basée sur les tests dans les fichiers de test JSNAPy donnés, et enregistrez la réponse du module.

  3. Créez la tâche pour confirmer la validation à condition que les conditions données soient remplies.

  4. (Facultatif) Créez une tâche qui utilise le ansible.builtin.assert module pour affirmer que les tests JSNAPy ont réussi.

Résultats

Sur le nœud de contrôle Ansible, passez en revue le playbook terminé. Si le playbook n’affiche pas le code voulu, répétez les instructions de cette section pour corriger le playbook.

Exécuter le playbook

Pour exécuter le playbook :

  • Émettez la ansible-playbook commande sur le nœud de contrôle et indiquez le chemin d’accès au playbook ainsi que les options souhaitées.

Vérification

Vérifier les voisins BGP

But

Vérifiez que la session BGP est établie pour chaque adresse voisine.

Les fichiers de test JSNAPy testent que la session BGP est établie pour chaque adresse voisine et qu’il n’y a pas d’homologues en panne. La Verify BGP configuration sortie de la tâche vous permet de vérifier rapidement que l’appareil donné a réussi tous les tests JSNAPy. Si le JSNAPy passPercentage est égal à 100 %, la tâche est incluse "msg": "All assertions passed" dans la sortie de la tâche.

Action

Examinez la sortie de la Verify BGP configuration tâche et vérifiez que chaque appareil renvoie le All assertions passed message.

Signification

Le All assertions passed message indique que les sessions BGP ont été établies avec succès sur les périphériques.

Résoudre les erreurs du playbook Ansible

Dépannage des erreurs de chargement de configuration

Problème

Le playbook Ansible génère une ConfigLoadError erreur indiquant qu’il n’a pas pu charger la configuration sur l’appareil en raison d’une erreur de syntaxe.

Solution

Le playbook affiche la configuration Junos OS à l’aide du modèle Jinja2 et des variables hôtes définies pour cet équipement dans le répertoire host_vars . Le playbook génère une erreur de syntaxe lorsque le modèle Jinja2 produit une configuration non valide. Pour corriger cette erreur, mettez à jour le modèle Jinja2 afin de corriger l’élément identifié par la bad_element clé dans le message d’erreur.

Résoudre les problèmes liés aux tests JSNAPy ayant échoué

Problème

La Verify BGP configuration sortie de la tâche indique que l’assertion a échoué, car le JSNAPy passPercentage n’était pas égal à 100 %.

L’assertion échoue lorsque l’équipement n’a pas établi la session BGP avec son voisin ou lorsque la session tombe en panne. Si l’assertion échoue et que la configuration de cet appareil a été mise à jour lors de la première lecture, le playbook ne confirme pas la validation de la nouvelle configuration sur l’appareil et l’appareil restaure la configuration précédemment validée.

Solution

Les tests JSNAPy peuvent échouer si l’opération snapcheck est effectuée avant que les homologues ne puissent établir la session ou si les voisins BGP ne sont pas configurés correctement. Si la sortie du playbook indique que la configuration a été correctement chargée et validée sur l’appareil, essayez d’augmenter l’intervalle de pause du gestionnaire à une valeur adaptée à votre environnement et réexécutez le playbook.

Si les tests échouent toujours, vérifiez que le modèle Jinja2 et les variables hôtes de chaque équipement contiennent les données correctes et que la configuration résultante pour chaque équipement est correcte.

Résoudre les problèmes liés aux confirmations d’échec de validation

Problème

La configuration n’a pas été confirmée sur un ou plusieurs appareils.

Solution

Le playbook ne confirme la configuration que si elle a été modifiée et que les tests JSNAPy réussissent. Si la sortie de la Load and commit config, require confirmation tâche indique que la configuration n’a pas changé, le playbook n’exécute pas la tâche pour confirmer la validation. Si la configuration changeait mais n’était pas confirmée, les tests JSNAPy échouaient. Les tests JSNAPy peuvent échouer si les voisins BGP ne sont pas configurés correctement ou si le playbook ne prévoit pas suffisamment de temps entre les lectures pour que les périphériques établissent la session BGP. Pour plus d’informations, consultez Résoudre les problèmes liés aux tests JSNAPy ayant échoué.