一、Nornir简介

Nornir是用python编写的自动化框架,可与python一起使用。相比另一个自动化大杀器ansible来讲,nornir操作更加的灵活,不受格式限制,于python结合可灵活操作,最最重要的是并发性完全秒杀ansible,但这不是说ansible一无是处,ansible依然强大,基础群众庞大,而nornir更适合操作网络设备。

Nornir旨在通过提供一个纯Python框架来解决这些问题。只需将Nornir想象成自动化的烧瓶。Nornir将负责处理您拥有主机信息的清单,它将负责将任务分派到您的设备,并将提供编写“插件”的通用框架。

Nornir要求安装Python 3.6.2或更高版本。

二、安装及插件

1)笔者建议使用vmware虚拟机安装一台centos7或8,详细的系统安装不在此说了,网上很多。

2)检查python版本,python --version,下载python3

可以访问python的官方网站查看最新的python版本以及下载链接:https://www.python.org/downloads/,将鼠标移到想要官网上想要下载的版本号上就可以看到下载地址,例如我需要在Linux下安装,可以使用这个链接:https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tgz(如果想要下载其他版本,直接修改版本号即可)。

找到下载地址后,在命令行输入:

# wget https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tgz

3)下载完成后解压缩

# tar -zxvf Python-3.8.5.tgz

进入解压缩后的目录,安装配置:

# cd Python-3.8.5/

# ./configure

执行 ./configure 时,如果报错:

configure: error: no acceptable C compiler found in $PATH

说明没有安装合适的编译器。这时,需要安装/升级 gcc 及其它依赖包。

# sudo apt-get install make gcc gcc-c++

完成之后,重新执行:

# ./configure

配置完成之后,就可以编译了:

# make

编译完成后,进行安装(安装时有的可能会因为权限问题报错,可以加上sudo):

# sudo make install

4)验证

安装成功以后,就可以查看 Python 的版本了:

# python -V

Python 2.7.5

# python3 -V

Python 3.8.5

5)pip3安装

安装方法:https://blog.csdn.net/qq_21153619/article/details/84635002

手动安装:

手动安装:

wget --no-check-certificate  https://pypi.python.org/packages/source/p/pip/pip-9.0.1.tar.gz#md5=3a73c4188f8dbad6a1e6f6d44d117eeb
tar -zxvf pip-9.0.1.tar.gz 
cd pip-9.0.1
python3 setup.py build
python3 setup.py install

6)安装nornir

pip3 install nornir

7)验证

8)关于插件

2.4 2.5的时候,很多东西都是内置的,但是3.0版本发生了很大的变化,官方把一些插件,分拆了出去,nornir变得更加纯粹了。比如以前的时候nornir支持netmiko和napalm等,现在统统分拆出去了,创建了新工具包,比如nornir_napalm就是nornir的一个对napalm封装,同样的也有nornir_netmiko,很多很多工具包都被这样分解出去了。有点像flask,它只提供最基础的web开发框架,如果想实现一些admin后台或者表单相关的,需要安装对应的flask工具包。

nornir的官方网站是https://nornir.tech/ 在https://nornir.tech/nornir/plugins/ 我们可以看到官方的插件list,插件list分成几种:任务类的、连接类的、资源管理类的、进程管理、函数功能等等,比如netmiko就是一个任务类和连接类的插件包

三、目录结构

上述是初始化nornir最简单使用方法,使用函数InitNornir,配置文件。

1)inventory:清单

主机清单,并没有一个特别准确事实标准的翻译,大家公认的叫法是这样。一个自动化框架里,或大或小,都需要有一个类似的设备管理模块,记录了我们维护的设备、型号、厂商、IP、用户名等等,在处理自动化的时候,通过设备名或者IP地址来对设备进行批量配置。

Nornir也有一个inventory的模块,它是有hosts(主机)、groups(组)和defaults(默认值)三部分组成,这三个概念的抽象以及用法的灵活,使nornir的设备清单管理异常强大,与网络的一些场景异常契合,简直秒杀ansible或者是其他的一些web自动化的框架。

2)plugin: SimpleInventory:官方默认的SimpleInventory加载

Nornir加载出设备清单,需要用到一个inventory的plugin类,它主要就是实现一个返回Inventory对象的功能load。Inventory就是由hosts、groups、defaults三个变量进行初始化的一个类。

3)options:指明变量及存在目录

Nornir内置了一个简单的主机清单类,它的方法是通过指定三个yaml文件(host_file group_file defaults_file),加载hosts、groups、defaults三个变量,然后返回一个Inventory类,进而实现设备的管理和灵活筛选,以及连接(ssh netconf等等)的建立。

4)runner:运行及并发

指定运行的方式threaded,比如默认的线程及并发量100,这个可以按设备性能自行更改。

5)整体目录结构

四、简单开始

1)在当前创建一个目录nornir

mkdir nornir

2)进入目录创建一个config.yaml配置文件

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

3)创建一个目录inventory

mkdir inventory

cd inventory

vim hosts.yaml   #编辑主机清单,我习惯不在主机内写太多东西,因为交换机比较多,很多只写一次全部放在另外两个变量内了

---
sw1:                                         # 主机名称,执行的时候抬头会显示
    hostname: 192.168.0.1      #主机地址
    groups:                               #组,关联组yaml内的switch这个变量
        - switch

vim groups.yaml

---
switch:
    platform: huawei              #设置平台类型,兼容netmiko和napalm
    data:                                  #设备的自定义相关参数变量,我这里用来标注位置及设备型号
        site: Core                      #方便日后过滤使用
        role: S5720

vim defaults.yaml           #这里我存放了用户名与密码

---
username: admin
password: admin123

4)返回nornir目录,创建nornir1.py脚本

vim nornir1.py

from nornir import InitNornir.      

#从nornir中导入InitNornir子类,InitNornir的作用是用来初始化nornir,是nornir下面最重要的一个子类。
from nornir_netmiko import netmiko_send_command    

#从nornir中导入netmiko,用于执行下发交换机命令
from nornir_utils.plugins.functions import print_result

#调用nornir_utils.plugins.functions中的print_result来将我们得到的设备信息打印出来。

nr = InitNornir(config_file="config.yaml")

#使用InitNornir()函数来初始化设备并将它赋值给变量nr。InitNonir()函数中需要放入config_file这个参数,针对这个参数这里我们使用的是前面提到的config.yaml这个文件, 后面的dry_run参数在调用nornir_napalm时必须设为True。
results = nr.run(netmiko_send_command, command_string='dis version')

#用netmiko的send_command函数向SW1和SW2执行display version 命令。

print_result(results)

#打印输出

另外除了netmiko_send_command外,我们还可以在nornir里面使用netmiko_send_config, netmiko_file_transfer, netmiko_save_config等函数,如下:

五、小试牛刀,统计所有交换机UP端口数

由于领导让统计交换机下所有端口up情况,计算平台up数,用于未来收费依据使用,所以代码如下:

vim hosts.yaml       #建好主机清单

vim nornir2.py

# coding=utf-8      #当有中文时,指定编码格式
from nornir import InitNornir   
from nornir_netmiko import netmiko_send_command
from nornir_utils.plugins.functions import print_result
from nornir.core.task import Task, Result     #使用task函数
import re      #导入正则表达式

nr  = InitNornir(config_file="config.yaml")
uplists = []    #建一个空列表

def backup(task:Task) -> Result:     #设置自定义函数
    cmds = ['dis int br | in up']            #命令列表
    max_loops = 180/0.2                     #设定最大超时时间
    for cmd in cmds:                            #循环输入命令
        result = task.run(netmiko_send_command, command_string=cmd, max_loops=max_loops)
        output = result.result                 #output对应result输出
        up = re.findall(r'GigabitEthernet', output)                     #正则表达式过滤Gi接口
        counter = up.count('GigabitEthernet')                            #计算gi数传输给counter
        print('当前交换机UP端口数:', counter)                    
        uplists.append(counter)                                         #循环计算出端口数之后向列表内添加

results = nr.run(task=backup)

sum = 0                                           #循环相加所有端口数
for i in uplists:
    sum += i
print('交换机UP总数是:', sum)

Nornir小试牛刀相关推荐

  1. Node.js开发WEB项目后端接口API,基于mysql5.7数据库(小试牛刀)

    项目结构 main.js(入口文件,开启9999端口监听,实现RESTful风格接口访问) const express = require("express"); const ap ...

  2. mongoose小试牛刀

    参考: Mongoose Networking Library Documentation 正文: 先展示一下小试牛刀的结果吧- 一. 首先在程序默认指定的端口上开启服务,在后台运行 ./http_c ...

  3. CSS学习18之小试牛刀

    小试牛刀 到现在为止,我们已经将css要学习的初级中级高级知识都已经学完了,接下来我们就应该对自己做一个小测验了,以下就是我的小测验,模拟qq会员官网的头部栏! 素材 bg.png背景图 logo.p ...

  4. Android开发之Retrofit小试牛刀

    感觉好久没有写Android的文章了,囧囧囧!因为Retrofit实在是太火了, 火得我一直跃跃欲试,但是由于种种原因吧,一直都没有用过.周末闲来无事,利用一个以前开发中用过的服务器API来小试牛刀一 ...

  5. MongoDB 小试牛刀

    MongoDb是不错的NoSQL数据库之一,NoSQL 的意思是Not Only SQL,比关系型数据库MySQL.SQL Server等更易于扩展,更多的应用于海量数据的存储,且数据可以弹性跨LAN ...

  6. 深度学习和目标检测系列教程 2-300:小试牛刀,使用 ImageAI 进行对象检测

    @Author:Runsen 对象检测是一种属于更广泛的计算机视觉领域的技术.它处理识别和跟踪图像和视频中存在的对象.目标检测有多种应用,如人脸检测.车辆检测.行人计数.自动驾驶汽车.安全系统等.Im ...

  7. C#位图BitArray 小试牛刀

    前面聊了布隆过滤器,回归认识一下位图BitMap,阅读前文的同学应该发现了布隆过滤器本身就是基于位图,是位图的一种改进. 难缠的布隆过滤器,这次终于通透了 位图 先看一个问题, 假如有1千万个整数,整 ...

  8. 05.SQL Server大数据群集小试牛刀--HDFS查询

    05.SQL Server大数据群集小试牛刀--HDFS查询 SQL Server大数据群集查询HDFS ,利用之前创建好的大数据群集,使用官方提供的测试数据进行测试.脚本是官方的脚本,要知道干了什么 ...

  9. Jenkins持续集成之小试牛刀

    关于Jenkins的安装,大家可以参考我的这两篇文章: Ubuntu16.04环境安装jenkins docker安装jenkins及其相关问题解决 之前没有好好研究过Jenkins,只是简单学会怎么 ...

最新文章

  1. 第五次作业:四则运算之升级
  2. 机器学习及其在信息检索中的应用
  3. shell实现批量在多台windows服务器上执行同一命令并获取返回结果
  4. 电脑启动后黑屏只有鼠标_电脑加装固态硬盘后出现黑屏或蓝屏解决方案
  5. ELK7.8.1的Docker搭建过程
  6. 一文入门网络编程:常见协议、通信过程、Socket、CS/BS、TCP/UDP
  7. Java双端队列Deque及其应用
  8. Pairs Forming LCM(素因子分解)
  9. win11如何禁用后台应用权限 Windows11禁用后台应用权限的设置方法
  10. ns2 java_【NS2】用eclipse调试NS2(转载)
  11. 【第52期】游戏策划:应聘的误区你信了几个?
  12. mdx词典包_不会用医学词典?停姐手把手教你啊(内附海量医学词典词库资源下载)...
  13. cisco 链路聚合 (自用)
  14. *ST东方A:山重水复疑无路 强烈推荐评级
  15. 计算机桌面分页,你的电脑桌面还会一团糟吗?这款软件可以帮你整理文件
  16. MFC对话框标题栏颜色自绘,标题栏由过渡色组成,自绘关闭按钮
  17. 【Neo4j × 知识图谱】图形化数据库基本操作: 创建节点与关系、添加属性、查询节点 | 附:可视化 构建四大名著 知识图谱(含源代码)| word2vec实战: 构造斗罗大陆人物关系
  18. LoRa的码片速率chip rate
  19. 打印表格打印机没有反应_打印机没反应如何解决?打印机连接正常但没反应怎么回事?...
  20. mongo update批量更新

热门文章

  1. IntelliJ IDEA 2019 常用设置
  2. HTML学习笔记8:表单
  3. 牛客网——字符串逆序
  4. 朱啸虎:创业公司不要一开始就想着教育市场
  5. 倒数日APP如何添加到OPPO手机桌面上显示
  6. Snipaste介绍、安装、使用技巧(截图贴图工具)
  7. 腾讯“扎篱笆”被打成筛子 一分钟内被黑客攻破
  8. 6个座位办公室最佳位置_6人办公室排座位怎么坐好
  9. python 如何安装PCV库
  10. ApowerREC免费使用