
1.3 Python网络运维自动化实践之路
在了解Python网络运维自动化的工具体系之后,网络工程师便可以展开Python网络运维自动化的学习,并将之付诸实践。在实践过程中,网络工程师也要遵循一定的方法,以达到事半功倍的效果。
1.3.1 循序渐进地学习与实践
在Python网络运维自动化的学习与实践过程中,一定要遵循循序渐进的原则,切记不可急功近利。
在学习阶段,读者要从头到尾仔细阅读书中的内容。本书的内容是作者10年实战经验的总结,并凝结了作者解答各行各业网络工程师所提问题的宝贵经验。
在实践阶段,一定要将脚本充分测试后再应用到实际的网络运维生产活动中。尤其是对于网络设备的配置修改,一定要在测试环境或者模拟器环境中充分测试后再投入生产。很多网络运维自动化的知识与相关分享都将大量笔墨花费在配置下发的相关环节,实际上这是风险很高的一个环节。网络运维自动化的初学者对于相关技术工具的细节不够熟悉,对于网络运维自动化的风险意识不够,这都会加大网络运维自动化的风险。在这个阶段,笔者建议网络工程师优先进行配置和信息的收集活动,因为它的性价比更高、风险更低。在这个过程中可以首先做配置文本的收集,执行相关命令并将回显写入以一定格式命名的文本文件中;然后借助正则表达式和TextFSM进行结构化数据的提取和保存,逐步培养数据意识。通过这种数据收集的方式,网络工程师的Python网络运维自动化水平也会逐渐提高。
随着Python网络运维自动化水平的提高,网络工程师可以尝试通过YAML格式或表格数据,结合Jinja2模板生成标准化的配置。这些配置起初可以选择人工推送,随着Jinja2在网络配置变更环节的逐渐成熟和稳定,以及自身开发水平的不断提升,网络工程师可以尝试将部分高频率、低风险的配置通过Netmiko进行自动化下发。
在后续实践中,网络工程师还可以借助Nornir或NetBox,进一步整合自动化脚本,构建自己的网络运维管理工具体系,从而提升网络运维的自动化水平。
1.3.2 有意识地培养数据意识
在网络自动化运维的世界中,不同的平台、不同的程序、不同的脚本之间进行通信要用规定的数据格式,也就是要将结构化数据以指定的数据格式在网络或者本地文件之中传输。结构化的数据需要用户对网络运维场景中涉及的对象进行抽象化。抽象化的过程就是建模,即为运维对象或者运维场景创建一个模型,用结构化的数据描述运维对象或者是运维场景。用户首先要通过各种手段从网络设备获取的相关配置文本中提取出结构化数据,并将其映射到这个模型上,然后进行相关的数据处理。对初学者来说,这个模型可以是无明确定义的、约定俗成的模型,例如可尝试用Python的各类基础数据去描述网络设备、网络配置项、网络运维场景。随着Python网络运维自动化学习与实践的深入,网络工程师需要将这个模型规范化地描述出来,例如使用Python的类来定义网络模型,使用网络的建模语言YANG定义模型,或直接使用NetBox现有的网络模型。
在当今数字化转型的时代,结构化的数据是一笔非常宝贵的财富,在网络运维中发挥着重要作用。网络的数据模型不仅可以描述网络,也可以用于驱动网络的配置变化。网络工程师还可以使用结构化的数据描述网络配置,让运维人员聚焦于网络配置的参数调整,远离原始的配置文本,从而提高网络的确定性,减少因人工操作失误导致的网络连续性的中断。
在网络运维活动的众多环节,网络工程师都要尝试去刻意培养数据意识,以数据的视角去看待网络运维。
1.3.3 以场景为导向的实践落地
网络运维的痛点都是基于运维场景的,所以归根到底,要将网络运维自动化落地到日常运维场景中,并以解决日常运维场景的困境为导向。在日常工作中,网络工程师首先要梳理手头的工作,明白有哪些场景符合机械重复的特点,然后将这些场景的工作进行自动化处理。网络工程师还要主动锻炼自己的“自动化意识”,在工作中问问自己“这个场景可以被自动化吗”“这个场景如何被自动化实施”。这种主动的自我提问可以有效锻炼网络工程师对场景自动化的整体辨知能力和把控能力,将有限的资源尽量多地投入运维场景,解决实际问题,而不是去实现一些华而不实的功能需求。身为网络运维人员,投入在网络运维自动化上的时间是有限的,我们要最大化地利用好这些时间,从而产生最大的价值。
在开发的过程中,网络工程师也要将精力聚焦在场景的实现上,而不要在技术细节上花费过多的时间。这仍然是一个关于时间成本的问题,我们应该花费更多的时间去优化一个场景的某个技术细节,还是在时间成本和功能效果相对平衡的前提下实现更多有用的场景?毫无疑问,后者是我们追求的一种方向。在Python网络运维自动化的起步阶段,网络工程师的开发水平不是特别高,暂时没办法实现比较好的批量自动化操作。这个时候可以使用比较简单的循环逻辑和轮询设备完成自动化操作,先实现功能需求,再解决某场景之下的运维难题。随着技术水平的精进,网络工程师可以使用一些并发技术或者网络运维自动化框架等,进一步优化程序代码。如果一开始我们就将时间和精力过多地花费在并发技术的学习和使用上,势必会阻碍场景需求的落地。如果长时间关注技术细节,就无法及时输出有效工具,导致场景难题得不到解决,也会影响我们开展Python网络运维自动化的信心。
在网络运维自动化的学习与实践中,我们的程序代码一定要以场景为导向,从而顺利地进行网络运维自动化的学习与实践。