Netconf en Junos Juniper y SROS Nokia utilizando Python 2.7.X
Hola!
En esta entrada veremos como realizar consultas utilizando libreria Junos PyEZ y libreria ncclient de Python para obtener informacion por Netconf desde equipos Juniper y Nokia.
Instalacion de librerias
[root@server]# pip install ncclient[root@server]# pip install junos-eznc
JUNOS
Para habilitar Netconf en Junos
user@host# set system services netconf ssh port 830
Ver comandos RPC
En JUNOS si uno quiere ver que comando RPC puede
usar para lograr cierto objetivo basta añadir | display xml rpc al
comando, ejemplo
pythonnetworker@ACC04-TRAP> show log messages | display xml rpc
<rpc-reply xmlns:junos="http://xml.juniper.net/junos/15.1R6/junos">
<rpc>
<get-log>
<filename>messages</filename>
</get-log>
</rpc>
<cli>
<banner>{master:0}</banner>
</cli>
</rpc-reply>
{master:0}
pythonnetworker@ACC04-TRAP>
Script de prueba
Queremos obtener información de salida de comando Junos “show log messages”
usuario = pythonnetworker
host = acc04-trap
password = lalalala
Noten en el script como el guion del rpc cambia por underscore y el filename='messages' se pasa como parametro
test_junos_netconf.py
#!/usr/bin/env python
from jnpr.junos import Device
dev = Device( user='pythonnetworker', host='acc04-trap', password='lalalala' )
dev.open()
rsp = dev.rpc.get_log(filename='messages')
print rsp.text
dev = Device( user='pythonnetworker', host='acc04-trap', password='lalalala' )
dev.open()
rsp = dev.rpc.get_log(filename='messages')
print rsp.text
Resultado:
NOKIA
Para habilitar Netconf en Nokia
*A:SROS#
configure
#————————————
system
netconf
no shutdown
exit
security
user “admin”
access console netconf
exit
profile “administrative”
netconf
base-op-authorization
lock
exit
configure
#————————————
system
netconf
no shutdown
exit
security
user “admin”
access console netconf
exit
profile “administrative”
netconf
base-op-authorization
lock
exit
Es necesario hacer un pequeño hack de la librería ncclient para que
acepte comandos rpc, para esto reemplazar el archivo alu.py en el
directorio C:\Python27\Lib\site-packages\ncclient\devices por el
“alu.py” mostrado a continuacion:
alu.py
from .default import DefaultDeviceHandler
from ncclient.operations.third_party.juniper.rpc import ExecuteRpc
class AluDeviceHandler(DefaultDeviceHandler):
"""
Alcatel-Lucent 7x50 handler for device specific information.
"""
def __init__(self, device_params):
super(AluDeviceHandler, self).__init__(device_params)
def add_additional_operations(self):
dict = {}
dict["rpc"] = ExecuteRpc
return dict
def get_capabilities(self):
return [
"urn:ietf:params:netconf:base:1.0",
]
from ncclient.operations.third_party.juniper.rpc import ExecuteRpc
class AluDeviceHandler(DefaultDeviceHandler):
"""
Alcatel-Lucent 7x50 handler for device specific information.
"""
def __init__(self, device_params):
super(AluDeviceHandler, self).__init__(device_params)
def add_additional_operations(self):
dict = {}
dict["rpc"] = ExecuteRpc
return dict
def get_capabilities(self):
return [
"urn:ietf:params:netconf:base:1.0",
]
Script de prueba
Queremos obtener la información de salida de comando SROS “show card” de un equipo Nokia de prueba
usuario = pythonnetworker
host =nokia-test
password = lalalala
test_sros_netconf.py
#!/usr/bin/env python from ncclient import managerfrom ncclient.xml_ import * def connect(host, port, user, password): conn = manager.connect(host=host, port=port, username=user, password=password, timeout=10, device_params = {'name':'alu'}, hostkey_verify=False) rpc = """ <get> <filter> <oper-data-format-cli-block> <cli-show>card</cli-show> </oper-data-format-cli-block> </filter> </get> """ result = conn.rpc(rpc) print result if __name__ == '__main__': connect('nokia-test', '830', 'pythonnetworker', 'lalalala')
Resultado:
Mayor información de NETCONF Juniper y Nokia puede obtenerse desde sus páginas oficiales,
Saludos Python networkers!
Photo by Marius Masalar on Unsplash



Comentarios
Publicar un comentario