Nornir初识-1


大半年没更新blog了,最近关注了下NetDevops,也就是网络的Devops,从而了解到Nornir。

简单来说Nornir就是网络版的Ansible,不过Nornir的效率完全是秒杀和吊打Ansible的存在(虽然两者都支持多线程并发,但是处理1万台设备,Ansible需要2300秒,Nornir只需要17秒,处理5000台设备Ansible需要900秒,Nornir只需要9秒,差距之大让你怀疑这俩根本不是一个量级的产品。)

Nornir当前3.1.1版本,插件化设计,创建几个yaml配置文件就能跑起来,属实牛逼。默认多线程的并发,相比asyncio又简单许多。

config.yaml

---
inventory:
    plugin: SimpleInventory
    options:
        host_file: "hosts.yaml"
        group_file: "groups.yaml"
        defaults_file: "defaults.yaml"
runner:
    plugin: threaded
    options:
        num_workers: 100

defaults.yaml

---
username: python
password: '123'

groups.yaml

---
huawei:
    platform: huawei_vrpv8

h3c:
    platform: hp_comware

hosts.yaml

---
sw1:
    hostname: 192.168.11.11
    groups:
        - huawei
sw2:
    hostname: 192.168.11.12
    groups:
        - h3c

playbook.py

from nornir import InitNornir
from nornir_netmiko import netmiko_send_command
from nornir_utils.plugins.functions import print_result

nr = InitNornir(config_file="config.yaml")
results = nr.run(netmiko_send_command, command_string='display clock')
print(type(results))
print(results)
print_result(results)

虽然nr模块确实非常好用,但从实践的角度我发现一个问题,就是从现有的资料来看并不适合大规模跑批操作,因为网上分享的内容(包括官方案例)都有一个问题,就是nr模块强依赖hosts.yaml这个文件,看来接下来主要是需要将设备信息从数据库读出来再写入yaml文件。