Python网络运维自动化

978-7-115-65260-7
作者:
译者:
编辑:
分类: Python

图书目录:

详情

本书从网络工程师的视角出发,详细讲解了Python在网络运维自动化中的应用,其中涉及Python网络运维自动化的相关技术、工具以及实践。 本书共10章,先对Python网络运维自动化进行了全面的概述,然后讲解了网络工程师所需的Python基础、数据格式与数据建模语言的相关知识。接着,本书介绍了网络配置的结构化数据提取、网络配置的模块化管理、Netmiko详解与实践、模型驱动的新网络管理方式及实践、网络管理工具集、网络自动化框架Nornir和开源网管工具NetBox。本书依托于作者10余年的网络运维经验,内容循序渐进,从脚本编写、框架应用到系统平台整合,逐步提升,结合丰富的代码实例,全面介绍了Python网络运维自动化的工具体系以及其在不同场景下的应用实现。 本书适合网络工程师阅读,也适合对网络运维自动化感兴趣的开发工程师学习,还适合作为高等院校网络工程等相关专业的教材。

图书摘要

版权信息

书名:Python网络运维自动化

ISBN:978-7-115-65260-7

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

版  权

著    王旭涛

责任编辑 单瑞婷

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

内 容 提 要

本书从网络工程师的视角出发,详细讲解了Python在网络运维自动化中的应用,其中涉及Python网络运维自动化的相关技术、工具以及实践。

本书共10章,先对Python网络运维自动化进行了全面的概述,然后讲解了网络工程师所需的Python基础、数据格式与数据建模语言的相关知识。接着,本书介绍了网络配置的结构化数据提取、网络配置的模块化管理、Netmiko详解与实践、模型驱动的新网络管理方式及实践、网络管理工具集、网络自动化框架Nornir和开源网管工具NetBox。本书依托于作者10余年的网络运维经验,内容循序渐进,从脚本编写、框架应用到系统平台整合,逐步提升,结合丰富的代码实例,全面介绍了Python网络运维自动化的工具体系以及其在不同场景下的应用实现。

本书适合网络工程师阅读,也适合对网络运维自动化感兴趣的开发工程师学习,还适合作为高等院校网络工程等相关专业的教材。

推 荐 语

多年来,我一直关注着网络运维自动化领域的发展。虽然本领域的理论知识不断更新,从业界主流的网络管理标准体系FCAPS,到这些年伴随DevOps而兴起的NetDevOps,但一直没发现有关网络运维自动化实战的图书,直到我看到了本书。我将本书推荐给云计算或网络运维自动化领域的从业者,其缘由有3点:第一,完整化。本书涵盖从入门到精通的全部知识内容,即使没有任何开发经验的网络工程师,也可以学到Python基础、数据格式和数据建模语言等完整的专业知识。第二,实战化。本书内容贴合实际的运维场景,即学即用。第三,体系化。本书知识体系包括网络设备的连接和交互、网络自动化框架、模板化的配置管理和模型驱动的网络管理实践,可以帮助读者有效构建网络自动化运维平台。

贺勇 嘉为科技产品总监

在数字化转型的背景下,互联网的发展方向也逐渐从个人消费领域转向产业融合。同时,网络规模持续扩大,网络设备产生的海量运营数据使传统的网络运维工作面临巨大的挑战。本书所倡导的NetDevOps理念可以将自动化运维融入网络领域,并把研发思想植入传统网络运维过程中。本书详细介绍了NetDevOps的知识体系、管理工具以及编程实战等内容,是一本非常难得的网络运维自动化专业书。

方辉 SDNLAB联合创始人

尽管目前市面上已经涌现出不少面向网络工程师的Python图书,然而旭涛的《Python网络运维自动化》这本书卓尔不群。本书不仅涵盖了适合初学者的Python基础知识,更难得的是,对于已经具备一定Python经验的网络工程师,本书也提供了更深入、更高级、更规范的应用工具。强烈推荐对网络运维感兴趣的读者阅读本书。

姜汁啤酒 前亚马逊AWS(澳大利亚)资深网络工程师

在网络运维自动化领域,国内的先驱们一直在尝试制定统一的学习路径,以造福众多从业人员,王旭涛老师无疑是其中的领军人物。本书凝聚了作者的诸多心血,涵盖了从Python语言基础知识到网络管理专项工具,再到网络运维实战场景的全部内容,兼具知识的广度和深度,是一本不可多得的专业书。

戴维 ServiceNow资深网络工程师

NetDevOps是近几年在网络运维领域非常流行的概念,本书能给众多网络工程师提供很好的实践指引。本书框架清晰,内容层层递进,让读者能够学习从Python入门到搭建自己的运维工具,再到运维实战等全方位的知识。对于想要接触Python并用其来提升网络运维效率的朋友,这本书会是一个非常好的选择。

岳飞宇 字节跳动网络平台高级研发工程师

余为网工二十载,初涉网络自动化运维领域之时,虽广购Python图书,然因理论与实践之隔阂,每感困惑,屡欲中止。幸得遇九净先生,以博客分享真实之案例,辅以深入浅出之阐释,乃为余开辟知识之新境界。承先生悉心指导,余渐能贯通理论知识与实务操作,今已写出实用之工具若干,涵盖巡检、配置、采集、监控、分析等,工作效率因而大进。故而强烈推荐此书。

唐志强 51CTO网络讲师

洗尽铅华 回归初心

承蒙旭涛抬爱,能为本书作序,我深感荣幸并略感惶恐。反思过往,尽管我已在企业网络领域摸爬滚打二十余载,见证了IT基础设施从小型机时代、去IOE浪潮、虚拟化技术兴起,直至云计算普及的沧桑巨变。我的工作也横跨了企业园区网络、传统数据中心运维、电力信息调度、生产(管理)信息系统、数据采集监控、铁路调度系统、卫星应急通信等众多网络领域。然而,就本书的主题—网络运维自动化而言,我自知还是一个“小学生”(旭涛也常在技术分享中以“小学生”自谦)。

众所周知,商业银行在业务连续性方面有着极高的要求,与此同时,为了吸引和获取客户,又需要新业务能够快速上线与迭代,这恰好凸显了开发运维一体化(DevOps)的核心价值。旭涛,作为国有大型银行的一员,深谙DevOps在网络运维领域的分支—NetDevOps之道。凭借他超过十年的Python网络运维自动化开发经验,使其能够从容应对各种复杂的网络运维挑战。难能可贵的是,旭涛在提炼了丰富的实践智慧与宝贵经验之后,通过多样化的渠道,将这些宝贵的资源分享给广大读者,为行业贡献了自己的力量。

分享作为互联网精神的核心要素之一,始终推动着开源社区、Linux系统及Python语言等众多领域的繁荣发展。旭涛编写本书的初衷也多源于此,他摒弃了繁复的辞藻、深奥的公式推导、简单示例代码的堆砌,转而采用言简意赅、条理清晰的语言,从网络工程的专业视角出发,紧跟行业发展的最新趋势,系统地阐述了编程语言基础、开发环境搭建、网络设备交互、数据采集与建模语言、开源工具与框架的应用等NetDevOps实践中的关键知识。另外,本书还巧妙地融入了丰富的实战案例与深刻的思考分析,实现了理论与实践的完美结合。更令人振奋的是,我们欣喜地发现已有越来越多的网络从业人员紧随旭涛的脚步,主动分享自己在NetDevOps技术栈学习、工作及项目实施过程中积累的宝贵经验,为整个网络行业注入了新的活力与动力。

“大海航行靠舵手,众人拾柴火焰高”,旭涛及众多网络从业人员无疑是怀揣着对行业的深切热爱与对技术的无限热忱,踏上了NetDevOps这条充满挑战与机遇的网络创新之路。开卷有益,希望本书能帮助读者更加清晰地认识自身在网络领域的职业发展方向,掌握更多前沿的专业技能与工具,进而全面提升个人和团队的综合竞争力。同时,我们也期望本书能够激发读者的探索精神与创新意识。此外,我们倡导技术分享与思想碰撞的理念,鼓励读者在学习的过程中积极交流心得,共享成功的喜悦。我们相信,大家不仅能够收获宝贵的技术知识,还能结识志同道合的朋友,共同享受网络创新带来的乐趣与成就感。

蓝鹏

某能源央企数据中心高级技术主管、原华为培训与认证部讲师、
HCIE-Routing&Switching认证面试官

于北京

2024年7月23日

前  言

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月

资源与支持

资源获取

本书提供如下资源:

本书源代码;

本书配套PPT;

本书配套视频;

本书思维导图;

异步社区7天会员。

要获得以上资源,您可以扫描右侧二维码,根据指引领取。

提交勘误

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区(https://www.epubit.com),按书名搜索,进入本书页面,点击“发表勘误”,输入勘误信息,单击“提交勘误”按钮即可(见下图)。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

与我们联系

我们的联系邮箱是shanruiting@ptpress.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们。

如果您所在的学校、培训机构或企业想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

关于异步社区和异步图书

异步社区”(www.epubit.com)是由人民邮电出版社创办的IT专业图书社区,于2015年8月上线运营,致力于优质内容的出版和分享,为读者提供高品质的学习内容,为作译者提供专业的出版服务,实现作者与读者在线交流互动,以及传统出版与数字出版的融合发展。

异步图书”是异步社区策划出版的精品IT图书的品牌,依托于人民邮电出版社在计算机图书领域多年的发展与积淀。异步图书面向IT行业,以及各行业使用IT技术的用户。

第1章 Python网络运维自动化概述

近几年,社会上对于Python学习的热度持续高涨,在网络工程师的圈子里也逐渐兴起了学习Python 的热潮。网络工程师学习的目的是通过Python来实现网络运维自动化,以此优化工作方式、提高工作效率。不同于普通的Python办公自动化,基于Python的网络运维自动化有着明显的领域特色。本章将介绍云计算时代下Python网络运维自动化的兴起、Python网络运维自动化的工具体系,以及Python网络运维自动化落地实践的一些方法。

1.1 Python网络运维自动化应对新挑战

云计算时代的兴起与发展,不仅让网络行业悄然发生了一些变化,也给网络运维带来了诸多挑战。为了应对这些挑战,Python网络运维自动化逐渐兴起。因此,Python网络运维自动化并不是凭空出现的一个细分领域,它本质上是云计算技术快速发展的产物。

1.1.1 云计算时代网络行业的变迁

随着互联网的蓬勃发展,过去十多年间,云计算技术应运而生并不断发展。云计算是一种通过互联网为用户提供按需计算资源和服务的模式,可让用户在任何地点、任何时间、任何设备上访问和使用网络中的数据和应用。云计算的优势包括成本低、灵活性高、可扩展性强、安全性高和可靠性高等,因此在各行业和领域中得到广泛应用。

随着云计算时代的来临,网络运维也发生了很多变化,例如硬件性能的不断提升、网络带宽的不断提高、组网方式的灵活多变和网络协议的可扩展性逐步提高,这些改变都是为了适应云计算技术灵活、可扩展的相关特性。

网络设备的管理模式也发生了很大的变化,除了命令行接口(command line interface,CLI)、简单网络管理协议(simple network management protocol,SNMP)等传统管理方式,还出现了NETCONF、RESTCONF等新的网络管理协议。网络设备的管理方式也从单一手工管理逐步向集中统一自动化管理过渡。早期的SDN(software defined network)概念主要是想通过OpenFlow协议将数据层面的控制进行集中和统一。但是经过一段时间的实践与演进,人们逐渐认识到在更广范围的应用场景下集中和统一控制器的必要性。随之产生的是一些比较有代表性的SDN项目,例如OpenStack Neutron组件、OpenDaylight项目等。

随着云计算的不断深入发展,网络行业中的SD-WAN、IBN、NFV、网络安全等诸多概念被陆续提出。网络与云计算紧密结合,云网融合的理念应运而生,网络连接向更加智能、更加灵活的目标前进,网络也向着简洁、敏捷、开放、集约的新型网络转变。

1.1.2 云计算时代网络运维的挑战

云计算时代的网络运维面临以下4个新挑战。

挑战一,网络环境中的敏捷交付要求越来越高。从Day0业务开通、新业务上线到日常稳态监控、突发事件应急等,这些操作都对网络运维提出了高标准、严要求。同时随着DevOps、敏捷开发、CI/CD等新理念的提出,云网络下的敏捷交付已是大势所趋。

挑战二,网络运维规模越来越大,重复劳动越来越多。在大规模建设云数据中心的同时,网络规模也在不断扩大,网络运维对象越来越多,从而出现了大量的手工重复劳动,也使网络设备的配置、变更呈现指数级增加的趋势。

挑战三,网络内外部的关联性越来越强,沟通协作要求越来越多,沟通成本越来越高。网络系统与大量IT基础设施、系统存在关联性,网络运维团队与其他IT团队、组织需要高水平的沟通和协作。其中包括与应用开发团队的紧密合作,确保网络更有效地支持新业务。网络运维团队还必须与安全团队合作,确保网络安全措施有效落地。此外,网络运维团队还需要在性能优化、故障处理、突发情况应急等领域与众多IT团队进行协作。

挑战四,网络运维管理的精细化程度要求也越来越高。由于网络规模不断扩张、新协议和新技术层出不穷,网络运维管理的精细程度要求也越来越高。例如,网络运维人员要清楚所管理设备的数量、软件版本、各类型端口使用情况、基线配置是否合规等众多网络运维信息。

上述种种挑战的叠加给网络运维带来了极大难度。虽然已有的运维管理平台可以解决部分问题,但大部分平台主要聚焦计算资源(系统)的相关交付,对于网络资源交付的支持能力有限,所以很难覆盖网络运维工作的方方面面。

1.1.3 Python网络运维自动化的兴起

如何有效应对网络运维面临的挑战呢?是否有所谓的“银弹”呢?

为应对这些挑战,在不断的实践中,网络运维工程师给出了较为一致的答案——基于Python技术栈的网络运维自动化。应对网络运维挑战的关键在于依靠网络运维自动化来提升网络运维效率、提高网络管理精细化水平。但为什么是基于Python技术栈的网络运维自动化呢?

在网络运维早期,少数网络工程师将Bash Shell、VBA等脚本语言作为主要编程语言,实现与网络设备的交互、数据的收集与处理。这些编程语言并不是专门为网络运维而设计的,网络工程师需要从零开始实现很多功能,所以整体开发效率不高,且没有形成良好的生态圈。

随着开源潮流的兴起,Python、Perl、Ruby、Go等编程语言开始流行,吸引了很多网络工程师加入开源大潮。其中Python凭借其强大的功能和简单的语法脱颖而出,成为网络工程师的首选编程语言。

一些网络工程师率先结合网络自动化开发的需求,研发了许多基于Python语言的工具包。这些工具包大大提高了网络工程师自动化开发的效率,并形成了良性循环,催生了更多基于Python的优秀的网络运维自动化工具包,例如Paramiko、Netmiko、Jinja2、TextFSM、NAPALM等。业内出现了许多Python网络运维自动化“布道者”,他们从网络工程师视角分享基于Python的网络运维自动化开发技术,掀起了一股网络工程师学习Python网络运维自动化的浪潮,有些网络工程师甚至实现了跨界,主导设计网络运维自动化系统。借助于众多优秀的DevOps领域开源项目,一些开源的网络自动化运维平台也相继诞生并进入大家的视野,例如国外的NetBox、Nautobot、eNMS,国内的NetAxe。这些平台完全基于网络运维视角进行设计开发,实现了网络资源管理及相关自动化等众多功能,涵盖了网络运维的众多应用场景。

与此同时,部分网络设备制造商发布了网络运维自动化相关的认证项目。虽然这些认证项目有着不同的名称,例如思科的Cisco Certified DevNet Associate、华为的HCIP-Datacom-Network Automation Developer,但它们的核心思想高度一致:希望网络工程师能系统地学习以Python为核心的网络运维自动化技术,编写符合自身所处运维环境的脚本并开发相关工具甚至平台,以此提升运维效率。

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开发的开源网管工具,提供丰富的网络运维管理模型,可用于描述运维的网络环境。该工具通过多种方式支持功能扩展,以满足个性化需求,并可结合之前章节的工具实现自动化功能。

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网络运维自动化的信心。

在网络运维自动化的学习与实践中,我们的程序代码一定要以场景为导向,从而顺利地进行网络运维自动化的学习与实践。

1.4 小结

本章主要介绍了Python网络运维自动化的兴起与发展,简单介绍了Python网络运维自动化的工具体系,同时分享了笔者在Python网络运维自动化实践道路上的一些经验。Python网络运维自动化是一门重视实践的技术,在网络工程师掌握了基础的技术之后,还需要在后续的网络运维工作中进行实践,从而提升运维效率。

相关图书

AI辅助编程Python实战基于GitHub Copilot和ChatGPT
AI辅助编程Python实战基于GitHub Copilot和ChatGPT
Python极客项目编程(第2版)
Python极客项目编程(第2版)
动手学自然语言处理
动手学自然语言处理
Python财务应用编程
Python财务应用编程
Python+ChatGPT办公自动化实战
Python+ChatGPT办公自动化实战
深度学习的数学——使用Python语言
深度学习的数学——使用Python语言

相关文章

相关课程