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

Exécutez des tests JSNAPy dans le cadre d’un playbook 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 instantanés de l’environnement d’exécution de vos équipements Junos. Vous pouvez capturer et vérifier la configuration et l’état opérationnel d’un appareil, et vérifier les modifications apportées à un appareil. 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

Collecte

Ensemble de modules

Nom du module

juniper.device

juniper.device

juniper.device.jsnapy

Vous devez installer Junos Snapshot Administrator en Python sur le nœud de contrôle Ansible pour 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 à l’administrateur d’instantanés Junos dans la documentation Python.

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

Présentation 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

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

Le module nécessite de spécifier l’argument action et soit l’argument, soit l’argument config_file 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 des arguments de l’action jsnapy

action Valeur

Descriptif

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 RPC spécifiés dans les fichiers de test après avoir apporté des modifications sur les équipements concernés.

jsnapy --snap

snap_pre

Prenez des instantanés pour les commandes ou RPC spécifiés dans les fichiers de test avant d’apporter des modifications sur les équipements concerné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 exécute l’action demandée sur les hôtes spécifiés hosts dans la section du fichier de configuration. Le module Ansible, quant à lui, exécute l’action demandée sur les hôtes spécifiés dans le playbook Ansible. Par conséquent, 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 et test_files .

Tableau 3 : Arguments du fichier jsnapy

Argument 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 vérifie le fichier de configuration aux emplacements suivants et dans l’ordre indiqué :

  • Répertoire du playbook 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 à des fichiers de test à l’aide d’un chemin de fichier relatif, le module vérifie d’abord les fichiers de test dans le répertoire du playbook. Il vérifie ensuite les fichiers de test dans le répertoire par défaut testfiles , 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 à des 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é :

  • Répertoire du playbook 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 de fichier absolu ou relatif. Lorsque vous utilisez un chemin de fichier relatif, 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 de fichier relatif, 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 argument, 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 pour les 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 vérifie les fichiers de test uniquement dans le répertoire du 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 référence plusieurs fichiers de test JSNAPy :

L’exemple de playbook suivant exécute l’action snap_pre pour chacun des fichiers de test dans le fichier de configuration jsnapy_config_base_tests.yaml . Si le fichier de configuration n’existe pas dans le répertoire du playbook, le module vérifie 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 vérifie les fichiers de test dans le répertoire testfiles par défaut.

jsnapy Le module peut également 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 de 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.

Remarque :

À 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 qui inclut 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 les échecs 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.

JSNAPy enregistre 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 . Sa valeur spécifie le chemin d’accès à un fichier accessible en écriture sur le nœud de contrôle Ansible. Le niveau de détail et les options de débogage d’Ansible déterminent le niveau d’information enregistré dans le fichier. Par défaut, seuls les messages de niveau de gravité AVERTISSEMENT ou supérieur sont enregistrés. Pour journaliser 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é.

Prenez et comparez 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 ces instantanés pour vérifier les changements attendus ou identifier les 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 instantané de chaque hôte dans un fichier séparé dans le répertoire d’instantanés JSNAPy par défaut à l’aide d’un nom de fichier prédéterminé. Pour plus d’informations sur les fichiers de sortie, consultez Présentation de la sortie du module jsnapy.

Pour prendre des instantanés de base d’un ou de plusieurs appareils avant d’apporter des modifications :

  • Définissez l’argument du action module sur snap_pre.

  • Spécifiez un fichier de configuration ou un ou plusieurs fichiers de test.

Le playbook suivant enregistre les instantanés PRE pour chaque périphérique 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 du playbook.

Pour prendre un instantané d’un ou plusieurs appareils après avoir effectué des modifications :

  • Définissez l’argument du action module sur snap_post.

  • Spécifiez un fichier de configuration ou un ou plusieurs fichiers de test.

Le playbook suivant enregistre les instantanés POST pour chaque périphérique 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 dans le répertoire playbook.

Lorsque le juniper.device.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 respectivement une balise 'PRE' ou 'POST'. Vous pouvez effectuer une check action pour comparer les PRE instantanés et POST afin de vérifier rapidement les mises à jour ou d’identifier les problèmes qui pourraient avoir résulté des modifications.

Lorsque le module effectue une check action, JSNAPy compare les instantanés PRE et POST pour 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 plutôt les instantanés nœud par nœud.

Pour comparer les instantanés PRE et POST :

  • Définissez l’argument du action module sur check.

  • Spécifiez le même fichier de configuration ou les mêmes fichiers de test que ceux utilisés pour prendre les instantanés.

  • Vérifiez les résultats du test en enregistrant la réponse du module et en utilisant le ansible.builtin.assert module pour vérifier le résultat attendu dans la réponse.

Le playbook suivant compare les instantanés pris pour les exécutions précédentes 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 comme 'test_result' et utilise le ansible.builtin.assert module pour vérifier que tous les tests ont réussi sur l’appareil donné.

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

Effectuer des opérations 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’accrochage JSNAPy dans le cadre d’un playbook Ansible.

Pour prendre un instantané et l’évaluer immédiatement en fonction de l’ensemble de critères prédéfinis dans la tests: section des fichiers de test :

  • Définissez l’argument du action module sur snapcheck.

  • Spécifiez un fichier de configuration ou un ou plusieurs fichiers de test.

  • Vérifiez les résultats du test en enregistrant la réponse du module et en utilisant 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. Il enregistre ensuite 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_postou snapcheck , il 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é sur chaque appareil du groupe d’inventaire Ansible. Le Tableau 4 présente les noms de fichiers des fichiers d’instantané pour chaque valeur de l’argument action .

Remarque :

À 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_.commandformat

snap_post

hostname_POST_hash_.commandformat

snapcheck

hostname_snap_temp_hash_.commandformat
ou
hostname_PRÉ_hash_.commandformat

où :

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

  • (PRE | POST | 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 de kwargs pour les fichiers de 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 le périphérique 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.

Remarque :

Le juniper.device.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 appareil 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 commandes et show interfaces terse sur les show chassis fpc appareils dc1a.example.net et dc1b.example.net, les fichiers résultants sont :

Si le module inclut action: "snap_post" et référence un fichier de test qui exécute le RPC avec kwargs un élément sur l’dc1a.example.net get-interface-information interface_name: lo0 de l’appareil, le fichier résultant est :

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

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

  • changed: indique si l’état du périphérique a changé. Comme JSNAPy ne rapporte que l’état, la valeur est toujours false.

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

  • msg—Résultats des tests JSNAPy.

Passez en revue les tests JSNAPy ayant échoué

Lorsque vous exécutez des tests JSNAPy sur des équipements Junos, vous pouvez vérifier rapidement si tous les tests JSNAPy ont réussi. Vous enregistrez la réponse du juniper.device.jsnapy module et utilisez le ansible.builtin.assert module pour vérifier que le est 100 passPercentage . Cependant, si un ou plusieurs tests échouent, il peut être difficile d’identifier et d’extraire les tests échoués si les résultats sont étendus.

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

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

  • dest_dir module : é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 pour 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 des 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 callbacks_enabled = juniper.device.jsnapy au fichier de configuration Ansible.

Lorsque vous activez le jsnapy plug-in de 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 en fonction de critères de test. Lorsque vous effectuez une check opération ou snapcheck et 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érons le playbook suivant :

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

Exemple : Utilisation d’Ansible pour effectuer une opération JSNAPy Snapcheck

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 visant à vérifier l’état opérationnel 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

    • Administrateur d’instantanés Junos en 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 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

Vue d’ensemble

Dans cet exemple, le playbook Ansible configure des 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 pour le playbook sous les group_vars répertoires and host_vars , respectivement.

Le livre de jeu comporte deux jeux. 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 est averti. La pièce exécute les tâches suivantes :

Remove build directory

Supprime le répertoire de construction existant pour le périphérique donné, s’il existe.

Create build directory

Crée un nouveau répertoire de construction vide pour l’appareil donné.

Build BGP configuration

Utilise le template module avec le modèle Jinja2 et les variables hôte pour afficher la configuration BGP pour l’appareil 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, par conséquent, 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 avertit également un gestionnaire qui suspend l’exécution du playbook pendant une durée spécifiée. La suspension de l’exécution du playbook permet aux homologues BGP d’établir des connexions avant l’exécution du deuxième play.

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 renvoie changed: false, et n’avertit 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 des fichiers de test JSNAPy. Si tous les tests réussissent, le jeu confirme également l’engagement. La pièce exécute les tâches suivantes :

Execute snapcheck

Effectue une opération JSNAPy snapcheck , qui 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 qui contient les fichiers de test.

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 rétablit automatiquement la configuration à la configuration précédemment validée.

Remarque :

Vous pouvez confirmer l’opération de validation précédente avec une commit check opération ou commit sur l’appareil, 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’équipement donné. Cette tâche n’est pas spécifiquement obligatoire, mais elle identifie plus facilement quand les tests JSNAPy échouent et sur quels équipements.

La configuration

Définir les 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éfinir le modèle Jinja2 et les variables d’hôte

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éfinir les variables hôtes

Pour définir les variables hôtes qui sont 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éation des fichiers de test JSNAPy

Procédure étape par étape

Le jsnapy module fait référence aux 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 show bgp neighbor commande et teste que 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 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 affiche la configuration, la charge sur l’appareil et valide la configuration en tant qu’opération de validation confirmée :

  1. Incluez le passe-partout du playbook et le premier play, qui exécute les modules localement.

  2. Créez les tâches qui remplacent le répertoire de build 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 modèle Jinja2 et des variables hôtes, et stockez-la dans le fichier bgp.conf dans le répertoire de construction 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 junos.conf final.

  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 avertit 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 le temps de pause sur une valeur appropriée pour votre environnement.

Définir la deuxième pièce pour effectuer les opérations JSNAPy

Pour créer la deuxième lecture, qui effectue une opération de vérification 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 pièce, qui exécute les modules localement.

  2. Créez une tâche pour effectuer une opération de vérification d’accrochage 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 prévu, répétez les instructions de cette section pour corriger le playbook.

Exécuter le guide stratégique

Pour exécuter le playbook :

  • Exécutez la ansible-playbook commande sur le nœud de contrôle et fournissez le chemin du playbook et toutes les options souhaitées.

Vérification

Vérifiez les voisins BGP

Objet

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 sortie de la Verify BGP configuration tâche vous permet de vérifier rapidement que l’appareil donné a réussi tous les tests JSNAPy. Si JSNAPy passPercentage est égal à 100 %, la tâche est incluse "msg": "All assertions passed" dans la sortie de la tâche.

Mesures à prendre

Examinez le résultat de la Verify BGP configuration tâche et vérifiez que chaque périphérique renvoie le All assertions passed message.

Signification

Le All assertions passed message indique que les équipements ont correctement établi les sessions BGP.

Résoudre les erreurs du playbook Ansible

Résoudre les erreurs de charge de configuration

Problème

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

La solution

Le playbook affiche la configuration Junos OS à l’aide du modèle Jinja2 et des variables hôtes définies pour ce périphérique 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 pour corriger l’élément identifié par la bad_element clé dans le message d’erreur.

Dépannage des échecs aux tests JSNAPy

Problème

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

L’assertion échoue lorsque l’appareil n’a pas établi la session BGP avec son voisin ou que la session est interrompue. 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 rétablit la configuration précédemment validée.

La solution

Les tests JSNAPy peuvent échouer si l’opération snapcheck est effectuée avant que les pairs puissent établir la session ou parce que 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 appropriée pour votre environnement et réexécutez le playbook.

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

Dépannage des confirmations de validation ayant échoué

Problème

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

La solution

Le playbook ne confirme la configuration que si elle a changé 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 laisse pas suffisamment de temps entre les lectures pour que les équipements établissent la session BGP. Pour plus d’informations, consultez Dépannage des échecs de tests JSNAPy.