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.
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
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.
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.
> 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>
>>> 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 \
・ 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 \
> 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.
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.
PyEz-Beispielskripte (auf Git von Nitin Kumar)
Recommended Posts