首页>参考读物>计算机科学与技术>综合

吃透Ansible:核心源码剖析与项目实战
作者 : 沈聪 编著
出版日期 : 2021-07-05
ISBN : 978-7-111-68580-7
定价 : 149.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 488
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书从Ansible的模块运行以及Playbook的解析和执行两个方面剖析了三个版本的Ansible源码。此外,还优化和改造了用于部署Ceph集群的ceph-ansible项目。
本书共6章,第1章介绍Ansible 1.1的底层通信机制和模块运行原理;第2章在第1章的基础上剖析Ansible 1.9.6的源码;第3章介绍Ansible 2.8中的部分核心模块及Playbook的常用语法;第4章介绍Ansible 2.8中的核心源码并完整跟踪模块运行的全过程;第5章以小版本的源码对比及GitHub上的Bug溯源两种方式探讨深入学习Ansible源码的方式;第6章介绍基于Ansible的Playbook项目ceph-ansible。
本书适合初级和中级Python程序员阅读,也适合运维开发工程师和Ansible爱好者阅读。

图书特色

前华为核心系统部负责人吴文峰等3位大咖力荐,高级运维开发工程师全方位、多角度剖析Ansible的核心源码,详细介绍Ansible的常用模块和Playbook的底层执行逻辑

图书前言

  Python是目前自动化运维领域应用最多的语言之一,而基于Python开发的Ansible则是自动化运维管理的首选工具。对Python程序员来说,学习Ansible源码一方面能从中学到不少Python的高级用法,另一方面也能熟练掌握这款流行工具并可以随时对其进行深度改造和定制,这对他的个人成长至关重要。此外,Ansible源码中的很多函数与类均可以在简单改造后成为运维人员的常用脚本。
  初识Ansible 2.8的源码时,笔者感受到了它的复杂与宏大。单纯地分析整个Ansible的源码及其所有细节并让Python初学者接受是一件非常困难的事情,笔者一开始也不打算这么做,直到有一天,笔者在Ansible的官方代码库中看到了最早发布的Ansible 1.1,随后几天迅速阅读和调试完该版本的源码,最终发现早期的Ansible 1.1与当前的Ansible 2.8有着共同的核心理念,即相同的模块运行机制及剧本集概念。Ansible 1.1只用非常少的代码就实现了一个在当时看来十分不错的运维工具,其核心设计思想一直延续至今,从未改变。笔者意识到,对于想要深入学习Ansible源码的运维人员而言,Ansible 1.1的源码是一份绝佳的入门材料。由浅入深是笔者最喜欢用的研究源码的方式,这样的理念也促成了本书的形成。此外,为了帮助读者理解基于Ansible的Playbook项目,笔者精选了自动部署工具ceph-ansible作为实战对象,它也是笔者完成各种Playbook项目的首选参考。
  本书融合了笔者在Ansible源码方面积累的一些学习心得,从小版本的Ansible源码,到当前流行的Ansible 2.8源码,乃至从模块运行原理,到Playbook的解析与执行,其间都有笔者总结的一些经验。
本书特色
  本书的主要特色有:
* 按照由浅入深的方式剖析三个经典版本的Ansible源码,每个版本的源码剖析重点各不相同。
* 对Ansible 1和Ansible 2中的核心源码做了大量的测试与实践,从而辅助读者更好地理解相关知识。
* 通过完整对比小版本的Ansible源码及对GitHub上相关源码的Bug进行溯源两种方式,帮助读者深入学习相关知识,从而吃透Ansible。
* 完整剖析ceph-ansible项目并深入实践与改造,帮助读者更好地理解基于Ansible开发的Playbook项目。
本书内容
  本书主要介绍Ansible的核心源码与Playbook项目实战,共分为6章。
  第1章剖析Ansible 1.1的源码,重点分析Ansible 1.1的底层通信机制及其模块运行原理。
  第2章剖析Ansible 1.9.6的源码,并对比它与Ansible 1.1源码的不同之处,另外还会重点分析Playbook的执行逻辑。
  第3章介绍Ansible 2.8中部分核心模块的使用并剖析其源码,同时还会介绍Playbook的常用语法。
  第4章剖析Ansible 2.8的核心源码。首先进行基础功能模块的源码分析,如常量值定义、inventory文件解析和模板渲染等,接着对Ansible 2.8中模块运行的全流程及剧本集的运行源码进行跟踪和分析。
  第5章深入学习Ansible源码,主要通过小版本的源码对比和GitHub上相关源码的Bug溯源两种方式,帮助读者熟悉深入学习Ansible源码的方式。
  第6章主要介绍基于Ansible的经典项目——ceph-ansible,并对该项目进行改造和优化。
读者对象
  顶级开源项目的源码本身既复杂又难懂,想要掌握本书的内容,领会笔者的分析思路,读者需要具备一定的Python基础,同时要有坚持学习的信念。本书不是帮助Python初学者入门,而是深度剖析Python顶级开源项目的源码,主要适合以下读者阅读:
* 拥有一定Python基础的运维人员;
* 熟练使用Ansible并想深入理解其核心源码的后端开发人员;
* 渴望进入开源世界,探索一个顶级开源项目全貌的初、中级程序员;
* 高等院校的老师和学生;
* 相关培训机构的学员。
版本说明
  在本书中,Ansible 1、Ansible 2和Ansible 2.8代表的是Ansible的几个大版本,但并非具体的发行版本,而Ansible 1.1、Ansible 1.9.6和Ansible 2.8.16分别是各大版本下的具体发行版本,笔者主要基于这三个发行版本剖析Ansible的源码,当然也会提及其他发行版本。
Ansible源码获取方式
  本书涉及的所有源码均已开源,读者可以通过https://releases.ansible.com/ansible网站进行下载。也可以在机工新阅读网站(www.cmpreading.com)上搜索到本书,然后单击“资料下载”按钮,即可在本书页面上找到下载链接。
售后支持
  Ansible从版本2开始已经变得庞大且臃肿,相关的小版本迭代也在飞速进行。尽管本书剖析的Ansible源码不是最新的2.10或者更高的版本,但其核心思想一直未曾改变,这是读者在学习Ansible源码时要重点把握的。笔者完成本书的主要资料正是Ansible各个版本的源码,许多关于Ansible的术语,如动作插件、通信插件等,都是直接翻译英文注释而来的,可能会有不当之处,加之笔者水平和精力所限,书中可能还存在一些疏漏与错误,敬请各位读者不吝指正。读者在阅读本书时若有疑问,可以发电子邮件到hzbook2017@163.com,笔者将尽量解答相关疑问。此外,读者还可以关注“源码探索之旅”微信公众号,笔者会在公众号上定期对读者的一些疑惑进行文字或视频解答,与读者共同成长与进步。
致谢
  首先感谢我的家人!没有父母和姐姐给我的鼓励与支持,就没有我的今天,我也不会有机会进入计算机行业,更不会有机会完成本书。
  感谢我的女朋友黄宝宝!她花费了很多时间和精力帮我整理书稿,并改正书稿中的不当语句和错别字。
  感谢天翼云科技有限公司的领导黄润怀副总经理和我的直接领导林洁琬组长!他们给我们组创造了一个难得的机会,让我们能全身心投入分布式存储领域的研发中。正是这次机会,让我接触了Ansible及部署分布式存储集群的开源工具ceph-deploy和ceph-ansible,从此踏上了Python工具的源码分析之旅。
  感谢媒体存储小分队的黄鹄、陈涛、毛廷鸿、谭伟杰、吴文峰和杨佑!他们拥有的丰富的互联网产品研发经验给了我很多帮助,让本书的写作比预期顺利很多。
  感谢本书的编辑欧振旭!他给了我出版本书的机会与动力,让我得以完成这本心中想了无数遍的书。
  还要感谢为本书的出版提供过帮助的其他编辑和朋友!没有他们的大力支持,本书也很难与读者见面。
  最后感谢本书读者!你们的肯定与支持会激励笔者继续前行。

  沈聪

上架指导

计算机\应用软件

封底文字

本书赞誉
本书作者在Ansible领域深耕多年,对Ansible的使用有丰富的经验,对其原理有深入的理解。本书不仅深入剖析Ansible的源码,而且对其底层通信和整体框架做了深入解析,内容既有广度也有深度。本书语言简练,内容通俗易懂,书中对Ansible源码的关键部分做了详细讲解,并对不同版本的Ansible源码做了比对分析,而且还结合实际项目进行深度优化,让读者能更好地理解和使用Ansible,是学习和研究Ansible的不二之选。本书是一本用心之作,很适合Python初中级软件工程师和运维工程师阅读。
——前华为高级工程师/核心系统部负责人 吴文峰

Ansible是自动化运维领域的常用工具。本书作者在这一领域深耕已久,具备扎实的理论功底和丰富的实战经验。我与作者共事多年,看到他把在天翼云的运维实践经验写作成书分享给读者,由衷地为他感到高兴。作者在书中对Ansible的原理和Playbook的运行机制娓娓道来,通过对核心模块源码的解析,一步步带领读者深入理解Ansible的设计理念、实现机制和演进过程。本书不仅对运维工程师具有较高的参考价值,而且也对有志于从事开源项目的Python开发工程师有很大的帮助。
——天翼云科技有限公司资深运维工程师 陈涛

本书从Ansible的源码出发,详细讲解它的运行方式及使用技巧。从对Ansible核心模块的源码解析,到基于现实应用场景对ceph-ansible源码进行定制化改造及优化,作者分享了自己在工作中积累的大量实战经验,可以帮助运维人员熟练掌握大规模集群运维及Ansible定制化开发。
——前网易资深运维工程师/十年运维老兵 毛廷鸿

Ansible源码获取方式
本书涉及的Ansible源代码已经开源,读者可以通过https://releases.ansible.com/ansible或www.hzbook.com网站获取相关版本的Ansible源码,具体见前言中的介绍。

作者简介

沈聪 编著:沈聪 毕业于武汉大学,获硕士学位。目前就职于天翼云科技有限公司,任高级后端开发工程师一职。2018年从Java开发转岗为Python运维开发,在云公司的媒体存储项目中参与存储集群建设、集群部署及统一运维管理平台的开发工作。喜爱钻研Python相关工具的源码,曾经研究过Django、Ansible、SaltStack和Scrapy等热门框架的源码并做了大量的笔记。在慕课网上发布过Nginx、Django和Scrapy等相关课程。

图书目录

前言
第1章 Ansible 1.1源码剖析 1
1.1 Ansible 1.1的环境搭建 1
1.1.1 Ansible 1.1测试环境搭建 1
1.1.2 Ansible 1.1调试环境搭建 5
1.2 Ansible 1.1的基本使用 9
1.2.1 Ansible 1.1模块说明 9
1.2.2 Ansible 1.1的常用模块 10
1.2.3 编写Ansible 1.1的Playbook 29
1.2.4 小结 31
1.3 Ansible 1.1源码概览 31
1.3.1 非源码文件与目录 31
1.3.2 源码文件 32
1.3.3 小结 45
1.4 Ansible 1.1底层通信代码解析 46
1.4.1 本地连接插件 46
1.4.2 基于paramiko模块连接插件 53
1.4.3 基于SSH命令连接插件 61
1.4.4 小结 68
1.5 ping模块的执行流程 68
1.5.1 ansible命令 68
1.5.2 runner目录下的核心源码 71
1.5.3 ping模块的运行流程 84
1.6 copy模块的执行流程 94
1.6.1 copy模块的动作插件 94
1.6.2 copy模块遗留问题的解决 96
1.6.3 Ansible模块的核心步骤小结 99
1.7 本章小结 100
第2章 Ansible 1.9.6源码剖析 101
2.1 Ansible 1.1和Ansible 1.9.6源码对比 101
2.2 快速上手Ansible 1.9.6 102
2.2.1 搭建Ansible 1.9.6测试环境 102
2.2.2 Ansible 1.9.6中的部分模块剖析 103
2.2.3 Ansible 1.9.6中Playbook的常用语法 125
2.3 再探Ansible 1.9.6源码 134
2.3.1 cache模块 134
2.3.2 shell_plugins插件 138
2.3.3 filter_plugins插件 142
2.3.4 lookup_plugins插件 145
2.3.5 辅助模块代码 148
2.4 追踪Ansible 1.9.6的模块运行机制 155
2.4.1 inventory目录 155
2.4.2 Runner类及其方法 157
2.5 解析Playbook的运行逻辑 171
2.5.1 准备测试的Playbook项目 171
2.5.2 相关类基础 174
2.5.3 追踪ansible-playbook命令的运行流程 187
2.6 本章小结 200
第3章 Ansible 2常用模块与Playbook语法 201
3.1 快速上手Ansible 2 201
3.2 Ansible 2的命令行使用 203
3.2.1 Ansible 2支持的常见选项 203
3.2.2 Ansible 2中的常用模块及其源码解析 215
3.2.3 Ansible 2模块的学习建议 241
3.3 Ansible 2中的Playbook语法 243
3.3.1 变量 243
3.3.2 条件判断 248
3.3.3 循环语句 251
3.3.4 等待语句 256
3.4 本章小结 260
第4章 Ansible 2核心源码剖析 261
4.1 Ansible 2.8核心源码初探 261
4.1.1 日志打印 261
4.1.2 默认配置 262
4.1.3 inventory文件解析 270
4.1.4 模板渲染 289
4.1.5 插件 303
4.2 Ansible 2.8模块运行的核心流程分析 305
4.2.1 命令入口 306
4.2.2 核心运行模块 308
4.2.3 流程总结 354
4.3 Ansible 2.8中Playbook的执行流程追踪 355
4.3.1 Playbook命令执行入口 355
4.3.2 核心代码追踪 356
4.3.3 Playbook中部分语法的源码解析 363
4.4 本章小结 371
第5章 Ansible源码的演进跟踪 372
5.1 Ansible 1.1到Ansible 1.2的演进之路 372
5.2 Ansible 2.8中的部分Bug溯源 391
5.2.1 Ansible 2.8中的ChangeLog 391
5.2.2 Ansible 2.8中的Bug复现及其修复过程 394
5.3 如何更深入地学习Ansible源码 416
第6章 Playbook项目实战 417
6.1 ceph-ansible项目介绍 417
6.2 ceph-ansible实战 418
6.2.1 使用ceph-ansible部署Ceph集群 418
6.2.2 ceph-ansible的其他功能 425
6.3 一个真实场景的改造 429
6.3.1 业务需求 429
6.3.2 手工实现 430
6.3.3 改造ceph-ansible 433
6.4 ceph-ansible项目源码探索 446
6.4.1 追踪ceph-mon服务的搭建过程 446
6.4.2 在CentOS 7下部署Ceph集群的简化版Playbook 469
6.4.3 小结 479

教学资源推荐
作者: [美]丹尼尔·A.弗莱施(Daniel A. Fleisch)著
作者: 试题研究编写组
作者: [加]斯蒂芬·布朗(Stephen Brown) 斯万克·瓦拉纳西(Zvonko Vranesic) 著
作者: (美) Patrick Juola 著
参考读物推荐
作者: [美]艾伦·B.唐尼(Allen B.Downey)著
作者: [美] 福布斯·格思里(Forbes Guthrie) 斯科特·罗威(Scott Lowe) 肯德里克·科尔曼(Kendrick Coleman) 著