基于CLI命令行登录的自动化运维实践案例
发表时间:2023-08-31 21:00:49
文章来源:炫佑科技
浏览次数:184
菏泽炫佑科技
基于CLI命令行登录的自动化运维实践案例
随着云计算和SDN技术的发展,数据中心的规模越来越大,网络架构也逐渐朝着“去堆叠”、“去装箱”方向发展,这意味着需要的交换机数量需要维护的数量呈指数级增长。 随着网络维护规模的增大,运维人员的压力也成倍增加。 依靠传统的人工维护已不再现实。 工具化、自动化运维势在必行。 这就要求运维人员具备一定的编程能力,使得传统的手工维护可以用软件来代替。 网络自动化运维理念与软件开发领域概念相结合产生的概念已逐渐被网络运维界所接受。
对于自动化网络运维来说,首先需要实现网络设备与自动化运维平台的连接,即通过代码登录网络设备并获取信息。 目前常见的连接设备的方式有模拟传统/SSH命令登录、gRPC、协议对接等。
为了跟上SDN的发展趋势,各传统网络设备厂商也逐渐开放API接口。 比较有代表性的是YANG模型对网络设备配置和信息输出的数据结构化定义。 目前锐捷数据中心交换机产品已全面支持该协议,适合与SDN控制器或运维平台的南向接口互连。 面对网络工程师习惯使用CLI命令行操作网络设备的情况,*佳实践是什么?
本文将介绍一个基于CLI命令行登录的主流自动化运维实践案例,希望给您带来帮助。
基于CLI自动化运维带来的问题
CLI(-Line)是传统网络工程师*熟悉的与网络设备“交流”的方式。 工程师*初学习网络课程是为了熟悉各种协议的命令行配置和调试。 工程师在日常工作中需要结合命令行输出结果进行故障排除。 即使在网络割接和变更的场景下,他们也需要将变更操作步骤细化到每个命令。 与其他API接口相比,CLI命令行支持的内容通常更丰富、更灵活。 因此,在实现网络运维自动化的过程中,基于CLI的自动化是*容易被传统网络工程师接受和执行的。
近年来随着该语言的快速发展,涌现了一批基于 的优秀开源模块,如、、、等。 网络工程师现在可以编写简短的脚本来调用这些模块来实现批量登录设备执行脚本,但随之而来的另一个令人头疼的问题是,传统的命令行输出结果通常以适合人类阅读的方式呈现。 例如,“show”命令的输出包含大量空格、缩进、换行符等,并且许多命令还具有上下文依赖性。 这些命令行输出结果通常不能被计算机很好地识别。 计算机更擅长识别 XML、JSON 和 YAML 等结构化数据类型,因此网络工作人员在编写脚本时必须编写一堆正则表达式来“挑出”关键参数。 然而,复杂的正则表达式的使用进一步导致代码的可维护性较差。
下面以交换机*基本的VLAN命令为例进行说明。 下图显示了“show vlan”命令的输出。 对于同一个VLAN,可以同时允许多个端口通过。 当关联的接口数量超过一定数量时,输出结果将被分成多行显示。 此时,VLAN信息仅显示在**行,后续行需要与**行关联匹配才能得到正确的输出。 信息。 此时,如果需要读取某个VLAN关联的所有端口号列表,则需要多次调用正则表达式并配合循环逻辑判断,利用传统的正则表达式来实现。 整个过程非常繁琐。
常规数据类型主要是列表或字典格式。 如果有一个工具可以直接将设备的上述输出转换为适配的数据类型(如下图所示),那么就可以直接用来处理。
下面隆重介绍一下本文标题中提到的模块,这是一个令人惊叹的结构化输出文本工具。
模块介绍
它是开发的一个开源模块,可以基于模板的状态机解析半格式化文本,从而实现对网络设备CLI的输出信息的结构化数据处理,*终以字典或列表格式输出文本内容(或两种组合)。
详细信息请访问此模块:。
例如上面需要解析“show vlan”命令的输出,可以通过调用以下模板来格式化命令输出:
-模块介绍
虽然有可以结构化分析文本信息的模块,但各个厂家的CLI输出内容差异较大,而且每个命令都需要适配对应的模板,需要运维人员花费大量的时间编写相应的模板。 ntc-就是为了解决这个痛点而诞生的。 ntc-是团队开发的模块。 该模块是基于开发的。 内置近400个模板,可适配主流厂商的CLI输出结果。
详细信息请参考模块主页:
ntc-内置了索引文件,将各个厂商平台和show命令映射到对应的模板文件,每个厂商的不同命令对应一个独立的模板。 基于ntc-,我们开发了基于锐捷数据中心交换机产品的模板库:-. - 模板库基于规则开发,用于适配ntc-模块,可与模块无缝对接。 -模块可以结构化输出锐捷数据中心交换机的CLI内容,输出结果可以直接在脚本中使用。 该模块经过锐捷主流数据中心交换机多个版本测试,涵盖RG-S6510、RG-S6520、RG-S6910、RG-S6920、RG--X系列【右5】产品自动化软件开发,目前支持近50条常用命令分析,后续会逐步更新完善,敬请期待。 目前 - 代码托管在:
下面介绍一下该模块的使用方法。
- 如何使用该模块
安装方法
先决条件:安装库和ntc-
方法一:合并-到ntc-库中(推荐)
方法二:独立使用-库,需要设置环境变量,相对复杂(不推荐)
推荐方法一是将这个模板库合并到ntc-中使用。 具体操作步骤如下:
下载模板库
git 克隆:/-.git
模板文件导入ntc-
将目录下的所有文件导入到ntc-目录下。
以 macOS 为例:
cp*。 //.//3.6/lib/.6/site-////index
添加索引信息
以macOS为例,索引文件所在路径为:
//.//3.6/lib/.6/site-///索引
找到索引文件后,用文本编辑软件打开,将以下内容全部复制粘贴到原文件末尾。
注意:由于ntc-库的匹配原理,为了避免出现异常情况,不建议调整以下索引项的顺序!
情况一:使用登录设备获取输出信息
阐明
本案例使用模拟CLI自动登录设备,读取关键信息并输出结果。
它是专门为适配网络设备而开发的开源库,并集成了环境。 *新版本(3.3.3)支持锐捷产品。 参数:
测试目标
登录设备基于CLI命令行登录的自动化运维实践案例,执行“show int count rates up”命令获取设备输出信息,并将结果以字典格式输出。
实现代码
注意关键字:':'', =True
达到效果
案例2:使用ntc-输出结构化文本
阐明
本案例使用ntc-来进行文本内容的结构化输出。
测试目标
以下图BGP路由表为例,需要结构化输出“show ip bgp”命令的执行结果。
实现代码
注意关键字:=''
达到效果
写在*后
本文介绍了网络自动化运维存在的问题及解决方案,并结合两个案例介绍了该模块的功能和使用方法。 有兴趣的读者可以参考案例下载测试。 目前命令数量无法满足所有业务场景,如有更好的建议和意见请留言。 希望这个模块能够帮助到有这方面需求的朋友。
附录
本文介绍的相关模块地址:
-:
:
ntc-:
: