Speichern und Laden von Junos PyEZ-Tabellen-XML in und von Dateien
Mit Junos PyEZ-Tabellen und -Ansichten können Sie gezielte Daten aus der Betriebsbefehlsausgabe oder der ausgewählten Konfigurationsdatenbank auf einem Junos-Gerät extrahieren. Sie können Tabellendaten als XML exportieren, wodurch Sie Informationen für ein oder mehrere Geräte abrufen und zu einem späteren Zeitpunkt verarbeiten können. Junos PyEZ stellt die savexml()
Methode zu diesem Zweck bereit.
Mit savexml()
der Methode können Sie einen Zieldateipfad für die exportierten Daten angeben und optional den Geräte-Hostnamen und den Aktivitätszeitstempel in den Dateinamen aufnehmen. Sie können das Format des Zeitstempels mithilfe des Standardformats strftime
steuern.
Nehmen wir beispielsweise an, Sie möchten eine Liste von Geräten durchschleifen und Transceiver-Daten mithilfe der XcvrTable-Definition im jnpr.junos.op.xcvr
Modul erfassen. Der folgende Code definiert eine Liste von Geräte-Hostnamen, fordert den Benutzer zur Eingabe eines Benutzernamens und eines Kennworts auf und schleift dann durch und stellt eine Verbindung zu jedem Gerät hergestellt:
import sys from getpass import getpass from jnpr.junos import Device from jnpr.junos.op.xcvr import XcvrTable devlist = ['router1.example.com', 'router2.example.com'] user = raw_input('username: ') passwd = getpass('password: ') for host in devlist: sys.stdout.write('connecting to %s ... ' % host) sys.stdout.flush() dev = Device(host,user=user,password=passwd) dev.open() print('ok.') # log data dev.close()
An dieser Stelle. ruft das Programm noch keine Transceiver-Daten ab. Wenn das Programm ausgeführt wird, erhalten Sie folgende Ergebnisse:
user1@server:~$ python3 xcvr_demo.py username: user1 password: connecting to router1.example.com ... ok. connecting to router2.example.com ... ok.
Um die Transceiver-Daten zu erfassen und zu protokollieren, weisen Sie die Tabelle jedem Zielgerät zu, rufen die Daten ab und speichern sie mit der savexml()
Methode in einer Datei. Sie können den Hostnamen und timestamp=True
den savexml()
Zeitstempel an den Ausgabedateinamen anfügen und in die Argumentliste aufnehmenhostname=True
. Wenn Sie Auf diese Weise Daten für mehrere Geräte abrufen, müssen Sie den Ausgabedateinamen für jedes Gerät mit dem Hostnamen, Zeitstempel oder beidem unterscheiden, um zu verhindern, dass die Daten für ein Gerät die Daten für das vorherige Gerät in derselben Datei überschrieben werden.
# log data xcvrs = XcvrTable(dev).get() xcvrs.savexml(path='/var/tmp/xcvrs/xcvr.xml', hostname=True, timestamp=True)
Das path
Argument geht davon aus, dass das Zielverzeichnis in Ihrem lokalen Dateisystem vorhanden ist.
Nach dem Hinzufügen des zusätzlichen Codes zur Geräteschleife im Programm und der anschließenden Ausführung des Programms können Sie den Inhalt des Zielverzeichnisses untersuchen. In diesem Beispiel werden die Hostnamen- und Zeitstempelwerte in die Dateinamen eingebettet.
user1@server:~$ ls /var/tmp/xcvrs xcvr_router1.example.com_20131226093921.xml xcvr_router2.example.com_20131226093939.xml
Sie können die XML-Daten zu einem späteren Zeitpunkt für die Nachbearbeitung importieren. Um die Daten zu importieren, weisen Sie die Tabelle mit der XML-Datei statt mit einem Zielgerät zu. Zum Beispiel:
from jnpr.junos.op.xcvr import XcvrTable xmlpath = '/var/tmp/xcvrs/xcvr_router1.example.com_20131226093921.xml' xcvrs = XcvrTable(path=xmlpath) xcvrs.get()