NAPALM Huawei Devices
Network Programmability and AutomationPythonTutoriales

NAPALM Network Automation Python: Trabajando con Huawei VRP

Introducción

En este artículo vamos conocer las funciones y métodos de NAPALM para colectar datos en routers Huawei VRP. Escribiremos múltiples scripts en Python para colectar datos de una red, que podrás usar para crear reportes o investigar sobre algún problema. Este es una continuación del artículo en el que trabajamos con Cisco IOS y IOS-XR y es parte de la aventura en la que quiero enseñarles como puedes implementar Programabilidad y Automatización de Redes con Python y la librería NAPALM.

El contenido principal está en el siguiente video. Así que empieza por aquí para que puedas entender algunas secciones del artículo.

NAPALM Plugin: Huawei-CE

Como recordarán en la página oficial este Sistema Operativo VRP no sale listado como uno de los SO soportados por NAPALM. Este caso en particular es un desarrollo realizado por la comunidad. 

Los desarrollos de la comunidad son conocidos como Plugins de NAPALM porque no vienen en la librería oficial y no son mantenidos por los Core Developers. Pero sin son hosteados en una página común creada por ellos, llamada NAPALM Automation Community.

Para ver esa lista de Plugins primero entramos a la página de “napalm.readthedocs.io”, sección Contribuiting, Proposing a new driver,luego Community Driver y finalmente aquí encontraremos un link que nos llevará a la página donde está la colección de plugins desarrollados por la comunidad y validados por los Core Developers de NAPALM.

El plugin que vamos a utilizar para trabajar con los equipos Huawei se llama napalm-ce. A continuación los métodos soportados por este plugin:

cli(commands)
close()
commit_config()
compare_config()
discard_config()
get_arp_table()
get_config(retrieve=u'all')
get_environment()
get_facts()
get_interfaces()
get_interfaces_counters()
get_interfaces_ip()
get_lldp_neighbors()
get_mac_address_table()
get_users()
is_alive()
load_merge_candidate(filename=None, config=None)
load_replace_candidate(filename=None, config=None)
open()
ping(destination, source=u'', ttl=255, timeout=2, size=100, count=5, vrf=u'')
rollback()

Instalación del Plugin NAPALM-CE

Para instalar napalm-ce solo hay que ejecutar el siguiente comando:

pip install napalm-ce

NAPALM CLI

Como ya sabemos la instalación de NAPALM viene con una herramienta que nos permite utilizar NAPALM directamente desde la línea de comandos. Su uso es bastante simple y podemos ver como se utiliza en el menú de ayuda del comando.

Desde esta herramienta es posible ejecutar operaciones de configuración a los dispositivos, validar configuraciones o estados y realizar llamadas a los métodos de NAPALM para obtener datos de los dispositivos.

En esta ocasión vamos a utilizar esta herramienta para probar el Plugin Huawei-CE en uno de los switches de la red que vimos en el video.

Veamos un ejemplo:

napalm --user codingnetworks --password Coding.Networks1 --vendor ce VRP-SW2 call get_interfaces

Extracto de la Salida:

    "Vlanif1": {
        "description": " ",
        "is_enabled": true,
        "is_up": true,
        "last_flapped": -1.0,
        "mac_address": "70:7B:E8:66:35:99",
        "duplex": "",
        "speed": -1,
        "mtu": "1500",
        "port_bw": "",
        "rx_optic": "",
        "tx_optic": "",
        "crc_errors": ""
    },
    "Vlanif10": {
        "description": " ",
        "is_enabled": true,
        "is_up": true,
        "last_flapped": -1.0,
        "mac_address": "70:7B:E8:66:35:99",
        "duplex": "",
        "speed": -1,
        "mtu": "1500",
        "port_bw": "",
        "rx_optic": "",
        "tx_optic": "",
        "crc_errors": ""
    }

NAPALM Python

Es en esta sección es donde empezaremos a ver y disfrutar de las bondades de utilizar NAPALM para programabilidad y automatización de redes en los dispositivos Huawei.

NAPALM Python Tabla de Informaciones e Interfaces

Vamos a modificar el script que hicimos en el video Trabajando con Cisco IOS y IOS-XR para que nos imprima en una tabla informaciones como el hostname, fabricante, modelo, tiempo que tienen en operación y el número de serial de los dispositivos Huawei. A continuación el código modificado:

import napalm
from tabulate import tabulate
def main():
    driver_vrp = napalm.get_network_driver("ce")
    device_list = [["vrp-sw2","vrp", "switch"],["vrp-r2", "vrp", "router"],
    ["vrp-r3", "vrp", "router"],["vrp-r1", "vrp", "router"],["vrp-sw1", "vrp", "switch"]]
    network_devices = []
    for device in device_list:
            network_devices.append(
                            driver_vrp(
                            hostname = device[0],
                            username = "codingnetworks",
                            password = "Coding.Networks1"
                            )
                              )
    devices_table = [["hostname", "vendor", "model", "uptime", "serial_number"]]
    devices_table_int = [["hostname","interface","is_up", "is_enabled", "description", "speed", "mtu", "mac_address"]]
    
    for device in network_devices:
        print("Connecting to {} ...".format(device.hostname))
        device.open()
        print("Getting device facts")
        device_facts = device.get_facts()
        devices_table.append([device_facts["hostname"],
                              device_facts["vendor"],
                              device_facts["model"],
                              device_facts["uptime"],
                              device_facts["serial_number"]
                              ])
        print("Getting device interfaces")
        device_interfaces = device.get_interfaces()
        for interface in device_interfaces:
            devices_table_int.append([device_facts["hostname"],
                                  interface,
                                  device_interfaces[interface]['is_up'],
                                  device_interfaces[interface]['is_enabled'],
                                  device_interfaces[interface]['description'],
                                  device_interfaces[interface]['speed'],
                                  device_interfaces[interface]['mtu'],
                                  device_interfaces[interface]['mac_address']
        ])
        device.close()
        print("Done.")
    print(tabulate(devices_table, headers="firstrow"))
    print()
    print(tabulate(devices_table_int, headers="firstrow"))
if __name__ == '__main__':
    main()

En el video se encuentra la explicación de este código.

Veamos la salida del Script:

Connecting to vrp-sw2 ...
Getting device facts
Getting device interfaces
Done.
Connecting to vrp-r2 ...
Getting device facts
Getting device interfaces
Done.
Connecting to vrp-r3 ...
Getting device facts
Getting device interfaces
Done.
Connecting to vrp-r1 ...
Getting device facts
Getting device interfaces
Done.
Connecting to vrp-sw1 ...
Getting device facts
Getting device interfaces
Done.
hostname    vendor    model      uptime  serial_number
----------  --------  -------  --------  ---------------
VRP-SW2     Huawei    CE6800        240  []
VRP-R2      Huawei    NE40E         240  []
VRP-R3      Huawei    NE40E         240  []
VRP-R1      Huawei    NE40E         240  []
VRP-SW1     Huawei    CE6800        300  []

hostname    interface             is_up    is_enabled    description                      speed  mtu    mac_address
----------  --------------------  -------  ------------  -----------------------------  -------  -----  -----------------
VRP-SW2     GE1/0/0               True     True          To Cloud Management                 -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/1               True     True          to_VRP-R1 Eth 1/0/1 - LAN           -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/2               False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/3               True     True          to_PC1 - LAN                        -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/4               False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/5               False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/6               False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/7               False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/8               False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/9               False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/10              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/11              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/12              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/13              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/14              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/15              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/16              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/17              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/18              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/19              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/20              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/21              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/22              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/23              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/24              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/25              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/26              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/27              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/28              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/29              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/30              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/31              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/32              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/33              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/34              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/35              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/36              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/37              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/38              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/39              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/40              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/41              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/42              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/43              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/44              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/45              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/46              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/47              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     MEth0/0/0             False    True                                              -1  1500   70:7B:E8:66:35:98
VRP-SW2     NULL0                 True     True                                              -1  1500
VRP-SW2     Vlanif1               True     True                                              -1  1500   70:7B:E8:66:35:99
VRP-SW2     Vlanif10              True     True                                              -1  1500   70:7B:E8:66:35:99
VRP-R2      Ethernet1/0/0         False    True          to_VRP-SW2 GE 1/0/1 - LAN           -1  1500   38:1F:01:01:01:00
VRP-R2      Ethernet1/0/0.30      True     True          to_VRP-SW1 GE 1/0/0 - VLAN 30       -1  1500   38:1F:01:01:01:00
VRP-R2      Ethernet1/0/1         False    True                                              -1  1500   38:1F:01:01:01:01
VRP-R2      Ethernet1/0/2         True     True          to_VRP-R1 Eth 1/0/2 - LAN           -1  1500   38:1F:01:01:01:02
VRP-R2      Ethernet1/0/3         False    True                                              -1  1500   38:1F:01:01:01:03
VRP-R2      Ethernet1/0/4         False    True                                              -1  1500   38:1F:01:01:01:04
VRP-R2      Ethernet1/0/5         False    True                                              -1  1500   38:1F:01:01:01:05
VRP-R2      Ethernet1/0/6         False    True                                              -1  1500   38:1F:01:01:01:06
VRP-R2      Ethernet1/0/7         False    True                                              -1  1500   38:1F:01:01:01:07
VRP-R2      Ethernet1/0/8         False    True                                              -1  1500   38:1F:01:01:01:08
VRP-R2      Ethernet1/0/9         False    True                                              -1  1500   38:1F:01:01:01:09
VRP-R2      GigabitEthernet0/0/0  False    True                                              -1  1500   38:1F:01:01:11:10
VRP-R2      LoopBack0             True     True          to_VRP-SW2 GE 1/0/1 - VLAN 1        -1  1500
VRP-R2      NULL0                 True     True                                              -1  1500
VRP-R3      Ethernet1/0/0         True     True          to_VRP-R1 GE 1/0/0 - LAN            -1  1500   38:1F:01:03:01:00
VRP-R3      Ethernet1/0/1         False    True                                              -1  1500   38:1F:01:03:01:01
VRP-R3      Ethernet1/0/2         False    True                                              -1  1500   38:1F:01:03:01:02
VRP-R3      Ethernet1/0/3         False    True                                              -1  1500   38:1F:01:03:01:03
VRP-R3      Ethernet1/0/4         False    True                                              -1  1500   38:1F:01:03:01:04
VRP-R3      Ethernet1/0/5         False    True                                              -1  1500   38:1F:01:03:01:05
VRP-R3      Ethernet1/0/6         False    True                                              -1  1500   38:1F:01:03:01:06
VRP-R3      Ethernet1/0/7         False    True                                              -1  1500   38:1F:01:03:01:07
VRP-R3      Ethernet1/0/8         False    True                                              -1  1500   38:1F:01:03:01:08
VRP-R3      Ethernet1/0/9         False    True                                              -1  1500   38:1F:01:03:01:09
VRP-R3      GigabitEthernet0/0/0  False    True                                              -1  1500   38:1F:01:03:11:10
VRP-R3      LoopBack0             True     True          Management IP                       -1  1500
VRP-R3      LoopBack1             True     True          Management IP                       -1  1500
VRP-R3      NULL0                 True     True                                              -1  1500
VRP-R1      Ethernet1/0/0         True     True          to_VRP-R2 Eth 1/0/0 - LAN           -1  1500   38:1F:01:02:01:00
VRP-R1      Ethernet1/0/1         False    True          to_VRP-SW2 GE 1/0/1 - LAN           -1  1500   38:1F:01:02:01:01
VRP-R1      Ethernet1/0/1.1       True     True          to_VRP-SW2 GE 1/0/1 - VLAN 1        -1  1500   38:1F:01:02:01:01
VRP-R1      Ethernet1/0/1.10      True     True          to_VRP-SW2 GE 1/0/1 - VLAN 10       -1  1500   38:1F:01:02:01:01
VRP-R1      Ethernet1/0/2         True     True          to_VRP-R3 Eth 1/0/2 - LAN           -1  1500   38:1F:01:02:01:02
VRP-R1      Ethernet1/0/3         False    True                                              -1  1500   38:1F:01:02:01:03
VRP-R1      Ethernet1/0/4         False    True                                              -1  1500   38:1F:01:02:01:04
VRP-R1      Ethernet1/0/5         False    True                                              -1  1500   38:1F:01:02:01:05
VRP-R1      Ethernet1/0/6         False    True                                              -1  1500   38:1F:01:02:01:06
VRP-R1      Ethernet1/0/7         False    True                                              -1  1500   38:1F:01:02:01:07
VRP-R1      Ethernet1/0/8         False    True                                              -1  1500   38:1F:01:02:01:08
VRP-R1      Ethernet1/0/9         False    True                                              -1  1500   38:1F:01:02:01:09
VRP-R1      GigabitEthernet0/0/0  False    True                                              -1  1500   38:1F:01:02:11:10
VRP-R1      LoopBack0             True     True          to_VRP-SW2 GE 1/0/1 - VLAN 1        -1  1500
VRP-R1      NULL0                 True     True                                              -1  1500
VRP-SW1     GE1/0/0               True     True          to_VRP-R2 Eth 1/0/0 - LAN           -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/1               False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/2               False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/3               True     True          to_PC1 - LAN                        -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/4               False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/5               False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/6               False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/7               False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/8               False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/9               False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/10              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/11              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/12              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/13              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/14              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/15              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/16              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/17              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/18              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/19              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/20              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/21              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/22              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/23              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/24              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/25              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/26              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/27              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/28              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/29              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/30              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/31              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/32              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/33              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/34              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/35              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/36              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/37              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/38              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/39              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/40              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/41              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/42              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/43              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/44              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/45              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/46              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/47              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     MEth0/0/0             False    True                                              -1  1500   70:7B:E8:B0:04:A4
VRP-SW1     NULL0                 True     True                                              -1  1500
VRP-SW1     Vlanif30              True     True                                              -1  1500   70:7B:E8:B0:04:A5

NAPALM Python Tabla de Mac Addresess

Vamos a modificar el código anterior para agregar otra funcionalidad. Esta funcionalidad permitirá que el script nos imprima una tabla con la tabla mac addresses de los switches. A continuación el código:

import napalm
from tabulate import tabulate
def main():
    driver_vrp = napalm.get_network_driver("ce")
    device_list = [["vrp-sw2","vrp", "switch"],["vrp-r2", "vrp", "router"],
    ["vrp-r3", "vrp", "router"],["vrp-r1", "vrp", "router"],["vrp-sw1", "vrp", "switch"]]
    network_devices = []
    for device in device_list:
            network_devices.append(
                            driver_vrp(
                            hostname = device[0],
                            username = "codingnetworks",
                            password = "Coding.Networks1"
                            )
                              )
    devices_table = [["hostname", "vendor", "model", "uptime", "serial_number"]]
    devices_table_int = [["hostname","interface","is_up", "is_enabled", "description", "speed", "mtu", "mac_address"]]
    devices_mac_table = [["hostname","mac", "ïnterface", "vlan", "static"]]
    
    for device in network_devices:
        print("Connecting to {} ...".format(device.hostname))
        device.open()
        print("Getting device facts")
        device_facts = device.get_facts()
        devices_table.append([device_facts["hostname"],
                              device_facts["vendor"],
                              device_facts["model"],
                              device_facts["uptime"],
                              device_facts["serial_number"]
                              ])
        print("Getting device interfaces")
        device_interfaces = device.get_interfaces()
        for interface in device_interfaces:
            devices_table_int.append([device_facts["hostname"],
                                  interface,
                                  device_interfaces[interface]['is_up'],
                                  device_interfaces[interface]['is_enabled'],
                                  device_interfaces[interface]['description'],
                                  device_interfaces[interface]['speed'],
                                  device_interfaces[interface]['mtu'],
                                  device_interfaces[interface]['mac_address']
        ])
        if "SW" in device_facts["hostname"]:
            print("Getting Mac Address Table from Switch")
            device_mac_info = device.get_mac_address_table()
            for mac_entry in device_mac_info:
                devices_mac_table.append([device_facts["hostname"],
                                          mac_entry["mac"],
                                          mac_entry["interface"],
                                          mac_entry["vlan"],
                                          mac_entry["static"],                
                ])
        device.close()
        print("Done.")
    print(tabulate(devices_table, headers="firstrow"))
    print()
    print(tabulate(devices_table_int, headers="firstrow"))
    print()
    print(tabulate(devices_mac_table, headers="firstrow"))
if __name__ == '__main__':
    main()

En el video se encuentra la explicación de este código.

Veamos la salida de este código:

Connecting to vrp-sw2 ...
Getting device facts
Getting device interfaces
Getting Mac Address Table from Switch
Done.
Connecting to vrp-r2 ...
Getting device facts
Getting device interfaces
Done.
Connecting to vrp-r3 ...
Getting device facts
Getting device interfaces
Done.
Connecting to vrp-r1 ...
Getting device facts
Getting device interfaces
Done.
Connecting to vrp-sw1 ...
Getting device facts
Getting device interfaces
Getting Mac Address Table from Switch
Done.
hostname    vendor    model      uptime  serial_number
----------  --------  -------  --------  ---------------
VRP-SW2     Huawei    CE6800        240  []
VRP-R2      Huawei    NE40E         240  []
VRP-R3      Huawei    NE40E         240  []
VRP-R1      Huawei    NE40E         240  []
VRP-SW1     Huawei    CE6800        300  []

hostname    interface             is_up    is_enabled    description                      speed  mtu    mac_address
----------  --------------------  -------  ------------  -----------------------------  -------  -----  -----------------
VRP-SW2     GE1/0/0               True     True          To Cloud Management                 -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/1               True     True          to_VRP-R1 Eth 1/0/1 - LAN           -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/2               False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/3               True     True          to_PC1 - LAN                        -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/4               False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/5               False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/6               False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/7               False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/8               False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/9               False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/10              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/11              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/12              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/13              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/14              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/15              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/16              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/17              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/18              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/19              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/20              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/21              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/22              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/23              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/24              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/25              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/26              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/27              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/28              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/29              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/30              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/31              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/32              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/33              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/34              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/35              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/36              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/37              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/38              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/39              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/40              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/41              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/42              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/43              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/44              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/45              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/46              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     GE1/0/47              False    False                                             -1         70:7B:E8:66:35:99
VRP-SW2     MEth0/0/0             False    True                                              -1  1500   70:7B:E8:66:35:98
VRP-SW2     NULL0                 True     True                                              -1  1500
VRP-SW2     Vlanif1               True     True                                              -1  1500   70:7B:E8:66:35:99
VRP-SW2     Vlanif10              True     True                                              -1  1500   70:7B:E8:66:35:99
VRP-R2      Ethernet1/0/0         False    True          to_VRP-SW2 GE 1/0/1 - LAN           -1  1500   38:1F:01:01:01:00
VRP-R2      Ethernet1/0/0.30      True     True          to_VRP-SW1 GE 1/0/0 - VLAN 30       -1  1500   38:1F:01:01:01:00
VRP-R2      Ethernet1/0/1         False    True                                              -1  1500   38:1F:01:01:01:01
VRP-R2      Ethernet1/0/2         True     True          to_VRP-R1 Eth 1/0/2 - LAN           -1  1500   38:1F:01:01:01:02
VRP-R2      Ethernet1/0/3         False    True                                              -1  1500   38:1F:01:01:01:03
VRP-R2      Ethernet1/0/4         False    True                                              -1  1500   38:1F:01:01:01:04
VRP-R2      Ethernet1/0/5         False    True                                              -1  1500   38:1F:01:01:01:05
VRP-R2      Ethernet1/0/6         False    True                                              -1  1500   38:1F:01:01:01:06
VRP-R2      Ethernet1/0/7         False    True                                              -1  1500   38:1F:01:01:01:07
VRP-R2      Ethernet1/0/8         False    True                                              -1  1500   38:1F:01:01:01:08
VRP-R2      Ethernet1/0/9         False    True                                              -1  1500   38:1F:01:01:01:09
VRP-R2      GigabitEthernet0/0/0  False    True                                              -1  1500   38:1F:01:01:11:10
VRP-R2      LoopBack0             True     True          to_VRP-SW2 GE 1/0/1 - VLAN 1        -1  1500
VRP-R2      NULL0                 True     True                                              -1  1500
VRP-R3      Ethernet1/0/0         True     True          to_VRP-R1 GE 1/0/0 - LAN            -1  1500   38:1F:01:03:01:00
VRP-R3      Ethernet1/0/1         False    True                                              -1  1500   38:1F:01:03:01:01
VRP-R3      Ethernet1/0/2         False    True                                              -1  1500   38:1F:01:03:01:02
VRP-R3      Ethernet1/0/3         False    True                                              -1  1500   38:1F:01:03:01:03
VRP-R3      Ethernet1/0/4         False    True                                              -1  1500   38:1F:01:03:01:04
VRP-R3      Ethernet1/0/5         False    True                                              -1  1500   38:1F:01:03:01:05
VRP-R3      Ethernet1/0/6         False    True                                              -1  1500   38:1F:01:03:01:06
VRP-R3      Ethernet1/0/7         False    True                                              -1  1500   38:1F:01:03:01:07
VRP-R3      Ethernet1/0/8         False    True                                              -1  1500   38:1F:01:03:01:08
VRP-R3      Ethernet1/0/9         False    True                                              -1  1500   38:1F:01:03:01:09
VRP-R3      GigabitEthernet0/0/0  False    True                                              -1  1500   38:1F:01:03:11:10
VRP-R3      LoopBack0             True     True          Management IP                       -1  1500
VRP-R3      LoopBack1             True     True          Management IP                       -1  1500
VRP-R3      NULL0                 True     True                                              -1  1500
VRP-R1      Ethernet1/0/0         True     True          to_VRP-R2 Eth 1/0/0 - LAN           -1  1500   38:1F:01:02:01:00
VRP-R1      Ethernet1/0/1         False    True          to_VRP-SW2 GE 1/0/1 - LAN           -1  1500   38:1F:01:02:01:01
VRP-R1      Ethernet1/0/1.1       True     True          to_VRP-SW2 GE 1/0/1 - VLAN 1        -1  1500   38:1F:01:02:01:01
VRP-R1      Ethernet1/0/1.10      True     True          to_VRP-SW2 GE 1/0/1 - VLAN 10       -1  1500   38:1F:01:02:01:01
VRP-R1      Ethernet1/0/2         True     True          to_VRP-R3 Eth 1/0/2 - LAN           -1  1500   38:1F:01:02:01:02
VRP-R1      Ethernet1/0/3         False    True                                              -1  1500   38:1F:01:02:01:03
VRP-R1      Ethernet1/0/4         False    True                                              -1  1500   38:1F:01:02:01:04
VRP-R1      Ethernet1/0/5         False    True                                              -1  1500   38:1F:01:02:01:05
VRP-R1      Ethernet1/0/6         False    True                                              -1  1500   38:1F:01:02:01:06
VRP-R1      Ethernet1/0/7         False    True                                              -1  1500   38:1F:01:02:01:07
VRP-R1      Ethernet1/0/8         False    True                                              -1  1500   38:1F:01:02:01:08
VRP-R1      Ethernet1/0/9         False    True                                              -1  1500   38:1F:01:02:01:09
VRP-R1      GigabitEthernet0/0/0  False    True                                              -1  1500   38:1F:01:02:11:10
VRP-R1      LoopBack0             True     True          to_VRP-SW2 GE 1/0/1 - VLAN 1        -1  1500
VRP-R1      NULL0                 True     True                                              -1  1500
VRP-SW1     GE1/0/0               True     True          to_VRP-R2 Eth 1/0/0 - LAN           -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/1               False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/2               False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/3               True     True          to_PC1 - LAN                        -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/4               False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/5               False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/6               False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/7               False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/8               False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/9               False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/10              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/11              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/12              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/13              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/14              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/15              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/16              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/17              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/18              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/19              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/20              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/21              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/22              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/23              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/24              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/25              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/26              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/27              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/28              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/29              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/30              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/31              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/32              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/33              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/34              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/35              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/36              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/37              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/38              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/39              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/40              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/41              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/42              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/43              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/44              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/45              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/46              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     GE1/0/47              False    False                                             -1         70:7B:E8:B0:04:A5
VRP-SW1     MEth0/0/0             False    True                                              -1  1500   70:7B:E8:B0:04:A4
VRP-SW1     NULL0                 True     True                                              -1  1500
VRP-SW1     Vlanif30              True     True                                              -1  1500   70:7B:E8:B0:04:A5

hostname    mac                ïnterface      vlan  static
----------  -----------------  -----------  ------  --------
VRP-SW2     0A:00:27:00:00:19  GE1/0/0           1  False
VRP-SW2     38:1F:01:02:01:01  GE1/0/1           1  False
VRP-SW2     38:1F:01:02:01:01  GE1/0/1          10  False
VRP-SW1     38:1F:01:01:01:00  GE1/0/0          30  False

Conclusión

¿No les parece todo esto sorprendente? Hemos visto nuevamente como con tan pocos códigos podemos obtener tantas informaciones de una red y presentarlas así en una tabla, resumida, fácil de leer y entender. Con esas pocas funciones puedes hacer un levantamiento de toda tu red, ver que está conectado a todos tus switches,  a tus routers. 

Si hay un problema en tu red puedes rápidamente ver si hay interfaces Down que no deberían estar Down, ver si los switches dejaron de aprenderse alguna MAC Address. 

El tiempo que te tomas en conectarse por CLI a todos estos dispositivos para obtener esta información e interpretarla se reduce en más de un 100% cuando lo haces aplicando Programabilidad de Redes.

By Michael Alvarez