大半年没更新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文件。