自动构建网络基础资料文档
2018-11-08
背景及步骤
在网管员日常工作中,修改网络设备配置是一件很常见的工作,一般工作流程是网管员首先给出网络配置修改方案,并通过测试环境验证。
然后提交网络维护修改申请,将经过测试环境验证的配置脚本化,使用该脚本进行自动升级,或者双人上机操作变更。修改完成后,业务相关人员进行业务验证。
最后由安全监督岗位同事对网络配置修改的相关方案、申请流程、业务验证进行事后监督。
虽然以上流程涉及到众多的手工操作,但是如果能在这一流程中适当使用一些自动化工具或者脚本,能极大地提高工作效率,减少操作失误的风险。
图1 使用SHOW MASTER STATUS命令
下面笔者将会使用的一些网络管理自动化脚本,希望能起到抛砖引玉作用。
本文主要解决从配置文件收集网络基础资料的问题。
从以上工作流程可以看到,修改了网络设备的配置后是需要修改网络基础资料的。
比如,已经把某一个端口从vlan 10更改为vlan 20,那么基础资料中也应该修改为20。
在没有自动化脚本前,每次都是网管员手工对资料进行修改,这是一件重复而繁杂的工作。
如果能从网络配置文件和网络命令结果中自动抽取相关数据构建网络基础资料文档,这会极大地提高资料的准确性,提升网管员的工作效率。
笔者单位有4个下属单位,每级单位都有若干交换机和路由器,为自动化构建这些设备的基础资料文档。
现建立5个文件夹,把本单位和管辖4个单位的设备配置文件保存在对应文件夹中,同时建立一个文件夹来保存若干命令执行的结果。
完成这些基础性工作后,将设计一个小程序来自动分析这些文件,从而产生基础资料文档。
这个自动化分析程序的难点在于分析配置文件和命令执行结果,而这些文件是半结构化文档,分析半结构化文档可以使用正则表达式。
但是,完全使用正则表达式要求极高的编程能力,并且分析这些文档还涉及到状态机原理。
能很好地把正则表达式和状态机原理结合起来的工具有TextFSM库。
这是一个由Google公司提供的开源Python库,其依赖性小,易于安装和部署,只需要提供获取数据的模板文件和设备配置文件内容就可以返回数据。
一般地,输入的模板文件由正则表达式和状态机组成,输出的结果可以转化为csv格式或者Excel格式。
通过上述分析,自动化程序的工作原理图如图1。整个流程分为4部分。
第一部分:
从配置YAML文件中读取基本目录、设备配置文件存放目录、命令执行结果文件存放目录、模板文件存放目录。
第二部分:
把设备配置文件读取到IOSDevice类中,并按单位保存。
第三部分:
调用模板文件,根据提取数据的需要,按单位或者网络设备来分析设备配置文件,提取相关数据。
第四部分:
根据需要,把提取出来的数据保存到CSV或者Excel文件。
核心程序代码
初始化函数,初始化时从setting_file中读取配置文件,配置文件是yaml格式。
然后通过_getAllDevices函 数 把所有的配置文件读取到IOSDevices对象中,以便供后面提取资料时使用。
Get Result From Temp late File主要功能是获取单台设备的数据。
Get All Result From Temp late File主要功能获取多台设备的数据。
它们都返回数据的名称和相关数据,然后通过Write To CSV函数保存数据。
如果需要保存为Excel格式,除了保存为CSV文件,然后在Excel中打开外,还可以使用Xlxs Writer这个库直接把结果输出到Excel文件中,其保存脚本参考如下:
编写模板文件
接下来的重点就是模板文件了,以下的模板是获取网络设备端口的相关信息:
编写模板主要由三部分组成:数据定义、状态机/规则定义和匹配后的动作。
模板第一部分定义需要提取的数据,以Value关键字开头,后接数据的名称。最后一部分为“数据类型”,定义格式为:Value[option[,option...]] name regex
模板第二部分以Start开头,后接各项正则表达式,需要提取的数据需要使用${}修饰,这部分是结合正则表达式和状态机的关键,其定义格式如下:stateName**^**rule **^**rule...。
第三部分是当状态机匹配后的动作,其定义格式如下 :^regex [-> action],多个action可以用'A.B C',如果没有action,默认是Next.NoRecord。
结合数据源的文本内容,就可灵活编写适当的模板来提取相关数据,最后组合以上技术,调用以上类和函数
查看该目录下,可以查看GM.csv文件,里面保存的就是自动提取出来的数据。