自动生成网络设备配置命令

2018-11-07 07:15广东吴丹
网络安全和信息化 2018年9期
关键词:配置文件网络设备脚本

■ 广东 吴丹

笔者在前一篇文章《自动构建网络基础资料文档》(见本刊2018年第1期)专注于从网络设备配置或者命令执行结果中提取数据,用以构建网络基础资料的脚本技术,其中涉及了正则表达式、TextFSM库、写入CSV/Excel文件等内容。通过这些技术可以自行编写提取数据的模板,灵活获得基础数据。

然而这种从配置文件到网络基础资料文档的技术只是单向的技术,也就是数据是单向地从网络设备配置文件流向网络基础资料文档。在网络管理员日常工作中,更经常要做的工作是修改网络设备配置,以前的配置工作都是网络管理员手工进行,手工配置网络设备的工作方式有些不足,比如配置工作完全依赖于网络管理员,经验难以推广,而且都是重复性工作,输入命令可能有误或有缺失等,现在希望通过脚本来解决配置问题。

使用脚本来自动生成配置文档有以下好处:

1.把有经验的网络管理员的经验以脚本形式积累下来,自动形成网络知识库。

2.把网络配置修改的验证工作提前到真正实施前,并通过对比以前的设计方案,减少可能遇到的问题。

3.减少实施过程中因输入而产生的错误。

4.通过脚本可以实现配置的全过程跟踪,有利于事故后的审计。

5.可以把网络配置和网络基础数据库关联起来。

6.加快网络方案文档的制作。

以上六点益处,笔者是深有体会的,据笔者的经验,使用该文中的脚本和网络升级方案的框架,结合一个稍微完善的基础数据库,能在两个小时内完成大约30-50台设备的网络设备升级方案,并出具每一台设备的具体修改配置文档,在没有使用这个脚本前,这项工作大约需要8-20小时。由此可见,脚本工具是能在一定程度上提高工作效率的。以下将详细介绍自动生成网络设备配置命令脚本的思路。

本文要介绍的内容是自动生成网络设备配置命令,结合前面介绍的内容,需要实现的目标是网络管理员在网络规划时,在网络基础资料文本中直接修改Excel或者CSV文本对应的内容,然后通过脚本结合Excel/CSV的数据内容自动生成网络设备相关配置。从数据流向看,这种方式实现了数据是从网络基础资料文档流向网络设备配置文件,把前一篇文章和本文结合起来,即可实现“数据”在网络设备配置文件和网络基础资料文档中的双向流动,从而提升网络管理员的工作效率。

从前面需求和分析看,这是一个由数据生成不同文本的项目,类似于数据库和HTML文件的关系。因此借鉴网页技术中的MVC模型和解决方案,很容易推导出自动生成网络配置文档的解决方案。

在本文中,把本次需要变更的设备参数和现行的设备参数间差异当作“数据”,把模板类中的控制语句当作MVC模型中的“Controller”,把生成的变更配置文件当作视图“View”,那么通过应用MVC的工作原理就可以通过把“数据”输入“Controller”中,最后产生变更方案。以下将使用Jinja2模板技术来实现以上功能。

Jinja2是一个流行的Python模板引擎技术,它具有如下特点:强大的HTML转义语句;模板继承技术;可配置的灵活语法。

基于以上特点,本文将结合Jinja2模板技术设计自动生成网络设备配置变更项目的流程:

1.制作Jinja2模板,模板尽可能小,以便后面可以根据需要组合成较大的模块。

2.制作设备参数变更的数据。

3.用Jinja2引擎读取模块文件,然后把参数变更数据传递给模板,最后模板引擎将数据渲染成配置文件。

根据给定的模板文件生成单个设备的配置文件,

可以是整个配置文件的片段,

然后多个片段可以组合成完整的配置文件。

初始化IOSDeviceText的参数

IOSDeviceText类是一个基础类,它主要是通过jinja2的模板把Data中的数据生成网络配置命令的片段,并把结果保存在ResultText属性中。

组装函数,把模板文件和数据结合起来。

tplFileName:模板文件名,字符串

deviceHostName :设备名称,为哪个设备生成配置文件,字符串

data:传递给模板文件的数据,list()类型

遍历组装好的target生成配置文件,并保存到文件中,文件名为设备名称

# 根据设备名称,为每个设备初始化保存配置文件的results[tn]

TargetText是一个核心类,它主要是把每台设备的相关数据传给基础类 IOSDeviceText,由IOS DeviceText生成配置命令片段,然后由MakeIt方案进行片段组装,把组装后的配置文档保存在文件中,文件名是机器的hostname,因此需要保持每台设备的hostname是存在并唯一的,如果没有设备hostname,也必须为它分配一个唯一标识符,建议由网络管理员分配统一、有意义的hostname。

有了以上基础类,只需要提供相应的数据和制定模板,就可以生成配置文件。以下给出一个例子:

通过上面的例子可以看到,调用数据和模板并生成对应的文件并不困难,在jinja_result_text目录下已经生成 gm、sd、nh、zz 这些文件,而这些文件保存的就是各个网络设备配置或者升级命令。

在本文和前一篇文章《自动构建网络基础资料文档》的基础上,既可以实现从网络配置文件上提取数据,把半结构化的文档转化为结构化的数据,也可以实现结构化的数据生成网络配置命令,从而能极大地提供网络管理员的工作效率。

猜你喜欢
配置文件网络设备脚本
酒驾
网络设备的安装与调试课程思政整体设计
从Windows 10中删除所有网络配置文件
安奇奇与小cool 龙(第二回)
一种基于C# 的网络设备自动化登录工具的研制
互不干涉混用Chromium Edge
基于Zookeeper的配置管理中心设计与实现
忘记ESXi主机root密码怎么办
快乐假期
小编的新年愿望