Probieren Sie Juniper JUNOS PyEz (Python-Bibliothek) aus. Hinweis 2 ~ Informationen mit PyEz ~ abrufen ~

Letztes Mal Nachdem wir die Umgebung für PyEz erstellt haben, werden wir dieses Mal tatsächlich versuchen, Informationen über JUNOS zu erhalten.

Es gibt verschiedene Möglichkeiten, mit PyEz Informationen abzurufen, aber diesmal habe ich diese drei ausprobiert.

  1. Verwendung von Fakten, die leicht grundlegende Informationen erhalten können, die im Voraus definiert wurden
  2. Verwendung von Tabelle und Ansicht, mit denen der in der YAML-Datei definierte Inhalt abgerufen werden kann
  3. Bestätigung, die dem JUNOS-Befehl show per RPC entspricht (Remoteprozeduraufrufe)

1. JUNOS-Informationsbeschaffung (Fakten)

Zunächst ist es sehr einfach, aber als Hello World von PyEz stellen Sie eine Verbindung vom Server zu JUNOS her und erhalten grundlegende Informationen (Hostname, Versionsinformationen usw.) anhand von Fakten. fact zeigt die grundlegenden Informationen an, die von JUNOS beim Einrichten einer NETCONF-Sitzung gesammelt wurden. Eine Übersicht finden Sie unter Tech Library. Es gibt einige, aber Sie können die Details auf [GitHub] überprüfen (https://github.com/Juniper/py-junos-eznc).

#Importieren Sie das Gerätemodul, um eine Verbindung mit JUNOS herzustellen
>>> From juniper. Junos import Device 
#Geräteinformationen definieren
>>> dev=Device(host='10.0.0.243', user="xxx", password="xxx", port='22')
#Stellen Sie mit netconf über ssh eine Verbindung zu JUNOS her
>>> Dev. open ()        
Device(1.1.1.1)
#Anzeige grundlegender Informationen anhand von Fakten
>>> print dev.facts 
{'domain': None, 'hostname': 'vSRX-1', 'ifd_style': 'CLASSIC', 'version_info': junos.version_info(major=(15, 1), type=X, minor=(49, 'D', 50), build=3), '2RE': False, 'serial number': 'xxxxx', 'fqdn': 'vSRX-1', 'switch_style': 'NONE', 'version': '15.1X49-xxx', 'HOME': '/var/home/vsrx', 'srx_cluster': False, 'model': 'VSRX', 'RE0': {'status': 'Testing', 'last_reboot_reason': '0x10: Misc hardware reason ', 'model': 'VSRX RE', 'up_time': '44 minutes'}, 'vc_capable': False, 'personality': 'UNKNOWN'}
#Nur Versionsinformationen werden durch Fakten angezeigt
>>> dev.facts['version']
'15.1X49-xxx'
>>> dev.facts['hostname']
'vSRX-1‘

dev.close()
>>> quit()

Beispiel, um Informationen zur Betriebssystemversion mithilfe von Fakten abzurufen und in Text zu schreiben

from jnpr.junos import Device
from datetime import datetime

mydeviceslist=["1.1.1.1"]
f=open("my_devices_inventory.txt", "a")
f.write(str(datetime.now()) + '\n')
for item in mydeviceslist:
        dev=Device(host=item, user="xxx", password="xxx",port='22')
        dev.open()
        dev.close()
        print ("the device "+ dev.facts["hostname"]+ " is a " + dev.facts['model
'] + " running " + dev.facts["version"])
        f.write ( "the device "+ dev.facts["hostname"]+ " is a " + dev.facts['mo
del'] + " running " + dev.facts["version"] + "\n")
f.close()

Ausführungsergebnis

$ python print_facts.py
the device vSRX-1 is a VSRX running 15.1X49-xxx
[ec2-user@ip-10-0-0-47 facts]$  more my_devices_inventory.txt
2016-08-22 08:01:29.396263 
the device vSRX_AWS-1 is a VSRX running 15.1X49-xxx

2. JUNOS-Informationserfassung (Tabelle und Ansicht)

Mit dem Modul jnpr.junos.op können alle Informationen über die in YAML definierte Tabelle und Ansicht abgerufen werden. Das aktuelle Operationsmodul befindet sich in Dokumentation. Grundlegende Informationen wie Arp- und Schnittstelleninformationen können wie gezeigt erhalten werden. Versuchen Sie beispielsweise, Arp-Informationen mit der [ArpTable-Methode] abzurufen (https://github.com/Juniper/py-junos-eznc/blob/master/lib/jnpr/junos/op/arp.yml). ..

>>> from jnpr.junos.op.arp import ArpTable
>>> arp1=ArpTable(dev)
>>> arp1.get() 
ArpTable:10.0.0.243: 3 items
#Holen Sie sich eine Liste der Schlüssel
>>> arp1.keys()   
['0a:de:e9:03:15:3f', '0a:ca:89:ec:9a:51', '0a:93:06:42:03:c5']
#Holen Sie sich eine Liste von Werten
>>> arp1.values()   
[[('interface_name', 'fxp0.0'), ('ip_address', '10.0.0.1'), ('mac_address', '0a:de:e9:03:15:3f')], [('interface_name', 'fxp0.0'), ('ip_address', '10.0.0.47'), ('mac_address', '0a:ca:89:ec:9a:51')], [('interface_name', 'ge-0/0/0.0'), ('ip_address', '10.0.1.1'), ('mac_address', '0a:93:06:42:03:c5')]]]

Verwenden Sie die RouteTable-Methode, Routing-Informationen und Tabelleninformationen des Standard-Gateways Beispiel zur Anzeige

from jnpr.junos import Device
from jnpr.junos.op.routes import RouteTable

dev = Device(host='10.0.0.243', user='xxx', password='xxx', port='22', gathe
r_facts=False)
dev.open()

tbl = RouteTable(dev)
tbl.get()

#get values and keys
for key, value in tbl.items():
    print "key:%s,\t value:%s" %(key, value)

##print only GW information
print '##this is default gateway'

gw = RouteTable(dev)
gw.get('0.0.0.0')
print gw
for item in gw:
    print 'protocol:', item.protocol
    print 'age:', item.age
    print 'via:', item.via
    print

dev.close()

Ausführungsergebnis

key:0.0.0.0/0,   value:[('nexthop', '10.0.0.1'), ('age', 177947), ('via', 'fxp0.0'), ('protocol', 'Static')]
key:10.0.0.0/24,         value:[('nexthop', None), ('age', 177947), ('via', 'fxp0.0'), ('protocol', 'Direct')]
key:10.0.0.243/32,       value:[('nexthop', None), ('age', 181163), ('via', 'fxp0.0'), ('protocol', 'Local')]
key:10.0.1.0/24,         value:[('nexthop', None), ('age', 181145), ('via', 'ge-0/0/0.0'), ('protocol', 'Direct')]
key:10.0.1.68/32,        value:[('nexthop', None), ('age', 181146), ('via', 'ge-0/0/0.0'), ('protocol', 'Local')]
key:10.0.2.98/32,        value:[('nexthop', None), ('age', 181144), ('via', 'ge-0/0/1.0'), ('protocol', 'Direct')]
key:10.0.3.85/32,        value:[('nexthop', None), ('age', 181144), ('via', 'ge-0/0/2.0'), ('protocol', 'Direct')]
key:192.168.0.1/32,      value:[('nexthop', None), ('age', 181162), ('via', 'lo0.0'), ('protocol', 'Direct')]
##this is default gateway
RouteTable:10.0.0.243: 1 items
protocol: Static
age: 177947
via: fxp0.0

Sie können auch Ihre eigene YAML-Datei definieren, um die Tabelle und die Ansicht abzurufen. Als Beispiel, das in Git fiel, zum Beispiel this.

3. JUNOS-Informationen abrufen (RPC, Befehl show)

Schließlich mit dem CLI-Befehl show using RPC Versuchen Sie, die entsprechenden Informationen zu erhalten.

-Show-Befehl und RPC-Zuordnung

Die JUNOS XML-API ist eine XML-Darstellung von JUNOS-Konfigurations- und Betriebsmodusbefehlen. Sie können eine XML-Antwort erhalten, indem Sie eine Anfrage bei RPC stellen. In PyEz wird RPC ausgeführt. Da jedoch CLI-Befehle und RPC zugeordnet werden können, wird die CLI, die Sie verwenden möchten, als RPC verwendet.

Dazu müssen Sie überprüfen, welche CLI welcher RPC ist. Hier sind jedoch zwei Methoden.

  1. Überprüfen Sie mit dem Befehl show auf dem aktuellen JUNOS-Computer Überprüfen Sie mit | display xml rpc nach dem Befehl show, den Sie verwenden möchten. Zum Beispiel im Fall von show interface
> show interfaces  | display xml rpc
<rpc-reply xmlns:junos="http://xml.juniper.net/junos/15.1X49/junos">
    <rpc>
        <get-interface-information>
        </get-interface-information>
    </rpc>
    <cli>
        <banner></banner>
    </cli>
</rpc-reply>
  1. Überprüfen Sie mit der display_xml_rpc () -Methode von PyEz Geben Sie nach dem Herstellen einer Verbindung zu JUNOS mit dev.open () den Befehl show an und bestätigen Sie ihn, den Sie in der Methode dev.display_xml_rpc verwenden möchten.
>>> print dev.display_xml_rpc('show interface', format='text')
<get-interface-information>
</get-interface-information>
>>>

Aus diesen Bestätigungen kann die Show-Schnittstelle als Tag \ </ get-route-information> identifiziert werden. Als nächstes müssen wir das Tag in RPC konvertieren, aber den Bindestrich (-) in einen Unterstrich (_) ändern und die spitzen Klammern entfernen. Das heißt, im Fall von \ wird der RPC zu get_interface_information (). Sie müssen lediglich diese RPC-Methode verwenden. Wenn Sie die Option nicht angeben, wird sie in XML zurückgegeben, sodass lxml.etree library ebenfalls importiert, formatiert und angezeigt wird. Verwenden Sie dazu etree.tostring ().

・ Beispiel zur Überprüfung der Show-Oberfläche

from jnpr.junos import Device
from lxml import etree

  dev = Device(xxxx,xxx,xxx,xx)
  dev.open()

int=dev.rpc.get_interface_information()
print(etree.tostring(int))

-Verwenden Sie die Befehlsoption show (kein Wert) Wenn die Befehlsoption show keinen Wert verwendet, können Sie dies überprüfen, indem Sie im Parameter RPC method den Wert = True setzen.

Beispiel: Ein Beispiel zur Überprüfung zeigt, dass die Benutzeroberfläche knapp ist

dev.open()
int=dev.rpc.get_interface_information(terse=True)
print(etree.tostring(int))

Wenn Sie beispielsweise die Schnittstelle von show interface angeben, sehen Sie, dass das Tag \ ist.

> show interfaces ge-0/0/0 | display xml rpc
<rpc-reply xmlns:junos="http://xml.juniper.net/junos/15.1X49/junos">
    <rpc>
        <get-interface-information>
                <interface-name>ge-0/0/0</interface-name>
        </get-interface-information>
    </rpc>
    <cli>

Daher wird es als RPC zu Schnittstellenname. Geben Sie daher Folgendes an.

>>> int=dev.rpc.get_interface_information(interface_name='ge-0/0/0')
>>> print(etree.tostring(int))

Sie können das zurückgegebene XML auch mit dev.rpc.rpc_method normalisieren (normalize = True). Es scheint auch möglich zu sein, die Antwort nicht in XML anzuzeigen.

4. Zusammenfassung

Ich habe es wie ein Memo geschrieben, aber Vorerst habe ich versucht, mit PyEz auf verschiedene Weise Informationen zu erhalten. Nächstes Mal werde ich versuchen, die Einstellungen zu ändern.

5. Referenzlink

PyEz-Beispielskripte (auf Git von Nitin Kumar)

Recommended Posts

Probieren Sie Juniper JUNOS PyEz (Python-Bibliothek) aus. Hinweis 2 ~ Informationen mit PyEz ~ abrufen ~
Versuchen Sie Juniper JUNOS PyEz (Python-Bibliothek) Memo 3 ~ Ändern Sie die Einstellungen mit PyEz ~
Hinweis zum Ausprobieren von Juniper JUNOS PyEz (Python-Bibliothek) 1 ~ PyEz Übersicht ~
Holen Sie sich Alembic-Informationen mit Python
Holen Sie sich Wetterinformationen mit Python & Scraping
Abrufen von Eigenschaftsinformationen durch Scraping mit Python
Versuchen Sie HTML-Scraping mit der Python-Bibliothek
[Python] Python-Paketinformationen mit der PyPI-API abrufen
[Persönliches Memo] julia - Verwenden Sie die Python-Bibliothek mit julia unter Verwendung von PyCall
Holen Sie sich CPU-Informationen von Raspberry Pi mit Python
Python-Skript zum Abrufen von Notizinformationen mit REAPER
Anzeige von Positionsinformationsdaten in Python - Versuchen Sie, mit der Kartenanzeigebibliothek (Folium) zu zeichnen -
Versuchen Sie es mit Python.
Holen Sie sich ein Date mit Python
[Python] Mit der API von Qiita erhalten Sie Benutzer- und Artikelinformationen
Holen Sie sich den Ländercode mit Python
Versuchen Sie, verschiedene Informationen anzuzeigen, die für das Debuggen mit Python nützlich sind
Twitter-Grafiknotiz mit Python
Holen Sie sich Twitter-Timeline mit Python
Probieren Sie die Python-Ausgabe mit Haxe 3.2 aus
Holen Sie sich Youtube-Daten mit Python
Informationen erhalten Sie mit zabbix api
Holen Sie sich die Thread-ID mit Python
Versuchen Sie, Python mit Try Jupyter auszuführen
Beginnen Sie mit Python! ~ ② Grammatik ~
Versuchen Sie die Gesichtserkennung mit Python
Holen Sie sich Lager mit Python
[Python x Zapier] Erhalten Sie Warninformationen und benachrichtigen Sie mit Slack
Versuchen Sie, Google Map und Geography Map mit Python anzuzeigen
Versuchen Sie, CloudWatch-Metriken mit der Python-Datenquelle re: dash abzurufen
PhytoMine-I hat versucht, mit Python die genetischen Informationen der Pflanze zu erhalten
Versuchen Sie es mit Python + Beautiful Soup
Holen Sie sich Informationen zu Videodateien mit ffmpeg-python
Beginnen Sie mit Python! ~ ① Umweltbau ~
Link, um mit Python zu beginnen
Holen Sie sich Bewertungen mit Python Googlemap API
Versuchen Sie, Facebook mit Python zu betreiben
Python-Memo - Geben Sie die Optionen mit getopt an
Versuchen Sie die Singularwertzerlegung mit Python
Eingabe / Ausgabe mit Python (Python-Lernnotiz ⑤)
Holen Sie sich das Wetter mit Python-Anfragen
Holen Sie sich Web-Screen-Capture mit Python
Holen Sie sich das Wetter mit Python-Anfragen 2
[Python] Mit DataReader Wirtschaftsdaten abrufen
Erste Schritte mit Python
[Kleine Geschichte] Holen Sie sich mit Python einen Zeitstempel
Holen Sie sich ein Kommunikationsmemo in Python
Holen Sie sich Qiita-Trends mit Python-Scraping
[HyperledgerIroha] Abfrage mit Python-Bibliothek
Versuchen Sie die Frequenzsteuerungssimulation mit Python
"Scraping & maschinelles Lernen mit Python" Lernnotiz
Beginnen Sie mit Python mit Blender
[Memo] Tweet auf Twitter mit Python
[Yahoo! Weather Replacement Version] So erhalten Sie Wetterinformationen mit LINE Notify + Python
Versuchen Sie es mit APSW, einer Python-Bibliothek, die SQLite ernst nehmen kann
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Sammeln von Informationen von Twitter mit Python (Twitter API)
Holen Sie sich mit Python zusätzliche Daten zu LDAP
Versuchen Sie, Farbfilme mit Python zu reproduzieren