Utiliser Junos PyEZ pour récupérer des faits à partir d’équipements Junos
Comprendre les faits sur les équipements Junos PyEZ
Junos PyEZ est un microframework pour Python qui vous permet de gérer et d’automatiser les équipements Junos. Junos PyEZ modélise chaque équipement comme une instance de la jnpr.junos.device.Device classe. Après s’être connectées à un équipement Junos, les applications Junos PyEZ peuvent récupérer des faits sur l’équipement. Les faits sur l’équipement sont accessibles en tant qu’attribut facts de l’objet Device . Pour obtenir des informations détaillées sur les clés incluses dans les informations sur l’équipement retourné, consultez jnpr.junos.facts.
L’exemple suivant établit une session NETCONF sur SSH avec l’équipement et imprime les faits sur l’équipement. L’équipement utilise des clés SSH pour authentifier l’utilisateur.
from jnpr.junos import Device
from pprint import pprint
with Device(host='router1.example.net') as dev:
pprint (dev.facts['hostname'])
pprint (dev.facts)
user1@server:~$ python3 get-facts.py
'router1'
{'2RE': True,
'HOME': '/var/home/user1',
'RE0': {'last_reboot_reason': '0x200:normal shutdown',
'mastership_state': 'master',
'model': 'RE-MX-104',
'status': 'OK',
'up_time': '25 days, 8 hours, 22 minutes, 40 seconds'},
'RE1': {'last_reboot_reason': '0x200:normal shutdown',
'mastership_state': 'backup',
'model': 'RE-MX-104',
'status': 'OK',
'up_time': '25 days, 8 hours, 23 minutes, 55 seconds'},
...
Dans Junos PyEZ version 2.0.0 et versions antérieures, lorsque l’application appelle la Device open() méthode de connexion à un équipement, Junos PyEZ recueille automatiquement les informations sur l’équipement pour les connexions NETCONF-over-SSH et recueille les informations sur l’équipement pour les connexions Telnet et console série lorsque vous l’incluez gather_facts=True explicitement dans la Device liste d’arguments.
À partir de la version 2.1.0 de Junos PyEZ, les informations sur l’équipement sont recueillies à la demande pour tous les types de connexion. Chaque fait est collecté et mis en cache dès la première fois que l’application accède à sa valeur ou à celle d’un fait dépendant. Lorsque vous imprimez ou utilisez des faits sur l’équipement, les faits précédemment consultés sont servis depuis le cache, et les faits qui n’ont pas encore été consultés sont récupérés à partir de l’équipement. Si un fait n’est pas pris en charge sur une plate-forme donnée, ou si l’application rencontre un problème réunissant la valeur d’un fait spécifique, alors la valeur de ce fait est None.
Junos PyEZ met en cache un fait d’équipement lorsqu’il accède pour la première fois au fait ou à un fait dépendant, mais il ne met pas à jour la valeur mise en cache lors de l’accès suivant. Pour actualiser l’information sur l’équipement, appelez la facts_refresh() méthode. La facts_refresh() méthode vide le cache de tous les faits, de sorte que lorsque l’application accède ensuite à un fait, elle le récupère de l’équipement et stocke la valeur actuelle dans le cache.
from jnpr.junos import Device
from pprint import pprint
with Device(host='router1.example.net') as dev:
pprint (dev.facts)
dev.facts_refresh()
pprint (dev.facts)
Pour actualiser un seul fait ou un ensemble de faits, incluez l’argument keys dans la facts_refresh() méthode et spécifiez les clés à effacer du cache. Par exemple :
dev.facts_refresh(keys='hostname')
dev.facts_refresh(keys=('hostname','domain','master'))
À partir de Junos PyEZ version 2.0.0, les exceptions qui surviennent lors de la collecte de faits soulèvent un avertissement au lieu d’une erreur, ce qui permet au script de continuer à s’exécuter.
Par défaut, Junos PyEZ renvoie les informations sur l’équipement sous la forme d’un objet de type dictionnaire. À partir de junos PyEZ version 2.2.1, vous pouvez consulter les faits sur l’équipement dans JavaScript Object Notation (JSON). Pour afficher une représentation JSON des faits, importez le json module et appelez la json.dumps() fonction.
from jnpr.junos import Device
import json
with Device(host='router1.example.net') as dev:
print (json.dumps(dev.facts))
Exemple : récupérer des faits à partir d’un équipement Junos
Avec Junos PyEZ, vous pouvez exécuter rapidement des commandes en mode interactif Python, ou créer des programmes pour effectuer des tâches. L’exemple suivant établit une session NETCONF sur SSH avec un équipement Junos et récupère et imprime des faits pour l’équipement à l’aide d’un programme Python simple et d’un mode interactif Python. Les exemples utilisent des clés SSH existantes pour l’authentification.
Pour créer une application Junos PyEZ qui établit une session NETCONF sur SSH avec un équipement Junos et imprime les faits sur l’équipement :
L’ensemble du programme est présenté ici :
import sys
from jnpr.junos import Device
from jnpr.junos.exception import ConnectError
from pprint import pprint
dev = Device(host='router1.example.net')
try:
dev.open()
except ConnectError as err:
print ("Cannot connect to device: {0}".format(err))
sys.exit(1)
pprint (dev.facts['hostname'])
pprint (dev.facts)
dev.close()
Vous pouvez également effectuer rapidement les mêmes opérations en mode interactif Python.
user1@server:~$ python
Python 3.6.9 (default, Jan 26 2021, 15:33:00)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> from jnpr.junos import Device
>>> from pprint import pprint
>>>
>>> dev = Device('router1.example.net')
>>> dev.open()
Device(router1.example.net)
>>>
>>> pprint (dev.facts)
{'2RE': True,
'HOME': '/var/home/user1',
'RE0': {'last_reboot_reason': '0x200:normal shutdown',
'mastership_state': 'master',
'model': 'RE-MX-104',
'status': 'OK',
'up_time': '25 days, 8 hours, 22 minutes, 40 seconds'},
'RE1': {'last_reboot_reason': '0x200:normal shutdown',
'mastership_state': 'backup',
'model': 'RE-MX-104',
'status': 'OK',
'up_time': '25 days, 8 hours, 23 minutes, 55 seconds'},
...>>>
>>> dev.close()
>>> quit()
La vidéo suivante présente une courte session Python qui montre comment utiliser Junos PyEZ pour se connecter et récupérer des faits à partir d’un équipement Junos.