
1.2 Python网络运维自动化的工具体系
Python网络运维自动化的技术以Python为基础(本书第2章将讲解网络运维自动化开发所需的Python基础知识),包含了众多网络运维自动化工具包,这些工具包覆盖网络运维工作的方方面面。Python网络运维自动化工具可以分为3大类——数据工具集、网络管理工具集、开源框架与系统,分别对应读者学习网络运维自动化的3个阶段。
1.2.1 数据工具集
早期的网络运维自动化开发工作,通常在文本层面进行处理,例如将配置保存成文本、通过文本将配置下发到网络设备。随着计算机技术的不断发展,尤其是大数据、基础设施即代码(infrastructure as code,IaC)等概念及技术的提出,网络运维人员意识到应当用结构化的数据来描述网络运维的基础数据和各种场景。为此,网络工程师必须掌握基础的数据格式,包括JSON、YAML、XML,以及表格数据,并能够通过结构化数据描述网络运维;网络工程师还需要具备数据意识,为更深层次的Python网络运维自动化学习打上数据思维的烙印。这些知识对应本书第3章的内容,是网络工程师必须掌握的技能,以便他们更好地进行后续的学习和开发实践。
在初步具备数据意识之后,网络工程师要掌握两种技能:借助Python正则表达式和TextFSM文本解析引擎,从网络配置中提取出结构化数据;借助Jinja2模板引擎,通过结构化数据并结合配置模板生成标准的网络配置。它们分别对应本书第4章和第5章的内容,也是网络工程师必须掌握的技能。这些技能可以提高网络工程师的工作效率和准确率,同时帮助他们养成用数据描述网络的思维方式和工作习惯。
1.2.2 网络管理工具集
为了更好地管理网络,网络工程师需要掌握网络运维自动化技术中的相关网络管理工具集。其中最重要的是Python工具包Netmiko,它能与网络进行CLI交互,用于获取网络配置并推送网络配置。借助Netmiko,工程师可以从网络中获取准确而可靠的数据,也可以通过数据驱动网络变更的执行,确保网络达到预期的稳定状态。本书的第6章讲解Netmiko的基础概念和使用方法,这是网络工程师要重点掌握的内容。
网络工程师也需要了解新兴的网络设备管理协议——NETCONF和RESTCONF,理解它们设计的初衷,掌握基本的使用方法,从而加深对网络运维自动化开发的认知。这两个协议对应着Python工具包ncclient和开源工具Postman,可以实现与网络设备的交互。这些知识在本书的第7章进行讲解,网络工程师了解即可。
另外,本书还介绍一些实用的网络管理工具包,例如进行网络地址管理的netaddr、HTTP请求工具包Requests、适配众多网络厂商设备的网络抽象层工具NAPALM等。网络工程师可以结合自身情况,按需学习其中的工具。
通过学习网络管理工具,网络工程师可以提升自动化管理网络的能力,编写简单的自动化脚本,与网络设备进行交互,并结合数据工具集获取结构化数据,从而踏上网络管理的数字化之路。
1.2.3 开源框架与系统
随着Python网络运维自动化学习与实践的深入,网络工程师需要将脚本进行工程化组织,提高开发效率,甚至希望有一个比较完整并具备一定自动化能力的网络运维管理系统。本书推荐使用开源框架Nornir和开源工具NetBox,它们分别对应本书第9章和第10章的内容。
Nornir是一款基于Python的网络运维自动化框架,它可以非常高效地实现网络设备的自动化开发与执行。用户只需要聚焦于单台网络设备的自动化需求并进行代码开发,且这些开发的代码之间可以相互组合,满足更复杂场景的需求。在执行层面,Nornir也帮助用户实现了一种无感知的多线程并发方式,可以非常快速地完成自动化任务。
NetBox是一款基于Python开发的开源网管工具,提供丰富的网络运维管理模型,可用于描述运维的网络环境。该工具通过多种方式支持功能扩展,以满足个性化需求,并可结合之前章节的工具实现自动化功能。