Essayez Juniper JUNOS PyEz (bibliothèque python) Note 2 ~ Obtenez des informations avec PyEz ~

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.

  1. Utilisation de faits permettant d'obtenir facilement des informations de base définies à l'avance
  2. Utilisation de la table et de la vue permettant de récupérer le contenu défini dans le fichier YAML
  3. Confirmation équivalente à la commande JUNOS show par RPC (appels de procédure distante)

1. Acquisition d'informations JUNOS (faits)

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

2. Obtenir des informations JUNOS (tableau et vue)

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.

3. Obtenir les informations JUNOS (RPC, commande show)

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.

  1. Vérifiez avec la commande show sur la machine JUNOS réelle Vérifiez avec | display xml rpc après la commande show que vous souhaitez utiliser. Par exemple, dans le cas de 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. Vérifiez avec la méthode display_xml_rpc () de PyEz Après vous être connecté à JUNOS avec dev.open (), spécifiez et confirmez la commande show que vous souhaitez utiliser dans la méthode dev.display_xml_rpc.
>>> 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 \ </ get-route-information>. Ensuite, nous devons convertir la balise en RPC, mais changer le tiret (-) en trait de soulignement (_) et éliminer les crochets angulaires. Autrement dit, dans le cas de \ , le RPC devient get_interface_information (). Tout ce que vous avez à faire est d'utiliser cette méthode RPC. Si vous ne spécifiez pas l'option, elle sera renvoyée au format XML, ainsi la bibliothèque lxml.etree sera également importée, formatée et affichée. Utilisez etree.tostring () pour ce faire.

・ 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.

4. Résumé

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.

5. Lien de référence

Exemples de scripts PyEz (sur Git par Nitin Kumar)

Recommended Posts

Essayez Juniper JUNOS PyEz (bibliothèque python) Note 2 ~ Obtenez des informations avec PyEz ~
Essayez Juniper JUNOS PyEz (bibliothèque python) Memo 3 ~ Modifier les paramètres avec PyEz ~
Essayez Juniper JUNOS PyEz (bibliothèque python) Note 1 ~ Présentation de PyEz ~
Obtenez des informations sur l'alambic avec Python
Obtenez des informations météorologiques avec Python et le grattage
Obtenez des informations sur la propriété en grattant avec python
Essayez le scraping HTML avec la bibliothèque Python
[Python] Obtenez des informations sur le package Python avec l'API PyPI
[Personal memo] julia --Utiliser la bibliothèque Python avec Julia en utilisant PyCall
Obtenez des informations sur le processeur de Raspberry Pi avec Python
Script Python pour obtenir des informations de note avec REAPER
Affichage des données d'informations de position en Python --Essayez de tracer avec la bibliothèque d'affichage de carte (folium) -
Essayez de gratter avec Python.
Obtenez date avec python
[Python] Obtenez des informations sur les utilisateurs et des articles sur l'API de Qiita
Obtenez le code du pays avec python
Essayez d'afficher diverses informations utiles pour le débogage avec python
Mémo graphique Twitter avec Python
Obtenez la chronologie Twitter avec Python
Essayez la sortie Python avec Haxe 3.2
Obtenez des données Youtube avec python
Obtenir des informations avec l'API Zabbix
Obtenir l'ID de thread avec python
Essayez d'exécuter Python avec Try Jupyter
Commencez avec Python! ~ ② Grammaire ~
Essayez la reconnaissance faciale avec Python
Obtenez des stocks avec Python
[Python x Zapier] Obtenez des informations d'alerte et notifiez avec Slack
Essayez d'afficher la carte google et la carte géographique avec python
Essayez d'obtenir des métriques CloudWatch avec la source de données python re: dash
PhytoMine-I a essayé d'obtenir les informations génétiques de la plante avec Python
Essayez de gratter avec Python + Beautiful Soup
Obtenez des informations sur les fichiers vidéo avec ffmpeg-python
Commencez avec Python! ~ ① Construction de l'environnement ~
Lien pour commencer avec python
Obtenez des avis avec l'API googlemap de python
Essayez d'exploiter Facebook avec Python
mémo python - Spécifiez les options avec getopt
Essayez la décomposition de valeurs singulières avec Python
Entrée / sortie avec Python (mémo d'apprentissage Python ⑤)
Obtenez la météo avec les requêtes Python
Obtenez une capture d'écran Web avec python
Obtenez la météo avec les requêtes Python 2
[Python] Obtenez des données économiques avec DataReader
Comment démarrer avec Python
[Petite histoire] Obtenez l'horodatage avec Python
Obtenir, publier un mémo de communication en Python
Obtenez les tendances Qiita avec le scraping Python
[HyperledgerIroha] Requête avec la bibliothèque Python
Essayez la simulation de contrôle de fréquence avec Python
Mémo d'apprentissage "Scraping & Machine Learning avec Python"
Démarrez avec Python avec Blender
[Memo] Tweet sur Twitter avec Python
[Yahoo! Weather Replacement Version] Comment obtenir des informations météo avec LINE Notify + Python
Essayez d'utiliser APSW, une bibliothèque Python que SQLite peut prendre au sérieux
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
Collecter des informations sur Twitter avec Python (API Twitter)
Obtenez des données supplémentaires vers LDAP avec python
Essayez de reproduire un film couleur avec Python