Nornir es un marco de orquestación de automatización basado en Python diseñado para simplificar la tarea de automatización de redes. Proporciona algunas operaciones básicas, como SSH, Telnet, HTTP y API para muchos dispositivos de red. En este artículo, presentaremos el uso básico del marco Nornir y algunos ejemplos comunes.
Instalar
Puede instalar el marco Nornir con el siguiente comando:
pip install nornir
uso
Aquí hay un ejemplo simple de código Nornir que imprime una lista de hosts:
from nornir import InitNornir
nr = InitNornir(config_file="config.yaml")
for host in nr.inventory.hosts.values():
print(host)
Debe proporcionar un archivo de configuración que le indicará al marco Nornir cómo conectar sus dispositivos de red. Aquí hay un archivo de configuración de ejemplo:
inventory:
plugin: SimpleInventory
options:
host_file: "hosts.yaml"
group_file: "groups.yaml"
credentials:
napalm:
username: "admin"
password: "admin"
runner:
plugin: threaded
options:
num_workers: 20
inventory
La sección le indica a Nornir cómo leer sus listas de anfitriones y grupos. En este ejemplo, utilizamos un complemento de inventario simple que utiliza un archivo con formato YAML para definir hosts y grupos.
credentials
La parte le dice a Nornir cómo conectarse al dispositivo. En este ejemplo, utilizamos el complemento napalm para conectarnos al dispositivo, por lo que debemos proporcionar el nombre de usuario y la contraseña que requiere el complemento napalm.
runner
La sección le dice a Nornir cómo ejecutar la tarea. En este ejemplo, utilizamos un complemento de subprocesos para ejecutar tareas en paralelo y configurar 20 subprocesos de trabajo.
ejemplo
Conéctese y obtenga información del dispositivo
El siguiente ejemplo de código demuestra cómo usar Nornir para conectarse a un dispositivo y obtener la información del dispositivo:
from nornir import InitNornir
from nornir.plugins.tasks.networking import napalm_get
nr = InitNornir(config_file="config.yaml")
result = nr.run(task=napalm_get, getters=["interfaces", "facts"])
for host, r in result.items():
print(f"Host: {host}")
print(f"Interfaces: {r[0].result['interfaces']}")
print(f"Facts: {r[1].result['facts']}")
En este ejemplo, utilizamos la tarea napalm_get para obtener la interfaz y la información básica del dispositivo.
Nornir admite la ejecución de tareas asincrónicas, implementadas mediante la biblioteca asyncio. A través de la biblioteca asyncio, podemos usar corrutinas para ejecutar tareas simultáneamente para mejorar la eficiencia de la ejecución.
A continuación se muestra un código de muestra que utiliza la ejecución de tareas asincrónicas:
import asyncio
from nornir import InitNornir
async def task1(task):
print(f"Task {task.task_id} starting")
await asyncio.sleep(2)
print(f"Task {task.task_id} ending")
async def main():
nr = InitNornir(config_file="config.yaml")
tasks = [task1 for host in nr.inventory.hosts.values()]
await asyncio.gather(*tasks)
if __name__ == "__main__":
asyncio.run(main())
En el ejemplo anterior, primero definimos una tarea asincrónica task1
, imprimimos el ID de la tarea en la tarea, luego esperamos 2 segundos y finalmente imprimimos el ID de la tarea nuevamente. Luego definimos una función principal main
, inicializamos Nornir en la función y usamos tareas asincrónicas para realizar múltiples task1
tareas. Finalmente, use el método en el programa principal asyncio.run
para ejecutar la función principal.
En el código anterior, utilizamos asyncio.gather
métodos para ejecutar todas las tareas al mismo tiempo. asyncio.gather
El método acepta múltiples corrutinas como parámetros, luego ejecuta estas corrutinas simultáneamente y espera a que se completen todas.
Resumir
Este artículo presenta el uso básico y el código de muestra del marco Python Nornir, incluida la inicialización de Nornir, la ejecución de tareas, el uso de grupos, el uso de filtros, el uso de datos dinámicos, el uso de complementos personalizados y el uso de complementos como SSH, Telnet y Netmiko. y utilizando tareas de ejecución asincrónicas, etc. A través de la introducción de este artículo, los lectores pueden aprender cómo utilizar el marco Nornir para la administración y configuración automatizadas de la red, y cómo ampliar la funcionalidad del marco a través de complementos Nornir y complementos personalizados.