97国际

不必推倒重修 ,老终端也能焕新 丨 97国际教育云电脑老客户升级分享会
预约直播
融合光加速 ,慧联全场景 丨 97国际极简以太彩光5.0 界说万兆园区全场景新范式
预约直播
97国际·(中国区)集团官方网站
产品
< 返回主菜单
产品中心
产品
解决计划
< 返回主菜单
解决计划中心
行业
合作伙伴
返回主菜单
选择区域/语言
97国际·(中国区)集团官方网站

您订阅的产品有更新 ,请实时查阅

审查详情
97国际·(中国区)集团官方网站 97国际·(中国区)集团官方网站

基于Python TextFSM�?榈耐缱氨缸远宋�

本文将给各人先容一种主流的基于CLI下令行登录的自动化运维实践案例 ,希望能够给各人带来资助。

  • 97国际·(中国区)集团官方网站

    宣布时间:2021-03-04

  • 97国际·(中国区)集团官方网站

    点击量:

  • 97国际·(中国区)集团官方网站

    点赞:

分享至

97国际·(中国区)集团官方网站
97国际·(中国区)集团官方网站
97国际·(中国区)集团官方网站

我想谈论

97国际·(中国区)集团官方网站

本文作者:kevinwoo

97国际网络手艺服务部互联网服务中心

 

随着云盘算和SDN手艺的生长 ,数据中心规模越来越大 ,而网络架构逐渐向“去堆叠”、“去框”式生长 ,这就意味着需要维护的交流机数目在成倍的增添。随着网络维护规模越来越大 ,运维职员压力也成倍增添 ,依赖古板的人工维护已不太现实 ,工具化、自动化运维势在必行。这就需要运维职员具备一定编程能力 ,从而通过软件取代古板的人工维护。网络自动化运维理念团结软件开发领域DevOps理念而爆发的NetDevOps看法已逐渐被网络运维界所接受。

网络自动化运维 ,首先要实现网络装备与自动化运维平台对接 ,即通过代码实现登录网络装备并获守信息。现在常见毗连装备的要领有模拟古板的Telnet/SSH下令登录、NETCONF、gRPC、OpenFlow协议对接等等。


为了跟上SDN的生长趋势 ,各个古板网络装备厂商已逐渐开放API接口 ,较量有代表性的是NETCONF和YANG模子对网络装备的设置和信息输出的数据结构化界说。现在97国际数据中心交流机产品已周全支持NETCONF协议 ,可适用于和SDN控制器或运维平台的南向接口对接。而面临网络工程师在操作网络装备时习惯于使用CLI下令行的现状 ,又有什么样的案例实践呢?


本文将给各人先容一种主流的基于CLI下令行登录的自动化运维实践案例 ,希望能够给各人带来资助。


基于CLI的自动化运维带来的问题

 

CLI(Command-Line Interface)是古板网络工程师最熟悉的与网络装备“相同”的方法 ,工程师最初学习网络课程就是要熟悉种种协议的下令行设置、调试。工程师在一样平常事情中需要团结下令行输出效果举行排错 ,甚至在网络割接和变换的场景中 ,需要将变换的操作办法细化到每一条下令。相比NETCONF等API接口 ,CLI下令行通常支持的内容越发富厚、无邪。以是在实现网络自动化运维的历程中 ,基于CLI的自动化是容易被古板网络工程师所接受和执行的。


随着Python语言在近些年的快速生长 ,涌现了一批基于Python的优异开源�?� ,好比Ansible、Paramiko、Netmiko、Pexpect等。网络工程师现在可以编写简短的Python剧本就能挪用这些�?槭迪峙康锹甲氨钢葱芯绫� ,可是随之而来的另一个头痛的问题是古板的下令行输出效果通常是凭证适合人类阅读的方法来泛起的。好比“show”下令的输出效果包括了大宗的空格、缩进、换行等 ,并且许多下令还保存上下文关联性。这些下令行输出效果通常无法被盘算机很好地识别 ,盘算机更善于识别XML、JSON、YAML等结构化数据类型 ,以是网工在编写Python剧本时不得不写一堆正则表达式去“抠”要害参数 ,然而使用重大的正则表达式又进一步导致代码可维护性较差。


下面以交流机最基础的审查VLAN下令为例举行说明。如下图所示是通过“show vlan”下令的输出效果 ,关于统一个VLAN可能会保存多个端口同时放行的情形。关联的接口数目凌驾一定命目时 ,输出的效果将会拆分成多行显示 ,此时 ,VLAN信息只在第一行显示 ,后续几行内容需要与第一行举行关联匹配才华获得准确的输出信息。此时若是需要读取某个VLAN关联的所有端口号列表 ,使用古板的正则表达式就需要多次挪用正则表达式并配合循环逻辑判断才华实现 ,整个历程很是繁琐。

97国际·(中国区)集团官方网站


Python通例的数据类型主要是列表或字典名堂 ,若是有工具能够将装备的上面的输出效果直接转化为Python适配的数据类型(如下图) ,那么就可以直接使用Python举行处置惩罚。

 

97国际·(中国区)集团官方网站


下面就要盛大先容一下本文问题中提到的TextFSM�?� ,它就是用于结构化输出文本的一个神奇工具。


TextFSM�?橄热�

 

TextFSM是Google开发的一种开源Python�?� ,可以基于模板的状态机来剖析半名堂化文本 ,从而实现对网络装备CLI输出信息举行结构化数据处置惩罚 ,最终将文本内容输出为Python的字典或列表名堂(或者是两者组合)。


详细内容可以会见该�?榈腉itHub:https://github.com/google/textfsm。


例如 ,上文中需要将“show vlan”下令的输出效果举行剖析 ,可以通过挪用下面的TextFSM模板将下令输出举行名堂化:

97国际·(中国区)集团官方网站


ruijie-templates�?橄热�

 

虽然有了TextFSM�?槟芄蛔龅浇峁够饰鑫谋拘畔� ,可是每个厂家的CLI输出内容差别较大 ,需要每条下令都有响应的模板来适配 ,导致运维职员还需要投入大宗时间去编写响应的模板。ntc-templates�?榫褪俏嗍毒稣飧鐾吹憬瞪�。ntc-templates�?槭怯蒼etworktocode团队开发的Python�?� ,该�?榛赥extFSM开发 ,它内置了快要400个TextFSM模板 ,可以适配主流厂商的CLI输出效果。


详细可参考该�?榈腉itHub主页:


https://github.com/networktocode/ntc-templates

 

ntc-templates�?槟谥昧薸ndex文件 ,将种种厂商平台和show下令映射到响应的TextFSM模板文件 ,每个厂商的差别下令都对应着一个自力的模板。我们在ntc-templates�?榈幕∩� ,开发了基于97国际数据中心交流机产品的模板库:ruijie-templates。ruijie-templates模板库是基于TextFSM规则开发 ,用于适配ntc-templates�?� ,可以无缝衔接Netmiko�?槭褂�。ruijie-templates�?榭梢越�97国际数据中心交流机CLI内容举行结构化输出 ,输出效果可以直接用于Python剧本使用。该�?榫啥喔�97国际主流数据中心交流机版本测试 ,笼罩RG-S6510、RG-S6520、RG-S6910、RG-S6920、RG-N18000-X系列[权5] 产品 ,现在已支持近50条常用下令剖析 ,后续会逐步更新完善 ,敬请关注。现在ruijie-templates代码已托管至GitHub:https://github.com/kevinkrabi/ruijie-templates

下面先容一下ruijie-templates�?槭褂靡�。


ruijie-templates�?槭褂靡�

 

装置要领

 

前置条件:装置TextFSM库和ntc-templates库

要领一:将ruijie-templates并入ntc-templates模板库(推荐)

要领二:自力使用ruijie-templates库 ,需要设置情形变量 ,相对重大(不推荐)
推荐使用要领一将本模板库合并入ntc-templates�?槭褂� ,详细操作办法如下:


下载模板库

 

git clone git@github.com:kevinkrabi/ruijie-templates.git

模板文件导入ntc-templates

将templates目录下的所有TextFSM文件导入ntc-templates库的templates目录。


以macOS为例:


cp*.textfsm Library/Frameworks/Python.framework/Versions/3.6/lib/Python3.6/site-packages/ntc_templates/templates//index

 

添加index信息

 

以macOS为例 ,index文件所在路径为:

Library/Frameworks/Python.framework/Versions/3.6/lib/Python3.6/site-packages/ntc_templates/templates/index

 

找到index文件后用文本编辑软件翻开 ,将以下内容所有复制粘贴到原始文件末尾即可。

注重:由于ntc-templates模板库匹配原则 ,为阻止异常情形 ,以下index条目不建议调解顺序!

97国际·(中国区)集团官方网站

 

案例一:使用Netmiko登录装备获取输出信息

 

说明

该案例使用Netmiko模拟CLI自动化登录一台装备 ,读取要害信息并输出效果。


Netmiko是基于Paramiko开发的专门用于适配网络装备的开源Python库 ,Netmiko同时集成了TextFSM情形 ,现在最新版本Netmiko(3.3.3)已支持97国际产品 ,device_type参数:ruijie_os


测试目的

使用Netmiko登录装备 ,通过执行“show int count rate up”下令获取装备输出信息 ,并将效果以字典方法输出。

 

97国际·(中国区)集团官方网站

 

实现代码

 

97国际·(中国区)集团官方网站

注重要害字:device_type': 'ruijie_os' ,use_TextFSM=True

 

实现效果

 

97国际·(中国区)集团官方网站

 

案例二:使用ntc-teamplates将文本结构化输出

 

说明

该案例使用ntc-templates�?� ,对文本内容举行结构化输出。

 

测试目的

以下图中BGP路由表为例 ,需要对“show ip bgp”下令执行效果举行结构化输出。

97国际·(中国区)集团官方网站

 

实现代码

97国际·(中国区)集团官方网站

注重要害字:platform='ruijie_os'

 

实现效果

97国际·(中国区)集团官方网站

 

写在最后

本文先容了网络自动化运维的问题息争决计划 ,并团结两个案例先容了ruijie-template�?榈墓πб约笆褂靡� ,感兴趣的读者可以参考案例下载测试 ,目今的下令数目还不可知足所有营业场景 ,如您有更好的建媾和意见可以留言 ,希望这个�?榭梢宰手接姓夥矫嫘枨蟮呐筚�。


附录

 

本文中先容的相关�?镚itHub地址:

ruijie-template:https://github.com/kevinkrabi/ruijie-templates

TextFSM:https://github.com/google/textfsm

ntc-templates:https://github.com/networktocode/ntc-templates

Netmiko:https://github.com/ktbyers/Netmiko

相关推荐:

相关标签:

97国际·(中国区)集团官方网站 97国际·(中国区)集团官方网站

点赞

更多手艺博文

任何需要 ,请联系97国际

97国际·(中国区)集团官方网站

返回顶部

收起
97国际·(中国区)集团官方网站 文档AI助手
97国际·(中国区)集团官方网站 文档评价
资料内容是否对您有资助?
您对目今页面的知足度怎样?
不咋滴
很是好
您知足的缘故原由是(多�。�?
您对文档是否尚有其它的问题或建议?
为尽快解决问题 ,请您留下联系方法以便回复
邮箱
手机号
谢谢您的反�。�
97国际·(中国区)集团官方网站
97国际·(中国区)集团官方网站
97国际·(中国区)集团官方网站
请选择服务项目
关闭咨询页
售前咨询 售前咨询
售前咨询
售后服务 售后服务
售后服务
意见反响 意见反响
意见反响
更多联系方法
网站地图