
前言
2014年,我毕业后有幸入职了某国有大型银行的数据中心,从事网络运维工作。当时我主要负责SAN网络的运维,经常要做的一件事情就是登录若干网络设备进行相关信息的收集和整理,以便在后续运维中有据可依,在应急响应中能上下联动、快速定位问题。
一开始我采取的方式是“人肉”整理相关信息,登录一台台设备执行命令,并“抠”出相关信息写入表格。这种方式机械重复,效率很低。其中的痛苦,搞过网络运维的人都很清楚,因为我学习的是计算机科学与技术专业,所以团队安排我编写脚本来自动化完成这份工作。上学时,我主要用Java做开发,在编写脚本时机缘巧合地使用了Python,不禁感叹:Python简直是为运维自动化而生!它既简单又简洁,而且非常容易上手,同样的功能用几行Python代码就可以完成。于是,当我的第一个Python自动化脚本开发完成并实际运用后,以前两三个人近一周的工作量,通过这个脚本半小时就可以完成。经过主动学习,我把脚本封装成Web应用,让很多信息都实现了自动化采集入库,并可以通过Web界面进行关联查询。无论是日常运维,还是应急处置,这个Web应用都发挥了很大的作用,受到了大家的一致好评。
这种成就感让我彻底“爱”上了编程。虽然我上学时并不“感冒”编程,但工作后对编程入了“魔”,我也被领导“盯”上,开始有计划地为团队开发一些网络运维自动化的工具。自此我便一发不可收,从脚本到单体的Web应用,最终开发了一个集CMDB、监控应急、运维自动化、日常办公等众多功能于一身的网络运维管理平台,覆盖了网络运维的众多场景。我的工作重心也过渡到网络运维自动化工具开发。虽然我的网络运维技能“稀松”,但是在网络运维自动化方面却稳扎稳打,掌握了网络运维自动化工具的规划、设计和开发等技能,并利用开源技术,解决了一个又一个的运维难题。
随着学习和实践的深入,我也接触到了NetDevOps,发现自己从职业生涯开始就是一名NetDevOps工程师,利用Python来提高运维效率。彼时,NetDevOps在国内并不流行,而我心中一直有一团火,希望NetDevOps在国内发展,让更多的网络工程师投身到网络运维自动化的建设中。2020年,我注册了微信公众号“NetDevOps加油站”,并创建了知乎同名专栏,分享Python网络运维自动化技术经验。在创作、交流、答疑的过程中,我的知识和认知不断迭代,也发现很多网络工程师在学习过程中不得其法。我意识到网络工程师需要一本“how to do”的书来指导其学习,让他们能够零基础入门NetDevOps,并通过最佳的学习路线指引,掌握最广泛使用、最稳定的技术和工具以及贴合网络运维实际场景的案例。于是我从网络工程师的角度,结合10余年的网络运维自动化开发经验,撰写了这本书。
随着网络运维技术的不断发展,国外的行业先驱者不断赋予NetDevOps更多的意义、更多的实践和更深刻的内核。但我一直认为,NetDevOps是一种思想、一种文化,也是一种实践方式。它鼓励网络工程师利用开发技术并借助开源工具,不断地沉淀运维数据、优化运维流程、固化运维经验,最终提高网络运维效率、提升网络运维质量。在国内,对于初学者,将它与Python网络运维自动化画上等号会更贴切,更加有助于网络工程师理解、运用NetDevOps,所以我将本书命名为“Python网络运维自动化”。希望各位读者通过阅读本书,能够掌握Python的开发技术,解决网络运维难题,进一步提高运维效率、提升自身价值。
本书组织架构
本书内容的安排循序渐进,前面3章从网络工程师的视角讲解了Python的基础知识、数据格式和数据建模语言。即使是有相关经验的网络工程师,也会在这几章中找到新的感悟。从第4章开始,本书以Python网络运维自动化工具体系角度展开,读者可以依次阅读,也可以直接翻阅感兴趣的章节。
当然,对于绝大多数读者,我建议循序渐进地阅读本书,从而夯实基础、构建体系。本书共10章,各章主要内容如下。
第1章,Python网络运维自动化概述,主要介绍Python网络运维自动化技术的兴起背景、工具体系和学习建议。
第2章,网络工程师的Python基础,从网络工程师的视角,结合Python网络运维自动化需求,从零开始讲解Python基础知识。
第3章,数据格式与数据建模语言,主要介绍Python网络运维自动化领域所需的常见数据格式与数据建模语言,旨在为读者构建数据意识,为学习后续章节中的内容打下基础。
第4章,网络配置的结构化数据提取,主要介绍了从网络配置中提取结构化数据的两种方式—正则表达式和TextFSM。TextFSM是本书的第一个重点,可以帮助读者非常便捷地从网络配置中提取出结构化数据,用于网络运维自动化。
第5章,网络配置的模板化管理,主要介绍了Jinja2模板引擎,以及如何使用它结合结构化数据快速生成标准化配置。
第6章,Netmiko详解与实战,主要介绍了Python网络运维自动化使用最广泛的工具Netmiko。这部分内容是本书的第二个重点,以便实现各类网络设备的CLI交互,并充分利用之前章节的知识点,覆盖很多网络运维场景。
第7章,模型驱动的新网络管理方式及实践,主要介绍了NETCONF协议与RESTCONF协议,并结合ncclient和Postman演示了使用两种协议与网络设备进行交互的示例。
第8章,网络管理工具集,介绍了网络管理中的3款工具:netaddr、Requests和NAPALM。netaddr用于处理IP地址,与运维息息相关;Requests用于发起HTTP请求,可以与运维中已有的第三方系统平台进行对接;NAPALM提供了一种网络运维自动化的框架和相关工具,可以简化网络运维自动化的开发。
第9章,网络自动化框架Nornir,借助此框架可以提升读者的开发速度、提高脚本的执行效率、简化开发的难度,这是本书的第三个重点。
第10章,开源网管工具NetBox,主要介绍了一款开箱即用的网管工具NetBox,可以帮助读者更轻松地管理网络基础设施,借助其自定义字段、开放的RESTful API体系,结合自动化脚本开发,实现更多的功能扩展。
读者对象
本书适合网络工程师、对网络运维自动化感兴趣的开发工程师阅读。此外,本书亦可作为高等院校网络工程等相关专业的教材。
致谢
首先要感谢NetDevOps的先驱们,是他们开发出了好用的工具并进行了最早的NetDevOps技术分享。
感谢本书的编辑单瑞婷老师,帮助我从零开始写一本书;感谢蓝鹏老师,在我编写此书的过程中给我的帮助和鼓励,是他和我一起讨论书的架构、帮我审核稿件、提出修改建议,他广博的知识储备、严谨的治学态度,无不令我深感敬佩。同时,他温润如玉的品性中又不失幽默,为我树立了学习、生活和工作中的典范。
感谢本书编写过程中鼓励我、帮助我的唐志强、戴维、张明、李黎、岳飞宇、袁泽海、武江鹏、姜阳等师友,在你们的帮助下,这本书得以逐步完善。
最后感谢关注我的微信公众号、知乎专栏的朋友们,是你们的支持,让我有了分享知识的动力,这本书才能从无到有。希望大家能通过这本书掌握相关技能,共同推进网络运维自动化的发展。
王旭涛
2024年4月