NAPALM Introduction
Network Programmability and AutomationPythonTutoriales

NAPALM Network Automation Python: Introducción e Instalación

Introducción

En este primer artículo vamos a introducir una librería para automatización de redes llamada NAPALM. Vamos a conocer que es NAPALM, como funciona y un poco de su historia. Quiero que aprendas el proceso de instalación de esta librería y finalmente que veamos la documentación oficial, que te servirá como guía y consultoría.

Este es el primero de múltiples artículos y videos, en los que quiero enseñarles como puedes implementar Programabilidad y Automatización de Redes con Python y la librería NAPALM.

¿Qué es NAPALM?

NAPALM (Network Automation and Programmability Abstraction Layer with Multivendor support) es una librería en Python creada y desarrollada en el 2015 por David Borroso y Elisa Jasinska. El objetivo era unificar el acceso a dispositivos, la recuperación datos y manipulación de la configuración de varios fabricantes.

A través de una API unificada NAPALM permite obtener datos o manipular configuración utilizando las mismas funciones, sin importar el Sistema Operativo o Fabricante.

El equipo oficial que mantiene NAPALM, también conocido como los «Core Developers«, han hecho desarrollos para múltiples fabricantes y sistemas operativos. Actualmente soportan:

  • Arista EOS
  • Cisco IOS
  • Cisco IOS-XR
  • Cisco NX-OS
  • Juniper JunOS

Además de los controladores principales, napalm también admite controladores impulsados por la comunidad. Esta comunidad mantiene sus repositorios de controladores en Github. Aquí podran encontrar controladores para otros fabricantes como Huawei, Cumulus, HP, ArubaOS, entre otros.

NAPALM es un proyecto de Software libre. Esta publicado y es mantenido en Github. Licenciado bajo Apache 2.0

¿Cómo funciona NAPALM?

Veamoslo de la siguiente manera, si quisieras acceder a diferentes dispositivos de redes con diferentes sistemas operativos a través de Python, probablemente tendríamos que utilizar librerías desarrolladas para cada sistema operativo. Sería una tarea tediosa aplicar Programabilidad de Redes en estas circunstancias. Para facilitar la programación, NAPALM agrega un capa de abstracción. Esta capa nos permite utilizar una misma función para realizar la misma acción en diferentes sistemas operativos.

¿Cómo lo hace?

Lo que hace NAPALM es ocultar esta capa de abstracción unificando la forma en que accedemos a un dispositivo de red, independientemente de quién lo haya creado.

Esto es posible gracias a la introducción del concepto de NetworkDriver. Cada vez que queremos interactuar con un dispositivo, solo tenemos especificar con qué sistema operativo vamos a hablar y NAPALM seleccionará el NetworkDriver correcto. Es decir, selecciona una librería con todas las funciones relacionadas con ese sistema operativo. Por ejemplo como podemos ver en el video de más arriba, a tráves de la función get_network_drivers() y pasándole el nombre del Sistema Operativo, NAPALM prepara la librería correcta para hablar con el dispositivo.

Si lo vemos desde otro punto de vista, básicamente es como tener API encima de otros APIs.

Instalación de NAPALM

Para instalar NAPALM necesitamos cumplir con los siguientes requerimientos:

  • Necesitaremos una máquina con el Sistema Operativo Linux. En mi caso utilizo la consola de Ubuntu para Windows 10.
  • Necesitamos tener instalado Python3.
  • PIP – Manejador de Paquetes de Librerías en Python.
  • Ambiente Virtual de Python(Opcional),

Una vez completado estos requerimientos, pasaremos a instalar NAPALM con el comando:

pip install napalm

Prueba de Funcionalidad

Utilicemos el siguiente código para probar que la librería está bien instalada y funcionando correctamente:

import napalm
def main():
    driver_ios = napalm.get_network_driver("ios")
    ios_router = driver_ios(
    hostname = "192.168.56.11",
    username = "codingnetworks",
    password = "codingnetworks"
    )
    print("Connecting to IOS Router...")
    ios_router.open()
    print("Checking IOS Router Connection Status:")
    print(ios_router.is_alive())
    ios_router.close()
    print("Test Completed")
if __name__ == "__main__":
    main()

Básicamente lo que hicimos en este código fue, primero, importamos la librería NAPALM, para poder utilizar todas las funciones que hay en ella. Creamos la función Main, dentro de la cual escribiremos nuestro código. Lo siguiente fue llamar al método get_network_driver pasandole el parametro “ios”, para que este nos retorne específicamente la clase que contiene el networkdriver del sistema operativo IOS. Con esta clase procedimos a crear una instancia objeto que controlará el router pasandole como parametros la IP, usuario y contraseña del router al que nos queremos conectar.

Con el objeto al cual llamamos “ios_router”, invocamos el método open() para iniciar la conexión hacia el router. Para validar que la conexión fue exitosa, llamamos al método is_alive() el cual como verán en la siguiente salida, arrojó la respuesta True, indicando que existe una conexión con el router.

Salida al correr el código:

Documentación NAPALM

Una de las principales fuentes de documentación para NAPALM es la página oficial de documentación del proyecto:

https://napalm.readthedocs.io

En esta página encontrarán mas detalles y tutoriales del proceso de instalación, ejemplos de programación. Podemos encontrar la lista completa de las funciones desarrolladas hasta el día de hoy para comunicarnos y obtener información de los dispositivos.

NAPALM puede ser integrado con plataformas de automatización como Ansible o Salt. La página de documentación ofrece información al respecto.

También si te gusta mucho el proyecto y quisieras convertirte en un programador contribuidor, al final del índice encontrarás la documentación de como contribuir al proyecto con nuevas funcionalidades o para resolver Bugs encontrados.

Conclusión

Hemos llegado al final de nuestro artículo de Introducción a NAPALM. En el próximo esto se pondrá mas interesante porque vamos a trabajar de lleno con routers con Cisco IOS y IOS-XR. Los detalles y la profundidad en la práctica la estaremos viendo en los videos del canal de YouTube de Coding Networks. Así que subscribanse, activen las notificaciones para que no se lo pierdan y continúen aprendiendo Programabilidad de Redes y Automatización.

By Michael Alvarez

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *