龙空技术网

网工的Python之路:Nornir3 + Textfsm

弈心 3364

前言:

此刻姐妹们对“pythonfsm”都比较注重,兄弟们都需要了解一些“pythonfsm”的相关知识。那么小编也在网络上搜集了一些对于“pythonfsm””的相关内容,希望我们能喜欢,姐妹们一起来了解一下吧!

版权声明:我已加入“维权骑士”的版权保护计划,知乎专栏“网路行者”下的所有文章均为我本人(知乎ID:弈心)原创,未经允许不得转载。

如果你喜欢我的文章,请关注我的知乎专栏“网路行者”, 里面有更多像本文一样深度讲解计算机网络技术的优质文章。

继续Nornir3.0.0的教程,今天来讲下Textfsm在Nornir3中的用法。Textfsm的功能和使用方法在我书里和专栏文章里有讲过,第一次接触的可以去看下《弈心:网络工程师的Python之路 -- TextFSM和ntc-template》这篇文章, 这里就不解释了,本篇只讲解下Textfsm在Nornir3中的用法,为下篇将要讲到的Nornir3 + ipdb做个铺垫,下面进入正文。

实验平台:

本文承接《弈心:网络工程师的Python之路 -- Nornir3.0.0》的内容,还是老规矩:一台CentOS 8主机(192.168.2.1)上跑Nornir,下面连上5台试验用的虚拟三层思科交换机IP从192.168.2.11到192.168.2.15。

实验目的:

使用Nornir3.0.0配合Textfsm来将思科IOS设备show interface switchport命令的回显内容用ntc-templates给出的模板将其以JSON的格式输入出来,

实验准备:

在Nornir中可以直接调用Textfsm,非常方便。Nornir中不需要我们自己用Textfsm手动写模板,它默认调用Network To Code团队打造的ntc-templates模板集,如果你是第一次接触TextFSM和ntc-templates,开始实验前需要先从github上下载ntc-templates模板集,命令如下:

git clone 

下载完成后,安装时所在目录下会多出一个ntc-templates的文件夹(ntc-templates文件夹可以保存在系统中的任意位置,没有强制规定必须和Nornir的三个基础YAML文件以及Python脚本放在一起)。

输入命令cd ntc-templates/templaces后即来到了ntc-templates模板集,截止2021年2月24日,ntc-templates下已有423个Textfsm模板,涵盖了Alcatel, Arista, Broadcom, Brocade, Cisco, Checkpoint, Dell, HP, H3C, Huawei, Juniper, Palo Alto, Ruckus, Yamaha等等近20个厂商设备的模板,其中仅思科一家就占了70%以上。读者可以根据自己的情况来找到相对应的各种show / display命令的模板,本文将以思科IOS设备的show interface switchport命令为例做演示。

一切准备就绪后,下面进入实验环节。

实验10:使用Nornir3.0.0 + TextFSM将命令回显内容以JSON格式输出

本文是Nornir3.0.0的系列教程,本篇的实验是该系列的第10个实验。开始实验前,回到包含 groups.yaml,defaults.yaml, config.yaml以及前面9个实验代码的文件夹下,首先我们把实验2中的脚本nornir2.py稍作修改,将其中的show clock改成show interface switchport,如下:

from nornir import InitNornirfrom nornir_netmiko import netmiko_send_commandfrom nornir_utils.plugins.functions import print_resultnr = InitNornir(config_file="config.yaml")results = nr.run(netmiko_send_command, command_string='sh interfaces switchport') print_result(results)

然后执行脚本nornir2.py,如下:

这里可以看到在思科IOS交换机上show interfaces switchport后的回显内容,可以看到对应的交换机的每个端口的信息量很大,虽然内容清晰、翔实,但是因为这类回显内容是无序的字符串,我们很难使用Python的re模块(正则表达式)对其中我们感兴趣的信息做解析,将它们提取出来,所以接下来我们要使用ntc-templates模板集下的cisco_ios_show_interfaces_switchport这个Textfsm模板来将该回显内容转换为有序的JSON格式。

在Nornir中使用Textfsm非常简单,这里我们另外创建一个Python脚本并将其取名为nornir10.py,然后将nornir2.py下面代码写入原封不动地复制/粘贴过来,然后只改动一处代码,即在第6行代码results = nr.run(netmiko_send_command, command_string='sh interfaces switchport') 最后面加上一个use_textfsm=True即可,如下:

from nornir import InitNornirfrom nornir_netmiko import netmiko_send_commandfrom nornir_utils.plugins.functions import print_resultnr = InitNornir(config_file="config.yaml")results = nr.run(netmiko_send_command, command_string='sh interfaces switchport', use_textfsm=True)print_result(results)

在nr.run()中调用use_textfsm参数后,Nornir会自动帮我们去按照command_string参数所对应的命令去匹配ntc-templates下相应的模板,比如这里我们在nr.run()里面使用的是command_string='sh interfaces switchport',那么Nornir会自动帮我们去ntc-templates下面调用cisco_ios_show_interfaces_switchport.textfsm这个模板将该命令的回显内容从无序的字符串格式转换成有序的JSON格式,非常方便。

运行脚本nornir10.py,效果如下:

知道怎么在Nornir中使用TextFSM后,下篇文章我将介绍如何在Nornir中使用ipdb这个模块来对上面得到的这组基于JSON格式、有序的回显内容数据做验证和调用,以便我们在代码中提取需要的内容和参数。

标签: #pythonfsm