IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Nornir小试牛刀 -> 正文阅读

[Python知识库]Nornir小试牛刀

一、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)

?

?

?

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 16:07:41  更:2021-07-15 16:08:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 9:51:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码