网站首页 > 博客文章 正文
我们之前的文章介绍了通过TextFSM模块来解析半格式化的文本数据,这边肯定有观众老爷会问:"我们自己写TextFSM模板太累了,有没有现成的简析模板可以拿过来用?",哈哈,答案是肯定的!ntc-templates模块就帮我们实现了这个功能,今天我们就一起来学习一下这个模块吧。
1、 模块介绍
ntc-templates模块是网络设备的TextFSM模板的存储库,它包含了400多个TextFSM解析模板,覆盖了世界上主流的网络设备(Cisco、Juniper、Arista、H3C等),如下所示:
1. [root@ templates]# ls -l
2. total 1660
3. -rw-r--r-- 1 root root 700 Apr 20 06:19 alcatel_aos_show_vlan.textfsm
4. -rw-r--r-- 1 root root 171 Apr 20 06:19 alcatel_sros_oam_mac-ping.textfsm
5. -rw-r--r-- 1 root root 434 Apr 20 06:19 alcatel_sros_show_router_bgp_routes_vpn-ipv4.textfsm
6. -rw-r--r-- 1 root root 544 Apr 20 06:19 alcatel_sros_show_service_id_base.textfsm
7. -rw-r--r-- 1 root root 371 Apr 20 06:19 arista_eos_bash_df_-h.textfsm
8. -rw-r--r-- 1 root root 430 Apr 20 06:19 arista_eos_dir_flash.textfsm
9. -rw-r--r-- 1 root root 121 Apr 20 06:19 arista_eos_show_boot-config.textfsm
10. -rw-r--r-- 1 root root 226 Apr 20 06:19 arista_eos_show_clock.textfsm
11. -rw-r--r-- 1 root root 524 Apr 20 06:19 arista_eos_show_environment_cooling.textfsm
12. -rw-r--r-- 1 root root 525 Apr 20 06:19 arista_eos_show_environment_temperature.textfsm
13. -rw-r--r-- 1 root root 107 Apr 20 06:19 arista_eos_show_hostname.textfsm
2、 模块安装
1. #ntc-templates模块安装非常简单,具体安装命令如下:
2. pip install ntc_templates
3. #如果出现'Read timed out'可以用阿里云镜像安装,具体命令如下:
4. pip install -i https://mirrors.aliyun.com/pypi/simple/ ntc_templates
安装好ntc_templates模块后我们可以到它的安装目录查看具体的模板信息,目录位置如下所示:
1. #ntc_templates位置
2. [root@ templates]# pwd
3. /usr/local/lib/python2.7/site-packages/ntc_templates/templates
4. [root@ templates]#
在目录中我们不难发现每个模板的命名都是由系统+命令组成,其实在该目录中存在一个index文件,该文件中我们就可以发现ntc_templates查找简析模板就是通过形参platform与command组合来映射查询的。
1. Template, Hostname, Platform, Command
2.
3. alcatel_aos_show_vlan.textfsm, .*, alcatel_aos, show vlan
4.
5. alcatel_sros_show_router_bgp_routes_vpn-ipv4.textfsm, .*, alcatel_sros, sh[[ow]] router bgp rou[[tes]] vpn-ipv4
6. alcatel_sros_show_service_id_base.textfsm, .*, alcatel_sros, sh[[ow]] serv[[ice]] id ba[[se]]
7. alcatel_sros_oam_mac-ping.textfsm, .*, alcatel_sros, oam mac-pi[[ng]]
8.
9. arista_eos_show_mac_security_participants_detail.textfsm, .*, arista_eos, sh[[ow]] ma[[c]] secu[[rity]] part[[icipants]] det[[ail]]
10. arista_eos_show_interfaces_transceiver_detail.textfsm, .*, arista_eos, sh[[ow]] inte[[rfaces]] tr[[ansceiver]] de[[tail]]
11. arista_eos_show_mac_security_mka_counters.textfsm, .*, arista_eos, sh[[ow]] ma[[c]] secu[[rity]] mk[[a]] count[[ers]]
12. arista_eos_show_environment_temperature.textfsm, .*, arista_eos, sh[[ow]] en[[vironment]] t[[emperature]]
13. arista_eos_show_interfaces_transceiver.textfsm, .*, arista_eos, sh[[ow]] inte[[rfaces]] tr[[ansceiver]]
3、 模块使用
1) 简单使用
现在我们就来看看ntc_templates的简单使用示例吧,上代码:
1. #!/usr/bin/env/ python
2. # -*- coding:utf-8 -*-
3.
4. from ntc_templates.parse import parse_output
5.
6. if __name__ == "__main__":
7. #设备板卡信息
8. device_info = ''' Type: S-Static D-Dynamic O-Openflow R-Rule M-Multiport I-Invalid
9. IP address MAC address VLAN/VSI Interface/Link ID Aging Type
10. 10.27.248.129 70f9-6df3-ac8d -- MGE0/0/0 892 D
11. 10.27.248.133 9428-2eb6-d810 -- MGE0/0/0 1152 D
12. 10.27.248.134 001c-54ff-2800 -- MGE0/0/0 451 D
13. 12.1.1.2 9428-2eb6-d834 -- XGE2/0/1 993 D
14. '''
15. #我们测试设备是H3C,这边platform值为"hp_comware",因为H3C之前有部分技术是HP的,在国际上H3C设备上好多是
16. #打着HP的品牌
17. datas = parse_output(platform='hp_comware', command='dis arp', data=device_info)
18. print(datas)
代码运行结果如下:
1. [root@ ~]# python ntc_test.py
2. [{u'macaddress': '70f9-6df3-ac8d', u'aging': '892', u'ipaddress': '10.27.248.129', u'vlan': '--', u'interface': 'MGE0/0/0', u'type': 'D'}, {u'macaddress': '9428-2eb6-d810', u'aging': '1152', u'ipaddress': '10.27.248.133', u'vlan': '--', u'interface': 'MGE0/0/0', u'type': 'D'}, {u'macaddress': '001c-54ff-2800', u'aging': '451', u'ipaddress': '10.27.248.134', u'vlan': '--', u'interface': 'MGE0/0/0', u'type': 'D'}, {u'macaddress': '9428-2eb6-d834', u'aging': '993', u'ipaddress': '12.1.1.2', u'vlan': '--', u'interface': 'XGE2/0/1', u'type': 'D'}]
3. [root@ ~]#
由于ntc_templates的parse_out方法会调用CliTable模块来读取index文件(如下所示),CliTable模块是调用unix的相关接口所以该模块目前不能运行在windows系统上,所以我们在linux平台上进行了演示,看到这部肯定有读者问那我们只有windows系统该怎么用,其实在我们之前讲的netmiko模块就已经嵌套了ntc_template的调用,该调用跳过了CliTable的使用,所以能够支持在windows平台运行ntc_templates的解析模板,下面让我一起来看看怎么使用吧。
1. def parse_output(platform=None, command=None, data=None):
2. """Return the structured data based on the output from a network device."""
3. template_dir = _get_template_dir()
4. #parse_output模块调用了CliTable接口导致不能在windows平台上运行
5. cli_table = clitable.CliTable("index", template_dir)
6.
7. attrs = {"Command": command, "Platform": platform}
8. try:
9. cli_table.ParseCmd(data, attrs)
10. structured_data = _clitable_to_dict(cli_table)
11. except clitable.CliTableError as e:
12. raise Exception(
13. 'Unable to parse command "{0}" on platform {1} - {2}'.format(
14. command, platform, str(e)
15. )
16. )
2) 结合netmiko的使用
好了,现在我们看看怎么在Netmiko中使用ntc_template模块吧,代码如下所示:
1. #!/usr/bin/env/ python
2. # -*- coding:utf-8 -*-
3.
4. import os
5. from netmiko import ConnectHandler
6.
7. #在netmiko中要使用ntc_templates的解析模板必须要设置NET_TEXTFSM环境变量,该变量的值应该指向
8. #ntc_templates的templates目录,为了省去设置环境变量的麻烦我们直接通过os.environ来加上需要设置的目录
9. #这边有个坑大家注意一下,如果设置的值不加'r'会导致'\ntc_templates'这边被转义换行导致始终找到不解析模板
10. os.environ["NET_TEXTFSM"] = r"D:\env\python3_env\Lib\site-packages\ntc_templates\templates"
11.
12. if __name__ == "__main__":
13. kwargs = {
14. "ip": "10.27.248.132",
15. "username": "suning",
16. "password": "suning",
17. "device_type": "hp_comware"
18. }
19.
20. ins = ConnectHandler(**kwargs)
21. #这边在调send_command时传参设置use_textfsm为True就会自动调用ntc_templates的简析模板进行解析
22. print(ins.send_command("dis arp", use_textfsm=True))
代码运行结果如下所示:
1. D:\env\python3_env\Scripts\python3.exe E:/文档/netmiko_test.py
2. [
3. {'ipaddress': '10.27.248.129', 'macaddress': '70f9-6df3-ac8d', 'vlan': '--', 'interface': 'MGE0/0/0', 'aging': '764', 'type': 'D'},
4. {'ipaddress': '10.27.248.133', 'macaddress': '9428-2eb6-d810', 'vlan': '--', 'interface': 'MGE0/0/0', 'aging': '1055', 'type': 'D'},
5. {'ipaddress': '10.27.248.134', 'macaddress': '001c-54ff-2800', 'vlan': '--', 'interface': 'MGE0/0/0', 'aging': '383', 'type': 'D'},
6. {'ipaddress': '12.1.1.2', 'macaddress': '9428-2eb6-d834', 'vlan': '--', 'interface': 'XGE2/0/1', 'aging': '895', 'type': 'D'}
7. ]
8.
9. Process finished with exit code 0
到此我们的ntc_template模块就讲解完毕了,结合枯燥加班狗发表的《玩转网络自动化之netmiko模块》与《玩转网络自动化之TextFSM模块》的文章,你会发现适配设备命令行的自动化之路就是这么简单,如果大家有什么问题欢迎大家在文章下面留言,最后读者老爷们不要忘了进行点击、收藏与转发哦!
--喜欢请点击@IT管理局关注哦--
本局精彩文章:
猜你喜欢
- 2024-10-31 英雄联盟手游错误代码100008什么原因?LOL手游错误代码解决办法
- 2024-10-31 C#程序与单片机通信时,如何自动初始化串口(2)?
- 2024-10-31 电机驱动_上位机_ModbusRTU通讯(伺服上位机)
- 2024-10-31 真实的线上故障处理案例(在线故障检测时应注意什么)
- 2024-10-31 问题反馈:为什么Cydia加载出现那么多红色错误?
- 2024-10-31 Norland诺兰德连接超时连接报错?一招解决连接问题
- 2024-10-31 处理超时订单(超时未付款)的解决方案
- 2024-10-31 第一后裔运行超时运行报错怎么办?一招解决运行问题
- 2024-10-31 基于 PTS 压测轻松玩转问题诊断(tps压测 指什么)
- 2024-10-31 DNS故障的几种常见原因及解决方法
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)