Verwenden Sie Junos PyEZ, um Fakten von Junos-Geräten abzurufen
Informationen zu Junos PyEZ-Geräten
Junos PyEZ ist ein Mikroframework für Python, mit dem Sie Junos-Geräte verwalten und automatisieren können. Junos PyEZ modelliert jedes Gerät als Instanz der jnpr.junos.device.Device
Klasse. Nach der Verbindung mit einem Junos-Gerät können Junos PyEZ-Anwendungen Fakten über das Gerät abrufen. Auf die Gerätedaten wird als facts
Attribut des Device
Objekts zugegriffen. Detaillierte Informationen zu den Schlüsseln, die in den zurückgegebenen Geräte-Fakten enthalten sind, finden Sie unter jnpr.junos.facts.
Im folgenden Beispiel wird eine NETCONF-Sitzung über SSH mit dem Gerät festgelegt und die Gerätedaten gedruckt. Das Gerät verwendet SSH-Schlüssel zur Authentifizierung des Benutzers.
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'}, ...
In Junos PyEZ Version 2.0.0 und früheren Versionen Device
open()
erfasst Junos PyEZ automatisch die Geräte-Fakten für NETCONF-over-SSH-Verbindungen und sammelt die Geräte-Fakten für Telnet- und serielle Konsolenverbindungen, wenn Sie explizit in die Device
Argumentliste aufnehmengather_facts=True
.
Ab Junos PyEZ Version 2.1.0 werden Gerätedaten bei Bedarf für alle Verbindungstypen erfasst. Jede Tatsache wird erfasst und zwischengespeichert, wenn die Anwendung das erste Mal auf ihren Wert oder den Wert einer abhängigen Tatsache zutrifft. Wenn Sie Gerätedaten drucken oder verwenden, werden zuvor abgerufene Fakten aus dem Cache bereitgestellt und Fakten, auf die noch nicht zugegriffen wurde, vom Gerät abgerufen. Wenn eine Tatsache auf einer bestimmten Plattform nicht unterstützt wird oder wenn die Anwendung auf ein Problem stößt, das den Wert einer bestimmten Tatsache erfasst, ist der Wert dieser Tatsache None
.
Junos PyEZ speichert eine Geräte-Tatsache zwischen, wenn es zum ersten Mal auf die Tatsache oder eine abhängige Tatsache zugeht, aber es aktualisiert den zwischengespeicherten Wert nicht bei einem späteren Zugriff. Rufen Sie die Methode auf, um die facts_refresh()
Gerätedaten zu aktualisieren. Die facts_refresh()
Methode leert den Cache aller Fakten, sodass die Anwendung beim nächsten Zugriff auf eine Tatsache diese vom Gerät abruft und den aktuellen Wert im Cache speichert.
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)
Um nur eine einzelne Tatsache oder einen Satz von Fakten zu aktualisieren, fügen Sie das keys
Argument in die facts_refresh()
Methode ein und geben Sie die Schlüssel an, die aus dem Cache entfernt werden sollen. Zum Beispiel:
dev.facts_refresh(keys='hostname') dev.facts_refresh(keys=('hostname','domain','master'))
Ab Junos PyEZ Version 2.0.0 führen Ausnahmen, die beim Erfassen von Fakten auftreten, eine Warnung anstelle eines Fehlers hervor, wodurch das Skript weiterhin ausgeführt werden kann.
Standardmäßig gibt Junos PyEZ die Geräte-Fakten als wörterbuchähnliches Objekt zurück. Ab Junos PyEZ Version 2.2.1 können Sie die Geräte fakten in JavaScript Object Notation (JSON) anzeigen. Um eine JSON-Darstellung der Fakten anzuzeigen, importieren Sie das json
Modul, und rufen Sie die json.dumps()
Funktion auf.
from jnpr.junos import Device import json with Device(host='router1.example.net') as dev: print (json.dumps(dev.facts))
Beispiel: Abrufen von Fakten von einem Junos-Gerät
Mit Junos PyEZ können Sie schnell Befehle im interaktiven Python-Modus ausführen, oder Sie können Programme zum Ausführen von Aufgaben erstellen. Im folgenden Beispiel wird eine NETCONF-Sitzung über SSH mit einem Junos-Gerät hergestellt und Fakten für das Gerät mithilfe eines einfachen Python-Programms und des interaktiven Python-Modus abgerufen und gedruckt. In den Beispielen werden vorhandene SSH-Schlüssel für die Authentifizierung verwendet.
So erstellen Sie eine Junos PyEZ-Anwendung, die eine NETCONF-Sitzung über SSH mit einem Junos-Gerät aufbaut und die Geräte-Fakten ausdruckt:
Hier wird das gesamte Programm vorgestellt:
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()
Sie können auch schnell die gleichen Vorgänge im interaktiven Python-Modus ausführen.
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()
Das folgende Video zeigt eine kurze Python-Sitzung, in der gezeigt wird, wie Sie junos PyEZ verwenden, um eine Verbindung zu einem Junos-Gerät herzustellen und Fakten von einem Junos-Gerät abzurufen.