注:本文借鉴了 @萝卜橙子西红柿 的文章,链接如下:萝卜橙子西红柿:华为交换机Nornir+TextFSM自动化巡检输出excel报告
需求:通过python自动化巡检华为交换机,然后将交换机的display interface description命令输出的内容写入到excel中
思路:
1、通过nornir遍历交换机输出display interface description命令的内容
2、通过textfsm筛选出想要的内容
3、将筛选出的内容写入excel表中
正文:
1、代码部分
其他文件可以参考之前的文章J-Hidden:textfsm+netmiko+nornir(MAC版本),例如hosts.yaml以及config.yaml设置。
左侧是生成的excel文件,右侧为代码部分
因为我是企业网络,可利用交换机只有十几台(堆叠后算一台),其他都是傻瓜交换机。所以不能将nornir的能力发挥极致,设备多的朋友可以试一试
运行结果,时间为12秒
打开excel文件检查下结果看看
可以看到已经实现了我们的要求
代码处容易出现的坑:
1、当初在写excel保存的文件名时,也就是这一句
df.to_excel(file_time + '_' + f'{task.host.hostname}'+'.xlsx', sheet_name=f'{task.host.name}', index=False)
当时写的是
df.to_excel(file_time + '/' + f'{task.host.hostname}'+'.xlsx', sheet_name=f'{task.host.name}', index=False)
会报错,提示文件不存在。但是当时想的是我需要保存的文件,为什么要先生成文件夹呢?
其实原因是/,‘/’在路径中其实代表目录的分解符,当写入/的时候他就认为是需要保存在filename的文件夹下,找不到自然会显示不存在,解决办法可以是写成我上面那一种,也可以在代码前先新建一个file_name的文件夹
问题:有答案的可以提供下
虽然现在写出来一帆风顺,但是中间还是有几个问题任然没有解决,如果有好的方法的同学可以在评论区讨论下
1、在使用nornir_netmiko的时候,output = task.run(netmiko_send_command, command_string='display interface description', use_textfsm=True) 这一句会把循环默认执行了,无法把生成excel的代码插入,所以当时在这卡了很久。后面还是选择单独的netmiko模块