SUR CETTE PAGE
Exemple : utiliser Jsnapy comme module Python
Cet exemple montre comment utiliser les fonctionnalités de Junos Snapshot Administrator en Python (jsnapy) dans un script ou un programme python. Lorsque des entrées de nom d’utilisateur et de mot de passe sont requises dans ce script, remplacez <nom d’utilisateur> et <mot de passe> par les valeurs appropriées.
Une installation par défaut de jsnapy inclut de nombreux exemples de fichiers de configuration et de test dans le /etc/jsnapy/samples/ répertoire, y compris plusieurs exemples de scripts Python nommés module_check.py, , module_data.pymodule_device.pyet module_snapcheck.py. Ces fichiers démontrent chacun différentes fonctionnalités de jsnapy fonctionnant en tant que module dans un script python.
Cet exemple utilisera une version légèrement modifiée du fichier de script Python, , module_data.pypour illustrer l’exécution de jsnapy avec l’option snapcheck . Le script montre comment transmettre des données de configuration YAML à partir du script Python.
Exigences
Cet exemple utilise les composants matériels et logiciels suivants :
Un appareil exécutant Junos OS
Une instance de jsnapy installée sur un serveur (serveur jsnapy)
Un éditeur de texte avec lequel afficher et modifier le script
Avant d’écrire vos propres scripts Python pour jsnapy, assurez-vous d’avoir une compréhension approfondie des concepts de programmation Python et du fonctionnement jsnapy.
Aperçu
Dans cet exemple, nous examinons le script /etc/jsnapy/samples/module_data.pyPython fourni. Nous verrons comment le script importe jsnapy en tant que module, comment il définit les paramètres de configuration jsnapy et comment il affiche les résultats de l’opération snapcheck sur un périphérique Junos OS distant.
Topologie
Cet exemple utilise une topologie simple où le serveur jsnapy se connecte à un seul équipement Junos OS distant. Des connexions à plusieurs périphériques peuvent être établies, mais ne seront pas abordées dans cet exemple.
jsnapy
Examen du script Python
Le script python effectue les tâches suivantes :
Importe les modules Python requis dans le script.
Définit une variable utilisée pour appeler la fonction SnapAdmin() à partir du module jsnapy.
Définit les paramètres de configuration jsnapy et les affecte à une variable.
Appelle jsnapy avec l’option
snapcheckutilisant la variable de configuration précédemment définie comme argument de configuration et nom de fichierpreinstantané.Imprime les résultats sur le terminal du serveur jsnapy.
Dans sa forme originale, le script Python, , importe et appelle le joli module d’impression Data, module_data.pypprint. Lorsqu’il est appelé à partir du script, ce module permet à python d’imprimer toutes les données de snapshot que jsnapy reçoit du périphérique Junos OS sur le terminal du serveur jsnapy. En raison de la longueur de ces données, l’appel à pprint est commenté pour cet exemple en ajoutant à l’appel le signe dièse (#).
- Notez les commentaires
- Importer des modules Python
- Définir une variable pour l’appel à SnapAdmin
- Définition des paramètres de configuration jsnapy
- Appelez jsnapy avec les données de configuration définies
- Imprimez les résultats sur le terminal
- Résultats
Notez les commentaires
Procédure étape par étape
Étant donné que nous examinons un script existant dans cet exemple, nous allons signaler les commentaires qui apparaissent en tant que première ligne du fichier. Les commentaires peuvent être placés n’importe où dans le script en commençant le commentaire par le signe dièse (#).
### Example showing how to pass yaml data in same file ### from jnpr.junos import Device
Importer des modules Python
Procédure étape par étape
Ce script utilise trois modules importés, un pour jsnapy, un pour imprimer des données complexes sur le terminal et un pour travailler avec les périphériques Junos OS.
from jnpr.jsnapy import SnapAdmin from pprint import pprint from jnpr.junos import Device
Définir une variable pour l’appel à SnapAdmin
Procédure étape par étape
Ici, le script assigne la fonction SnapAdmin() du module jsnapy à une variable nommée
jspour faciliter l’utilisation et pouvoir passer des arguments lors de l’appel de jsnapy.js = SnapAdmin()
Définition des paramètres de configuration jsnapy
Procédure étape par étape
Ici, le script définit l’hôte Junos OS et les tests à effectuer sur cet hôte. Il affecte ces paramètres à la variable
config_data. Les guillemets triples permettentconfig_datade contenir des caractères de nouvelle ligne.Note:Une autre façon de spécifier les hôtes et les tests à effectuer consiste à référencer un fichier de configuration jsnapy. Le fichier de configuration peut définir un ou plusieurs hôtes et un ou plusieurs fichiers de test. Étant donné que les données de configuration sont contenues dans le script Python dans cet exemple, la
config_datavariable ne référence pas un fichier de configuration en dehors du script, mais est remplie avec les paires clé-valeur qui apparaissent entre les guillemets triples (« " »).config_data = """ hosts: - device: 198.51.100.10 username : <username> passwd: <password> tests: - test_exists.yml - test_contains.yml - test_is_equal.yml """
Appelez jsnapy avec les données de configuration définies
Procédure étape par étape
Ici, le script appelle jsnapy avec l’option
snapchecket transmet les informations de configuration et le nom du fichier instantané. Les informations renvoyées à la suite de cet appel sont stockées sous forme de valeurs dans lasnapchkvariable.Note:Vous pouvez accéder à toutes les options jsnapy disponibles, ,
checksnapetsnapchecken ajoutant l’option après l’appel à SnapAdmin(). Par exemple, ,js.check(config_file, "snapshot1", "snapshot2")js.snap(config_file, "snapshot_name")etjs.snapcheck(config_file, "snapshot_name").snapchk = js.snapcheck(config_data, "pre")
Imprimez les résultats sur le terminal
Procédure étape par étape
Ici, le script parcourt en boucle les valeurs renvoyées et les imprime sur le terminal du serveur jsnapy dans un format lisible. C’est également là que nous modifions le script pour l’empêcher d’imprimer l’intégralité de l’instantané sur le terminal.
for val in snapchk: print "Tested on", val.device print "Final result: ", val.result print "Total passed: ", val.no_passed print "Total failed:", val.no_failed #pprint(dict(val.test_details))
Résultats
Pour faciliter l’affichage, le contenu du script modifié est affiché ci-dessous en exécutant la cat commande sur le fichier module_data.py.
user@jsnapy-server$ cat module_data.py
### Example showing how to pass yaml data in same file ###
from jnpr.jsnapy import SnapAdmin
from pprint import pprint
from jnpr.junos import Device
js = SnapAdmin()
config_data = """
hosts:
- device: 198.51.100.10
username : <username>
passwd: <password>
tests:
- test_exists.yml
- test_contains.yml
- test_is_equal.yml
"""
snapchk = js.snapcheck(config_data, "pre")
for val in snapchk:
print "Tested on", val.device
print "Final result: ", val.result
print "Total passed: ", val.no_passed
print "Total failed:", val.no_failed
#pprint(dict(val.test_details))
Vérification
Vérification du fonctionnement du script
But
Une fois que votre script Python et les fichiers de configuration et de test jsnapy nécessaires sont terminés, vous pouvez vérifier le fonctionnement du script en l’exécutant à partir du terminal du serveur jsnapy.
Action
user@jsnapy-server$ python module_data.py Connecting to device 198.51.100.10 ................ Taking snapshot of COMMAND: show version Taking snapshot of COMMAND: show version invoke-on all-routing-engines Taking snapshot of COMMAND: show interfaces terse lo* *************************** Device: 198.51.100.10 *************************** Tests Included: test_version_check *************************** Command: show version *************************** PASS | All "//package-information/name" exists at xpath "//software-information" [ 59 matched ] *************************** Device: 198.51.100.10 *************************** Tests Included: test_version_check ************ Command: show version invoke-on all-routing-engines ************ Test Failed!!! Junos version does not contains package name as jbase Test Failed!!! Junos version does not contains package name as jbase FAIL | All "//package-information/name[1]" do not contains j" [ 57 matched / 2 failed ] *************************** Device: 198.51.100.10 *************************** Tests Included: test_interfaces_terse ********************* Command: show interfaces terse lo* ********************* PASS | All "admin-status" is equal to "up" [ 1 matched ] ------------------------------- Final Result!! ------------------------------- Total No of tests passed: 2 Total No of tests failed: 1 Overall Tests failed!!! Tested on 198.51.100.10 Final result: Failed Total passed: 2 Total failed: 1