| |
|
开发:
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
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配置文件 --- 3)创建一个目录inventory ? ? mkdir inventory ? ? cd inventory ? ? vim hosts.yaml ? #编辑主机清单,我习惯不在主机内写太多东西,因为交换机比较多,很多只写一次全部放在另外两个变量内了 --- ? ? ?vim groups.yaml --- ? ? ? vim defaults.yaml ? ? ? ? ? #这里我存放了用户名与密码? ? ? ? --- 4)返回nornir目录,创建nornir1.py脚本 ? ? ? ?vim?nornir1.py ? from nornir import InitNornir. ? ? ? #从nornir中导入InitNornir子类,InitNornir的作用是用来初始化nornir,是nornir下面最重要的一个子类。 #从nornir中导入netmiko,用于执行下发交换机命令 #调用nornir_utils.plugins.functions中的print_result来将我们得到的设备信息打印出来。 nr = InitNornir(config_file="config.yaml") #使用InitNornir()函数来初始化设备并将它赋值给变量nr。InitNonir()函数中需要放入config_file这个参数,针对这个参数这里我们使用的是前面提到的config.yaml这个文件, 后面的dry_run参数在调用nornir_napalm时必须设为True。 #用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 ? ? ?#当有中文时,指定编码格式 nr ?= InitNornir(config_file="config.yaml") def backup(task:Task) -> Result: ? ? #设置自定义函数 results = nr.run(task=backup) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? sum = 0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #循环相加所有端口数 ? ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年12日历 | -2024/12/25 14:49:54- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |