|
大家好!我又来了!上篇我们已经对net_inspect轮子进行了初探,安排练习对回显成功进行了解析。这篇我们再继续推进一点。net_inspect是一个国内网工界自己开发的开源轮子,赞一个!此外,作者 @Elin 还开发了ntc_templates分仓ntc_templates_elinpf,旨在更好地适配国内厂商设备,同样也是一个国产轮子。这篇我们就一起来看看net_inspect配合ntc_templates_elinpf使用。
〇、参考资料
本专栏简介及目录入口,如果你不知道从何读起,建议从这篇《目录》开始,链接如下:
@弈心 大神教学文章、视频汇总,链接如下:
Net_inspect 模块代码已在github仓库发布,提供了正式的交流渠道,如提Issues等。
Net_inspect 模块作者 @Elin 自己也在知乎上撰写了该模块使用教程,链接如下:
一、虚拟环境搭建
1.1 为何虚拟环境
我们顺着@Elin 的net_inspect模块手册往下看,解析插件parse_plugin 用到了ntc_templates_elinpf模块。 这个模块同样是@Elin 开发与维护,为ntc-templates分仓,主要是为了更好地支持国内厂商设备的TextFSM解析。 关于ntc_templates_elinpf模块的官方资料见如下。

1.2 虚拟环境搭建
文档手册有这么一句表述,需要先卸载ntc_templates,再安装ntc_templates_elinpf。 我们如果不想卸载原先的ntc_templates的话,此时Python虚拟环境即可派上用场了。 关于Python虚拟环境的操作,可参考如下文章:
python -m venv venv_net_inspect # 创建虚拟环境

venv_net_inspect\Scripts\activate # 激活虚拟环境

如果对Pycharm情有独钟的话,可以联动Pycharm,这里我继续“朴实无华”地保持CMD和IDLE操作。
1.3 安装相应模块
pip freeze # 安装前可以先检查一下
pip install net_inspect -U # -U 表示更新到最新的发布版本
pip install ntc_templates_elinpf # 经观察,安装install net_inspect的过程会把ntc_templates_elinpf一并安装

net_inspect模块的更新频率还是比较高的,也说明了开发者目前比较活跃,大家要多用起来哈。在我写作本文的时候,他已从1.3.4更新至1.4.0 。
(venv_net_inspect) E:\>pip show net_inspect
Name: net-inspect
Version: 1.4.0
Summary: 基于已收集的网络设备信息进行的结构化数据分析框架
Home-page: https://github.com/Elinpf/net_inspect
Author: Elin
Author-email: 365433079@qq.com
License: Apache-2.0
Location: e:\venv_net_inspect\lib\site-packages
Requires: loguru, ntc_templates_elinpf, rich, rich_typer, textfsm
Required-by:
(venv_net_inspect) E:\>好滴,此时你拥有一个用于实验(或生产)的net_inspect专属虚拟环境。该环境与Python主环境和其它虚拟环境相互隔离,互不影响。

我们也可以到这个虚拟环境的文件夹中,浏览一下目录结构,此时的ntc_templates文件夹中已有不少国内厂商模板。
搭建后,我们可以把实验1的脚本拷贝过来跑一下。

lab1使用的是1.3.4,现在已经升级到1.4.0了,模块做了部分调整,此时我们收到提示,可以按照提示修改,把我们自己写代码修改一下。
net.run(path='log') | net.run(input_path='log') | 修改后再运行实验1的Python脚本就不会再报红字提示了。至此,我们的实验环境部署暂告一段落,继续推进!
二、配合 ntc_templates_elinpf 模板
我们跟着手册走到【进阶教程】,我们依然要查看display clock这个信息,这个在ntc_templates_elinpf 模板库中是有的。

那我们自然就可以直接调用,这里需要注意一下,官网手册在这里有“假设”字眼,后面其实是在描述,如果没有,我们可以自己弄这个模板。现在对应路径上有这个模板,我们就可以直接用。
2.1 实验文件夹

2.2 回显文本 SW-wgsy.log
我们准备一份回显文本,内容如下:
<SW-wgsy>display clock
2022-10-5 16:01:11+08:00
Tuesday
Time Zone(BeiJing) : UTC+08:00
<SW-wgsy>2.3 Python 脚本 lab2.py
我们把示例脚本再次简化,只保留华为的即可。
from net_inspect import NetInspect, vendor
net = NetInspect()
net.set_plugins(input_plugin=&#39;console&#39;)
net.run(input_path=&#39;log&#39;) # 1.4.0 版本的新参数形式。
print(&#39;total devices:&#39;, len(net.cluster.devices))
for device in net.cluster.devices:
info = device.info
clock = &#39;&#39;
if device.vendor == vendor.Huawei:
with device.search_cmd(&#39;display clock&#39;) as cmd:
if cmd.parse_result:
ps = cmd.parse_result[0]
clock = f&#34;{ps[&#39;year&#39;]}-{ps[&#39;month&#39;]}-{ps[&#39;day&#39;]} {ps[&#39;time&#39;]}&#34;
print(&#39; | &#39;.join([info.hostname, clock]))2.4 运行 Python 脚本
我们运行一下脚本lab2.py看看。

很遗憾,并没有出现官网示例的日期和时间内容。
2.5 调测 Python 脚本
我们在lab2.py加多一个print。(当然,我并不是马上就知道这么加的,我也是试来试去。)
...
for device in net.cluster.devices:
info = device.info
print(info) # 增加这一句
clock = &#39;&#39;
...再次运行!DefaultVendor字眼出来了。

以上表明net_inspect在回显文件的内容中并不能判断出设备厂商,所以出现了DefaultVendor ,于是后面代码if device.vendor == vendor.Huawei: 便不再运行了。因此,这样我们还不能得到期望结果。
2.6 修改回显文本 SW-wgsy.log
结合lab1,我们可以用display version来判断设备厂商。于是我们干脆把lab1的回显也放进来。
[SW-wgsy]DIS VER
Huawei Versatile Routing Platform Software
VRP (R) software, Version 5.150 (S5300 V200R005C00SPC500)
Copyright (C) 2000-2015 HUAWEI TECH CO., LTD
Quidway S5328C-EI Routing Switch uptime is 0 week, 6 days, 16 hours, 13 minutes
<SW-wgsy>display clock
2022-10-5 16:01:11+08:00
Tuesday
Time Zone(BeiJing) : UTC+08:00
<SW-wgsy>运行一下lab2.py。

成功解析,至此!复现了示例代码的效果。
三、配合本地textFSM模板
3.1 假设 ntc_templates_elinpf 中没对应模板
回到官网手册,现在假设假设解设ntc_templates_elinpf中没有模板,来个本地的textFSM模板仓库。怎么假设呢?我们就去对应文件夹中把这个文件删掉即可!我们把huawei_vrp_display_clock.textfsm这个文件剪切走,不要保留在\site-packages\ntc_templates\templates文件夹中。 为了等下方便,可以把它暂时放在其它路径保存好!

此时在再运行lab2.py就得不到解析结果了!请自行尝试。
3.2 准备本地 TextFSM 模板
原文这么说“要解决ntc_templates_elinpf中没有模板的问题,我们可以自己写一个本地的textFSM模板仓库,然后调用。”
3.3 实验文件夹
文件目录依然还有点复杂,我们再次精简成只有华为设备即可。
├── local_templates
│ ├── huawei_vrp_display_clock.textfsm
│ ├── index


3.4 回显文本 SW-wgsy.log 和 index 文件
与2.6步骤保持一致。
[SW-wgsy]DIS VER
Huawei Versatile Routing Platform Software
VRP (R) software, Version 5.150 (S5300 V200R005C00SPC500)
Copyright (C) 2000-2015 HUAWEI TECH CO., LTD
Quidway S5328C-EI Routing Switch uptime is 0 week, 6 days, 16 hours, 13 minutes
<SW-wgsy>display clock
2022-10-5 16:01:11+08:00
Tuesday
Time Zone(BeiJing) : UTC+08:00
<SW-wgsy>index文件可参考\site-packages\ntc_templates\templates文件夹中的index文件内容。
Template, Hostname, Platform, Command
huawei_vrp_display_clock.textfsm, .*, huawei_vrp, dis[[play]] clo[[ck]]3.5 Python 脚本 lab2.py
加多一句net.set_external_templates(&#39;local_templates&#39;),路径可自定义。
from net_inspect import NetInspect, vendor
net = NetInspect()
net.set_plugins(input_plugin=&#39;console&#39;)
net.set_external_templates(&#39;local_templates&#39;) # 调用本地模板库
net.run(input_path=&#39;log&#39;) # 1.4.0 版本的新参数形式。
print(&#39;total devices:&#39;, len(net.cluster.devices))
for device in net.cluster.devices:
info = device.info
# print(info) # 此处注释掉
clock = &#39;&#39;
if device.vendor == vendor.Huawei:
with device.search_cmd(&#39;display clock&#39;) as cmd:
if cmd.parse_result:
ps = cmd.parse_result[0]
clock = f&#34;{ps[&#39;year&#39;]}-{ps[&#39;month&#39;]}-{ps[&#39;day&#39;]} {ps[&#39;time&#39;]}&#34;
print(&#39; | &#39;.join([info.hostname, clock]))3.6 运行 Python 脚本

四、本文总结
ntc_templates_elinpf是ntc_templates的一个分仓,其使用的模块目录结构与ntc_templates是完全一致的。 这种情况下,为了兼顾原来的ntc_templates使用,虚拟环境就自然派上用场了。有时候,学习和实践就是这么巧,我在上篇文章写虚拟环境的时候,完全没想到这篇文章就用起来了。有意思!动起来,很多东西很奇妙!
我读过的书、用过的物(持续更新)
感谢阅读,欢迎关注点赞收藏评论交流。
发布2022年10月于广东汕头
更新2022年10月于广东汕头 |
|