Dernière fois Maintenant que nous avons construit l'environnement pour PyEz, nous allons en fait essayer d'obtenir des informations sur JUNOS cette fois.
Il existe plusieurs façons d'obtenir des informations en utilisant PyEz, mais cette fois j'ai essayé ces trois.
Tout d'abord, c'est très simple, mais en tant que Hello world de PyEz, établissez une connexion du serveur à JUNOS et essayez d'obtenir des informations de base (nom d'hôte, informations de version, etc.) par des faits. faits affiche les informations de base collectées à partir de JUNOS lors de l'établissement d'une session NETCONF. Pour un aperçu, voir Bibliothèque technique Il y en a, mais vous pouvez vérifier les détails sur GitHub.
#Importer le module Device pour se connecter à JUNOS
>>> From juniper. Junos import Device
#Définir les informations sur l'appareil
>>> dev=Device(host='10.0.0.243', user="xxx", password="xxx", port='22')
#Connectez-vous à JUNOS avec netconf via ssh
>>> Dev. open ()
Device(1.1.1.1)
#Affichage des informations de base par faits
>>> 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'}
#Seules les informations de version sont affichées par des faits
>>> dev.facts['version']
'15.1X49-xxx'
>>> dev.facts['hostname']
'vSRX-1‘
dev.close()
>>> quit()
Exemple pour obtenir des informations sur la version du système d'exploitation à l'aide de faits et les écrire dans du texte
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()
Résultat d'exécution
$ 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
En utilisant le module jnpr.junos.op, chaque information peut être obtenue par Table et View définis dans YAML. Le module opérationnel actuel est dans Documentation Les informations de base telles que les informations d'arp et d'interface peuvent être obtenues comme indiqué. Par exemple, utilisez la méthode ArpTable pour obtenir des informations arp. ..
>>> from jnpr.junos.op.arp import ArpTable
>>> arp1=ArpTable(dev)
>>> arp1.get()
ArpTable:10.0.0.243: 3 items
#Obtenez une liste de clés
>>> arp1.keys()
['0a:de:e9:03:15:3f', '0a:ca:89:ec:9a:51', '0a:93:06:42:03:c5']
#Obtenez une liste de valeurs
>>> 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')]]]
Utilisation de la méthode RouteTable, des informations de routage et des informations de table de la passerelle par défaut Échantillon à afficher
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()
Résultat d'exécution
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
Vous pouvez également définir votre propre fichier YAML pour obtenir la table et la vue. En tant qu'exemple tombé dans Git, par exemple, this.
Enfin, avec la commande CLI show en utilisant RPC Essayez d'obtenir les informations équivalentes.
-Show commande et mappage RPC
L'API XML JUNOS est une représentation XML des commandes de configuration et de mode de fonctionnement JUNOS. Vous pouvez obtenir une réponse XML en effectuant une requête avec RPC. Dans PyEz, RPC sera exécuté, mais comme les commandes CLI et RPC peuvent être mappés, la CLI que vous souhaitez utiliser sera utilisée comme RPC.
Pour ce faire, vous devez vérifier quelle CLI est quel RPC, mais voici deux méthodes.
> 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>
>>>
À partir de ces confirmations, l'interface d'exposition peut être identifiée comme la balise \
・ Exemple pour vérifier l'interface du spectacle
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))
-Utiliser l'option de commande show (aucune valeur) Si l'option de commande show n'utilise pas de valeur, vous pouvez la vérifier en définissant = True dans le paramètre de méthode RPC.
Par exemple, un exemple pour vérifier show interface laconique
dev.open()
int=dev.rpc.get_interface_information(terse=True)
print(etree.tostring(int))
-Utiliser l'option de commande show (avec valeur) Lorsque vous utilisez une valeur comme option de la commande show, convertissez le XML facultatif en méthode RPC de la même manière et spécifiez l'option avec égalité.
Par exemple, si vous spécifiez l'interface de show interface, vous pouvez voir que la balise est \
> 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>
Par conséquent, en tant que RPC, il devient nom_interface, spécifiez donc comme suit.
>>> int=dev.rpc.get_interface_information(interface_name='ge-0/0/0')
>>> print(etree.tostring(int))
Vous pouvez également normaliser le XML retourné avec dev.rpc.rpc_method (normalize = True). De plus, il semble possible d'afficher la réponse d'une manière non XML.
Je l'ai écrit comme un mémo, mais Pour le moment, j'ai essayé d'obtenir des informations de plusieurs manières en utilisant PyEz. La prochaine fois, j'essaierai de modifier les paramètres.
Exemples de scripts PyEz (sur Git par Nitin Kumar)
Recommended Posts