Utilice Junos PyEZ para recuperar datos de dispositivos Junos
Descripción de los datos del dispositivo Junos PyEZ
Junos PyEZ es un microtrabajo para Python que le permite administrar y automatizar dispositivos Junos. Junos PyEZ modela cada dispositivo como una instancia de la jnpr.junos.device.Device
clase. Después de conectarse a un dispositivo Junos, las aplicaciones Junos PyEZ pueden recuperar datos sobre el dispositivo. Se accede a los hechos del dispositivo como el facts
atributo del Device
objeto. Para obtener información detallada acerca de las claves que se incluyen en los hechos del dispositivo devuelto, consulte jnpr.junos.facts.
En el ejemplo siguiente, se establece una sesión NETCONF a través de SSH con el dispositivo e imprime los hechos del dispositivo. El dispositivo utiliza claves SSH para autenticar al usuario.
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'}, ...
En junos PyEZ versión 2.0.0 y versiones anteriores, cuando la aplicación llama al Device
open()
método para conectarse a un dispositivo, Junos PyEZ recopila automáticamente los hechos del dispositivo para conexiones NETCONF sobre SSH y recopila los hechos del dispositivo para Telnet y las conexiones de consola en serie cuando se incluye gather_facts=True
explícitamente en la lista de Device
argumentos.
A partir de Junos PyEZ versión 2.1.0, los datos del dispositivo se recopilan a pedido para todos los tipos de conexión. Cada hecho se recopila y almacena en caché la primera vez que la aplicación accede a su valor o al valor de un hecho dependiente. Cuando imprime o utiliza hechos del dispositivo, los hechos a los que se accede anteriormente se sirven desde la memoria caché y los hechos a los que aún no se ha accedido se recuperan del dispositivo. Si no se admite un hecho en una plataforma determinada, o si la aplicación encuentra un problema que recopila el valor de un hecho específico, entonces el valor de ese hecho es None
.
Junos PyEZ almacena en caché un hecho del dispositivo cuando accede por primera vez al hecho o un hecho dependiente, pero no actualiza el valor almacenado en caché tras el acceso posterior. Para actualizar los hechos del dispositivo, llame al facts_refresh()
método. El facts_refresh()
método vacía la memoria caché de todos los hechos, de modo que cuando la aplicación siguiente accede a un hecho, lo recupera del dispositivo y almacena el valor actual en la memoria caché.
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)
Para actualizar solo un solo hecho o un conjunto de hechos, incluya el keys
argumento en el facts_refresh()
método y especifique las claves que desea borrar de la memoria caché. Por ejemplo:
dev.facts_refresh(keys='hostname') dev.facts_refresh(keys=('hostname','domain','master'))
A partir de Junos PyEZ versión 2.0.0, las excepciones que se producen al recopilar hechos generan una advertencia en lugar de un error, lo que permite que la secuencia de comandos continúe ejecutándose.
De forma predeterminada, Junos PyEZ devuelve los hechos del dispositivo como un objeto similar a un diccionario. A partir de Junos PyEZ versión 2.2.1, puede ver los hechos del dispositivo en notación de objetos JavaScript (JSON). Para ver una representación JSON de los hechos, importe el json
módulo y llame a la json.dumps()
función.
from jnpr.junos import Device import json with Device(host='router1.example.net') as dev: print (json.dumps(dev.facts))
Ejemplo: Recuperar datos de un dispositivo Junos
Con Junos PyEZ, puede ejecutar rápidamente comandos en modo interactivo de Python, o puede crear programas para realizar tareas. En el ejemplo siguiente, se establece una sesión NETCONF a través de SSH con un dispositivo Junos y se recuperan e imprimen datos para el dispositivo mediante un programa Python simple y un modo interactivo de Python. Los ejemplos utilizan claves SSH existentes para la autenticación.
Para crear una aplicación Junos PyEZ que establezca una sesión NETCONF a través de SSH con un dispositivo Junos e imprima los hechos del dispositivo:
Aquí se presenta todo el programa:
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()
También puede realizar rápidamente las mismas operaciones en el modo interactivo de 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()
En el siguiente video se presenta una breve sesión de Python que muestra cómo usar Junos PyEZ para conectarse y recuperar hechos desde un dispositivo Junos.