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


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

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",
        ]

 
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!


 

Comentarios