奔跑吧Ansible(第2版)
  • 推荐0
  • 收藏7
  • 浏览2.5K

奔跑吧Ansible(第2版)

(加)Lorin Hochstein ,(加)Rene Moser (作者)  陈尔冬 (译者)

  • 书  号:978-7-121-35144-0
  • 出版日期:2018-10-30
  • 页  数:412
  • 开  本:16(178*233)
  • 出版状态:上市销售
  • 原书名: Ansible: Up and Running: Automating Configuration Management and Deployment the Easy Way 2nd Edition
  • 原书号:9781491979808
  • 维护人:张春雨
纸质版 ¥119.00
Ansible是近年来急速发展的开源配置管理工具。在Ansible之前,行业中已经有很多开源配置管理工具了,特别是大名鼎鼎的Puppet,简直是配置管理工具中的超级巨星。然而,Ansible依靠它的简单易用、“零依赖”以及弱抽象获得了无数开发者和运维工程师的青睐。遗憾的是,除了官方文档外,Ansible相关的优秀文档凤毛麟角,而本书恰恰就是为了缓解这一问题而编写的。作者在本书中演示了如何使用Ansible管理接近真实生产环境的案例。既展现了Ansible的强大功能,又能够帮助读者快速入门与上手,本书非常适合作为官方文档的补充或者搭配阅读。特别值得一提的是,本书第2版还增加了管理Windows服务器和网络设备方面的章节,并重新编写了Docker相关章节,及时地对第1版中的不足进行了改进。
自动化运维|DevOps绝配 前新浪CTO领衔翻译 基于真实生产环境案例 涵盖大量官方文档缺少的重要概念和主题 覆盖编写playbook|管理远程服务器|探索内置模块
本书赢得的赞誉
大规模集群的配置管理工具一直都是提升效率的利器。新浪在 2003年前后开始使用 CFengine;在 2010年前后,为了解决 CFengine的一些问题,逐渐在一些业务中用 SSH进行批量命令执行和配置文件拉取,这种组合一直用到现在,管理着数万台服务器,但现在基本上已经以 SSH为主了。本书的译者在新浪负责很多配置管理系统的开发,以我们的经验来看,基于 SSH进行配置管理有很多好处,这也是我对 Ansible很感兴趣的地方。充分利用系统现成的机制,不仅省去了 Agent的安装,在数千台规模的大型数据中心,少一些中心化服务还意味着少了一些路由和安全策略的配置,省去了很多不必要的麻烦。当然,Ansible还有很多吸引人的地方,非常值得你去学习和发现。
——童剑新浪研发中心总经理
Ansible作为自动化系统运维的一大利器,在构建整个体系过程中有着举足轻重的地位。 DSL、幂等性、playbook、大量的模板等都是它的魅力所在,再加上易封装、接口调用方便, Ansible正在被越来越多的大公司采用,包括独立使用以及与其他工具(如 Puppet)结合使用。
本书通过大量简单易用的实例帮助读者快速上手,通读全书会让你对 Ansible有一个全面的了解,动手操作书中的实例,可快速掌握 Ansible,剩下的就交给你的灵感吧。
——刘宇 @守住每一天,金山西山居架构师《Puppet实战》作者,《Puppet实战手册》译者之一
对于 DevOps,我自己的理解是运维即开发,人管理代码,代码管理机器,而不是人直接管理机器。Ansible帮我们实现了运维人员向运维开发的转型,让繁杂、危险的运维工作变得简单、安全和可控。本书秉承了 Ansible这一工具简明的一贯特点,不是长篇累牍地讲解复杂技术原理,而是列举了大量简明的实例,拿来阅读半小时即可上手解决实际问题。
——程辉 UnitedStack公司创始人兼 CEO
我在几个小时内就疯狂地“啃”完了第 1版《奔跑吧 Ansible》的手稿: Lorin妙笔生花,对 Ansible的讲解如行云流水。听到他与 René合写第 2版的时候我感到非常兴奋。在第 2版中,两位作者向读者展示了如何将一个非常有用的实用工具应用得出神入化,我想不出有什么内容是他们没有讨论到的。
—Jan-Piet Mens,咨询顾问
Ansible的万用指南。本书不仅适用于入门,也适用于了解如何使用高级功能提升你的 Ansible技能。 —Matt Jaynes,High Velocity Ops首席工程师
Ansible的美妙在于,你可以从实践入手,而它又易于快速实现原型,很快就能迭代起来,并且能不断解决问题。这当然很棒。然而,随着时间的推移,这种方式会导致知识和理解上的偏差,而且很难去调和。
《奔跑吧 Ansible》(第 2版)恰恰可以解决这个问题。因为它从 Ansible的基础知识一直
讲解到使用 YAML和 Jinja2的复杂性。而且本书还包含许多现成的案例可供学习和测试,
可以帮助读者深入了解自动化构建与部署生产环境。
在过去几年的培训课程和实践工作中,我总是向同事和客户推荐这本书。
—Dag Wieers,自由职业 Linux系统工程师, Ansible长期贡献者和咨询顾问
本书既为大家提供了简单功能的讲解,同时也深入探讨了 Ansible的配置管理方法。本书还包含很多提示和指引,并覆盖了各种形式的案例,例如 AWS、Windows和 Docker。
—Ingo Jochim, itelligence GMS/CIS Cloud Implementation经理
Lorin和 René字字珠玑,妙合无痕。他们手把手带领读者完成创建和管理 Ansible项目的所有重要步骤。本书不单单是一本 Ansible的参考书,它还涵盖了官方文档中缺少的几个重要概念和主题。它是 Ansible初学者的优秀学习资源,同时也包含许多对 Ansible中高级使用者很有帮助的概念与技巧。
—Dominique Barton, confirm IT solutions DevOps工程师
不管你是一名新手,还是一名已经在使用 Ansible并且希望继续取得进步的老程序员,本书都精辟地涵盖了你所需要了解的内容。它与同类书籍最大的区别在于,它采用了真实的例子,并解释了如何实现以及为什么会这样,这一大特点将帮助你更加深入地理解 Ansible。
—Paul Angus, ShapeBlue技术 VP

第2版译者序
距离上一版《奔跑吧 Ansible》中文版问世已经两年有余,非常荣幸还能主导本次第 2版的翻译工作。自第 1版出版后,不管是大规模服务器配置管理、Ansible社区,还是我的工作,都有了很多变化。
我从专注于运维能力提升的专家岗位上离职,转而回归基础设施研发与运维团队的技术管理工作。在新的岗位上,我有三个深切的感触:第一,自动化配置管理领域的触角已经深入网络设备领域;第二,在数据中心与 IT基础设施中,仍然有部分领域难以避免地使用 Windows操作系统;第三,容器化接过云计算的接力棒,正在席卷整个行业。也许是作者也和我有类似的感受,第 2版《奔跑吧 Ansible》如期而至,添加了 Windows管理和网络设备管理的相关章节。同时,还重写了 Docker一章。
除了行业的变化外,Ansible的大版本也来到了 2.x。在这个大版本中,Ansible带来了不少改变与新特性。使用 Ansible新版本的同时,继续使用第 1版的《奔跑吧 Ansible》作为工具书显然会让读者产生很多困惑,第 2版的出版恰好可以解决这个问题。
在第 2版的翻译中,我尝试让我所管理的 SRE团队都参与到本书的翻译工作中,感谢各位同事的辛勤劳动。参与翻译的人员如下:杨振振(第 1章和第 15章)、刘德鑫(第 2至 4章)、高雪(第 5至 7章)、张冠男(第 8至 9章和第 19章)、刘阳龙(第 11至 12章和第 18章)、李震(第 10章、第 16至 17章)以及刘志远(第 13至 14章)。

第1版译者序
由于诸多原因,早在童年时代计算机就进入了我的生活。对计算机的迷恋最终将我带进了计算机工程领域。而让我真正从玩耍转向工程化地对待计算机的分水岭是,对系统管理领域的接触。好吧,不管多么不乐意,这类工作在那个年代就是被称作网管。从我刚开始入门系统管理的时候,我就一直有一个疑问:如果一家公司足够大,有上百台计算机,该怎么管理呢?总不能一台台远程桌面连上去吧?嗯,没错,那个时候我使用的还是 Windows,而上百台计算机对于当时的我来说已经是一个很夸张的数字了。2007年我加入新浪平台架构部,这里的工作为我真正打开了新世界的大门。那个时候,部门正在使用 CFEngine管理上百台机器、为不同功能的服务器划分角色、为相同功能的服务器进行编号(像为公牛编号那样)、为配置文件编写模板来减少硬编码,所有这一切都用一种工程实践的方法解决了我之前的所有疑问。后来,我才知道这个实践性很强的方法的名字——配置管理。转眼之间,我已经在新浪工作了七年之久。这七年间,我的职位与工作内容有多次变化,但所围绕的工作核心从未改变:如何让数千台服务器按照我们想要的方式运转。为了更好地达到这一目的,我尝试过各种配置管理的方式:从 CFEngine到 Puppet、SaltStack,甚至是自行开发配置管理工具。但是每一种方式都与我理想中那个遵循“ KISS原则”、易于学习,且在功能上具有无穷扩展空间的配置管理工具相差甚远——直到经同事文旭的推荐,我认识了 Ansible。Ansible的轻量、最小化抽象层及轻松扩展与收缩一下子就吸引了我。到目前为止,它是与我理想中的配置管理工具最接近的一个。这样优秀的工具我当然不会自己独享。我曾经在各种场合向正在寻找合适配置管理工具的朋友与同事推荐 Ansible。我发现有一部分朋友虽然给予了 Ansible正面的评价,却对缺少中文文档感觉略有不便。这让我意识到语言仍旧是部分技术人员学习的障碍之一。显然,我并不具备帮助技术人员提升英语阅读水平的能力,但至少我可以将这本《奔跑吧 Ansible》的中文版带给大家,希望本书可以帮助一些读者快速上手 Ansible。
由于水平所限,本书中难免出现一些翻译错误,诚恳地欢迎大家向我或者出版社反馈本书中的各种错误。
最后,我想要感谢赵新宇、陈明杰和刘宇等朋友,他们在我翻译本书的过程中为我提供了无私的帮助和支持。还要感谢我的夫人张若金的支持与理解。没有你们就不会有本书的出版。


2012年 2月 Ansible创立的时候,它还是一个非常简单的项目,随后它的快速发展令我们十分惊喜。现在,它已经是上千人参与开发的产品了(如果包括参与贡献想法的人还会更多),并且几乎在每个国家都有人在使用。在各种技术会议中也总是能找到一些人在使用它,这在计算机领域是一件很不寻常的事。
Ansible的不平凡源自于它的平凡。Ansible并不企图做盘古开天地般的创新,而是从那些聪明的家伙已经提出的想法中提炼出精华,并将这些想法尽可能地落地。
Ansible旨在探求某些学术上的 IT 自动化方法(它们本身就是对大型繁杂的商业套件的一种反映)与简单粗暴解决问题的脚本之间的平衡点。另外,我们如何能将配置管理系统、部署发布系统、编排系统(orchestration project)以及千奇百怪但是非常重要的 shell脚本库用一个单一系统替换呢?这恰恰是 Ansible 要实现的。
我们可以从 IT自动化技术栈中移除主要架构组件吗?去掉管理性守护进程,转而依赖于 OpenSSH,意味着系统转眼间就可以开始管理一台新的计算机,而不需要在被管理的机器上安装任何东西。更深一层来说,系统更趋于可靠和安全。
我注意到,尝试使用自动化系统本该使事情变得简单,但实际上却变得更难了。并且编写以自动化为目的的东西就好像一个吸收时间的黑洞,使我无法在本应该更专注的事情上投入更多时间。况且我并不想在这种系统上投入数个月以成为这个领域的专家。
我个人尤其享受编写新的软件,而不喜欢在使其自动化方面花太多时间。简而言之,我希望自动化的事情尽快完成,这样我就能将更多时间投入到我更关注的事情上。Ansible并不是一个你需要整天和它打交道的系统。你可以很快把它拿起来,很快搞定,然后又很快回到你更关心的事情上面。我希望这些也会成为你喜欢 Ansible 的原因。
我花了大量时间来确保 Ansible的文档易于理解和掌握,其他渠道也还有很多不同形式的材料可以参考,参考这些资料进行实践是大有裨益的。在本书中, Lorin使用非常流畅的行文、适于逐步探索的顺序介绍了 Ansible。Lorin 几乎是从最开始就参与到 Ansible 项目中的,我真诚地感谢他做出的贡献。我还要真诚地感谢今天项目中的每一位成员,以及未来的每一位成员。
最后,希望大家喜欢这本书,享受瞬间就可以管理你的计算机的愉悦感!啊,对了,别忘记安装 cowsay! 1
—Michael DeHaan,Ansible 软件的创作者,Ansible公司前 CTO2 2015 年 4 月
1 Ansible 的创作者很有趣。从 0.5 版本开始,他给 Ansible留了一个彩蛋:如果你的机器中安装了 cowsay 的话,执行 playbook 的时候,终端上就会显示一头奶牛。最主要的是,他还在发布 0.5 版本的时候严肃地介绍了这么做的优点。——译者注
2 如 Michael DeHaan 自己所说,他其实更享受编写新软件。目前他已经从 Ansible 公司离职到 DataStax 工作。在 Ansible 公司的最后工作日,他写下了一篇博文: Happy Trails, Ansible(http:// michaeldehaan.net/ post/109595670406/happy-trails-ansible)。——译者注

第2版前言
自本书第 1版撰写(早在 2014年)以来,Ansible的世界发生了很大变化。Ansible项目完成了一次重大发布,版本号变为 2.0。项目之外也发生了很大变化:支持 Ansible项目的公司 Ansible, Inc.被 Red Hat收购。所幸 Red Hat的收购并没有影响 Ansible项目的发展,它仍在积极开发并努力赢得用户。
我们在这个版本中做了多处更改,最重要的变化是增加了 5个全新的章节。该书现在涵盖了回调插件、Windows主机、网络硬件和 Ansible Tower。在第 8章中添加了很多内容,将其扩展为新的一章“自定义 host、run和 handler”。我们还重写了“Docker”一章以涵盖新的 Docker模块。
为了与 Ansible 2.3版本兼容,我们更新了所有范例的代码。特别是将已弃用的 sudo语
句全部替换为 become。删除了对已弃用模块(如 docker、ec2_vpc和 ec2_ami_search)
的引用,并将它们改为使用新的模块。 “Vagrant”一章新收录了 Ansible本地置备器, “Amazon EC2”一章增加了 Packer Ansible远程置备器,“让 Ansible快到起飞”一章涵
盖了异步任务,以及在“调试 Ansible playbook”一章介绍了 2.1版中引入的调试器。
此外,还有一些细微的变化。例如, OpenSSH从使用十六进制编码的 MD5指纹切换到 base64编码的 SHA256指纹,并更新了相应的范例。最后,我们还修改了读者提交的勘误表。
关于人称的注释
本书的第 1版只有一个作者,并且经常使用第一人称单数:我。但是第 2版有两位作者,使用第一人称单数会比较奇怪。但我们还是决定保留它,因为它通常用于表达其中一位作者的意见。
致谢来自 Lorin
感谢 Jan-Piet Mens、Matt Jaynes和 John Jarvis审阅本书的草稿并提供反馈。感谢 SendGrid的 Isaac Saldana和 Mike Rowan对本书的支持。感谢 Michael DeHaan创建 Ansible并对社区做出的巨大贡献,以及对该书的反馈,包括他对为什么选择使用 Ansible这个名字的解释。感谢我的编辑 Brian Anderson,他对我的工作充满了无限的耐心。
感谢我的父母对我的无尽支持;感谢我的兄弟 Eric,我家的正牌作家;还要感谢我的两个儿子,Benjamin和 Julian。最后,感谢我的妻子 Stacy为我所做的一切。

来自 René
感谢我的家人和我的妻子 Simone对我的支持与爱,感谢我的三个孩子,Gil、Sarina和 Léanne,感谢他们给我带来的快乐;致所有向 Ansible贡献代码的人,感谢你们的工作;并特别感谢 Matthias Blaser向我推荐了 Ansible。



第1版前言
我为什么写这本书
多年前,我使用当时流行的 Python Web 框架 Django 编写了我人生中的第一个 Web 应用,当那个应用终于在我的台式计算机中成功运行时,油然而生的成就感让我至今难忘。首先运行 django manage.py runserver,然后打开浏览器并访问 http://localhost:8000,最后是见证奇迹的时刻——我的 Web 应用闪亮登场!
然而,随后我就发现让应用运行在 Linux服务器上有非常多令人无奈的事情。除了把 Django 本身和我的应用安装在服务器上之外,还必须安装 Apache 和 mod_ python模块。有了 mod_python模块,Apache 才可以运行 Django 应用。这还不算完,我还必须弄明白天书一般的 Apache配置文件,并把它配置为可以同时运行我的程序和其他所依赖的静态内容。
说实在的,每一步都不算难,但是想把所有的环节都配置正确也不是一件容易的事。作为一名程序员,我真不想不停地摆弄配置文件,我只是想让我的应用能运行而已。好在当我把一切都配置好之后,就不用再去动它了。然而几个月后的一天,噩耗传来,在另一台服务器上还得再经历一遍这些无奈,而且还是从头开始。
终于有一天,我发现痛苦的根源在于我用的方法不对。做这些事情的正确方法有一个学名 : 配置管理。使用配置管理要注意的一件重要的事情是:它是一种获取那些始终保持最新的配置与信息的方法。你不再需要频繁地搜索正确的文档或者查找以前的笔记。
不久以前,一位同事出于兴趣尝试使用 Ansible部署新项目,他请我帮忙推荐一些官方文档以外的 Ansible应用实践方面的参考资料。那时我才突然发现,好像官方文档以外没有什么资料可以推荐了。于是我决定填补这个空白,所以就有了这本书。可惜这本书对于那位同事来说太迟了,但希望对于你来说它来得正是时候。

谁适合读这本书
这本书是写给需要管理 Linux 或者类 UNIX 服务器的人的。如果你对下列术语如数家珍:系统管理、运维、部署、配置管理(看到这里也许有的读者在叹气)或者 DevOps,那么看到本书你也许会觉得如获至宝。
尽管我也在管理自己的 Linux服务器,但我的专业其实是软件开发。这意味着本书的范例将偏向于部署领域,尽管我同意 Andrew Clay Shafer的“部署与配置没有明确边界”的观点。

阅读指南
我对这样的提纲并不感兴趣:第 1 章涵盖这个,第 2 章涵盖那个,类似这样的内容不会有人真正仔细去看(反正我从没看过)。我认为目录反倒应更易于浏览。
本书的内容编排是适于从前向后顺序阅读的,后面章节中的内容会基于前面章节中的内容。本书包含大量范例,建议你按照本书的指导在自己的计算机上去实践这些范例。绝大部分范例都是面向 Web 应用的。

本书约定
本书使用的排版约定如下:
斜体(Italic)
用于表明新术语、URL、电子邮件地址、文件名、目录名和文件扩展名。
等宽字体(Constant width)
用于程序清单,以及在段落中对变量、函数名、数据库、数据类型、环境变量、语
句和关键字等程序元素的引用。
等宽加粗字体(Constant width bold)
用于显示命令或用户手工输入的文本。
等宽斜体(Constant width italic)
用于显示应该由用户提供或者根据上下文确定的值。

这个图标表示一般性的备注说明。这个图标表示提示或建议。

这个图标表示警告或提醒。

在线资源
本书中的样例代码都可以在本书的 GitHub 页面(http://github.com/ansiblebook/ansiblebook)上获取到。Ansible 官方也提供了丰富的文档(http://docs.ansible.com)供参考。
我还在 GitHub(https://github.com/lorin/ansible-quickref)上维护了一个简明参考手册。
Ansible的代码存放在 GitHub上(https://github.com/ansible/ansible),在之前版本中,它被分散到三个仓库中保存。但是从 Ansible 2.3版本开始,所有的代码都放在同一个仓库中进行维护了。
建议将 Ansible的模块索引(http://bit.ly/1Dt75tg)加到你的收藏夹中,在使用 Ansible的过程中,你将会时常需要去查看它,网址为 http://docs.ansible.com/modules_by_ category.html。Ansible Galaxy是一个由社区共同维护的 Ansible角色仓库,网址为 https://galaxy.ansible.com/。如果你有任何关于 Ansible的问题,都可以到 Ansible项目的 Google Group 中讨论(https://bit.ly/1Dt79ZT)。
如果你希望向 Ansible开发组贡献代码,可以访问 Ansible开发组的 Google Group: https://bit.ly/1Dt79ZT。
在 irc.freenode.net 上还有一个非常活跃的 #ansible IRC 频道,在那里你可以得到更为实时的帮助。
本书旨在帮助你解决实际问题。一般来说,除大批量使用代码之外,如果你需要在自己的程序或文档中使用本书提供的范例代码是不需要联系我们取得授权的。例如,使用本书中的几段代码编写一个程序不需要向我们申请许可。但是销售或者分发 O’Reilly图书附带的代码光盘则必须事先获得授权。引用书中的代码来回答问题也无须我们授权。将大段的范例代码整合到自己的产品文档中则必须经过我们的授权。
我们非常希望你能在引用本书时表明出处,但并不强求。出处一般包含书名、作者、
出版商和 ISBN。例如: Ansible: Up and Running by Lorin Hochstein and René Moser (O’Reilly). Copyright 2017 O’Reilly Media, Inc.,978-1-491-97980-8.”
如果你对范例代码的使用不属于上述一般性合理情形,或者对许可范围存疑,欢迎随时通过 permissions@oreilly.com与我们联系。

联系我们
请将对本书的评价和存在的问题通过如下地址告知出版者:
美国:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街 2 号成铭大厦 C 座 807 室(100035)
奥莱利技术咨询(北京)有限公司
对于本书的评论和技术性的问题,请发送电子邮件到:
bookquestions@oreilly.com
关于我们的书籍、课程、会议和新闻的更多信息,请参阅我们的网站 http://www.oreilly. com。
在 Facebook 上找到我们: http://facebook.com/oreilly
在 Twitter 上关注我们: http://twitter.com/oreillymedia
在 YouTube 上观看我们: http://www.youtube.com/oreillymedia

读者服务
轻松注册成为博文视点社区用户(www.broadview.com.cn),扫码直达本书页面。
. 提交勘误:你对书中内容的修改意见可在提交勘误处提交,若被采纳,将获赠博文视点社区积分(在购买电子书时,积分可用来抵扣相应金额)。
. 交流互动:在页面下方读者评论处留下你的疑问或观点,与我们和其他读者一同学习交流。
页面入口: http://www.broadview.com.cn/35144


目录

序. .................................... xxiii
第 2版前言. .......................... xxv
第 1版前言. ........................ xxvii
第 1章 简介........................... 1
关于版本的说明 .................... 2
Ansible的优势 ...................... 2
Ansible如何运作 .................. 3
Ansible的精妙设计赏析 ....... 4
易读的语法.................... 4
远程主机无须安装依赖 . 5
基于推送模式 ................ 5
使用 Ansible管理小规模环境 ................................... 6
内置模块 ....................... 6
非常轻量的抽象层 ........ 7
Ansible太过于简单了吗 ....... 8
需要哪些基础知识 ................ 8
哪些内容不会涉及 ................ 9
安装 Ansible ....................... 10
建立一台用于测试的服务器 ........................................... 11
使用 Vagrant来创建测试服务器 ............................. 11
将测试服务器的信息配置在 Ansible中 .................. 14
使用 ansible.cfg文件来简化配置 ............................ 16
展望 .................................... 19

第 2章 playbook:一切的开始. 20
一些准备工作 ..................... 20
一个简单的 playbook .......... 21
定义 Nginx的配置文件 ........................................... 23
创建一个定制的首页 ... 24
创建一个 webservers群组 ....................................... 25
运行这个 playbook .............. 25
YAML格式的 playbook ...... 27
文件起始 ..................... 27
注释 ............................. 27
字符串 ......................... 27
布尔型 ......................... 28
列表 ............................. 28
字典 ............................. 28
分行 ............................. 29
剖析 playbook ..................... 30
play.............................. 31
task .............................. 32
模块 ............................. 33
将它们整合在一起 ...... 34
执行 Ansible后发生变化了吗?跟踪主机状态 .............. 35
来点更酷炫的:添加 TLS支持 ...................................... 35
生成 TLS证书 ............. 36
变量 ............................. 37
生成 Nginx配置模板 .. 39
handler ......................... 41
运行 playbook.............. 42

第 3章 使用 inventory描述你的服务器................................... 44
inventory文件..................... 44
准备工作:创建多台 Vagrant虚拟机 ............................. 45
inventory 行为参数 ............. 48
ansible_connection ...... 49
ansible_shell_type ....... 49
ansible_python_interpreter ....................................... 49
ansible_*_interpreter ... 49
改变行为参数的默认值 ........................................... 50
群组 .................................... 50
范例:部署一个 Django应用.................................. 51
别名和端口.................. 54
群组的群组.................. 54
为主机编号(宠物还是公牛 ) ................................. 55
在 inventory内部的主机和组变量 .................................. 55
在各自文件中的主机和组变量 ....................................... 57
动态 inventory..................... 59
动态 inventory脚本接口 ......................................... 60
编写动态 inventory脚本 ......................................... 61
预装 inventory脚本 ..... 65
将 inventory分割到多个文件 ......................................... 65
使用 add_host和 group_by在运行时添加条目 ............... 65
add_host ...................... 65
group_by ..................... 67

第 4章 变量与 fact................ 69
在 playbook中定义变量 ..... 69
检查变量的值 ..................... 70
registering 变量 ................... 70
fact ...................................... 74
查看与某台服务器关联的所有 fact ......................... 75
查看 fact子集 .............. 75
任何模块都可以返回 fact ........................................ 77
本地 fact ...................... 77
使用 set_fact定义新变量 .... 79
内置变量 ............................. 79
hostvars ....................... 80
inventory_hostname ..... 80
groups .......................... 81
在命令行设置变量 .............. 81
优先级 ................................. 82

第 5章 引入测试应用:Mezzanine. ....................................... 84
为什么向生产环境部署软件是一件复杂的事 ................. 84
PostgreSQL:数据库 ... 88
Gunicorn:应用服务器 ........................................... 88
Nginx:Web服务器 .... 89
Supervisor:进程管理器 ......................................... 90

第 6章 使用 Ansible部署 Mezzanine....................................91
列出 playbook中的 task...... 91
组织要部署的文件 .............. 92
变量和秘密变量 .................. 93
使用迭代(with_items)安装多个软件包 ...................... 95
向任务中添加 Become语句 96
更新 apt缓存 ...................... 97
使用 Git获取项目源码 ....... 98
将 Mezzanine和其他软件包安装到 virtualenv中 ......... 100
任务中的复杂参数:稍微跑个题 .................................. 103
配置数据库 ....................... 106
从模板生成 local_settings.py文件 ................................ 107
运行 django-manage命令 . 110
在应用环境中运行定制的 Python脚本 ..........................111
设置服务配置文件 .... 114
启用 Nginx配置文件 ........ 117
安装 TLS证书 .................. 117
安装 Twitter计划任务....... 119
playbook全文 ................... 119
在 Vagrant虚拟机上运行 playbook ............................... 123
故障排查 ........................... 124
无法拉取 Git仓库代码 .......................................... 124
192.168.33.10.xip.io地址不可达 ........................... 124
错误的请求(400) .... 125
将 Mezzanine部署到多台主机 ..................................... 125

第 7章 role:扩展你的 playbook........................................126
role的基本构成 ................ 126
范例: database和 mezzanine role ................................ 127
在你的 playbook中使用 role ........................................ 127
pre-tasks和 post-tasks ....... 129
用于部署数据库的 database role ................................... 130
用于部署 Mezzanine的 mezzanine role ........................ 132
使用 ansible-galaxy创建 role文件与目录 .................... 137
从属 role ........................... 138
Ansible Galaxy.................. 139
Web界面 ................... 139
命令行工具................ 139
将你自己的 role发布到 Galaxy............................. 140

第 8章 复杂的 playbook....... 141
处理不良行为的命令: changed_when和 failed_when . 141
过滤器 ............................... 145
默认过滤器................ 145
用于注册变量的过滤器 ......................................... 145
应用于文件路径的过滤器 ..................................... 146
编写你自己的过滤器 . 147
lookup ............................... 148
file ............................. 149
pipe............................ 150
env ............................. 150
password.................... 150
template ..................... 151
csvfile ........................ 151
dnstxt ......................... 152
redis_kv ..................... 153
etcd ............................ 154
编写你自己的 lookup插件 .................................... 155
更复杂的循环 ................... 155
with_lines .................. 156
with_fileglob ............. 156
with_dict .................... 157
将循环结构用作 lookup插件 ................................ 158
循环控制 ........................... 158
设置变量名称 ............ 158
为输出增加标签 ........ 160
include .............................. 161
动态引用 ................... 162
role include ................ 162
block ................................. 164
利用 block进行异常处理 .. 164
使用 Vault加密敏感数据 .. 168

第 9章 自定义host、run和 handler. ...................................170
通过模式匹配指定主机..... 170
限制运行的主机 ................ 171
在控制主机上运行 task ..... 171
在涉及的主机以外的机器上运行 task .......................... 172
逐台主机运行 ................... 173
一次运行一批主机 ............ 174
只执行一次 ....................... 175
运行策略 ........................... 175
linear策略 ................. 176
free策略 .................... 177
高级 handler...................... 179
Pre和 Post task中的 handler ................................. 179
flush handler .............. 180
handlers listen ............ 182
手动采集 fact .................... 188
从主机获取 IP地址 .......... 189

第 10章 回调插件. ................ 191
stdout插件 ........................ 191
actionable 插件 .......... 192
debug插件 ................ 192
dense插件 ................. 193
json插件 ................... 193
minimal插件 ............. 194
oneline插件 .............. 195
selective 插件 ............ 195
skippy插件................ 195
其他插件 ........................... 195
foreman插件 ............. 196
hipchat插件 .............. 196
jabber插件 ................ 197
junit插件 ................... 197
log_plays插件 ........... 198
logentries插件........... 198
logstash插件 ............. 198
mail插件 ................... 199
osx_say插件 ............. 199
profile_tasks插件 ...... 199
slack插件 .................. 200
timer插件 .................. 200

第 11章 让 Ansible快到飞起..201

SSH多路复用以及长连接保持 ..................................... 201
手动启动 SSH多路复用 ........................................ 202
Ansible中的 SSH多路复用配置........................... 203
流水线 ............................... 205
启用流水线................ 205
将主机配置为支持流水线 ..................................... 205
fact缓存............................ 207
JSON文件作为 fact缓存后端 ............................... 208
Redis作为 fact缓存后端 ...................................... 209
Memcached作为 fact缓存后端 ............................. 209
并行 .................................. 210
异步执行并发任务 ............ 211

第 12章 自定制模块..............213
范例:检测远程服务器是否可达 .................................. 213
使用 script模块而不是自己写模块 ............................... 213
实现 can_reach模块.......... 214
在哪里放置自定制模块..... 214
Ansible如何调用模块 ....... 215
用参数生成一个独立的 Python脚本(只限于 Python模块) ............................ 215
将模块复制到服务器 . 215
在服务器上创建一个参数文件(只限于非 Python模块) ................................. 215
调用模块 ................... 216
期望输出 ........................... 216
Ansible的输出变量 ... 217
用 Python实现模块 .......... 217
解析参数 ................... 219
获取参数的值 ............ 220
导入 AnsibleModule辅助类 .................................. 220
参数选项 ................... 221
AnsibleModule的初始化参数 ............................... 223
返回成功或失败 ........ 227
调用外部命令 ............ 227
检查模式 (演习模式 ) ........................................... 229
文档化你的模块 ................ 230
调试模块 ........................... 231
使用 Bash实现模块 .......... 233
指定 Bash的解释器路径... 234
示例模块 ........................... 235

第 13章 Vagrant................236
Vagrant的便捷配置选项 ... 236
端口转发和私有 IP地址 ....................................... 236
代理转发 ................... 238
Ansible置备器 .................. 238
置备器何时运行 ................ 239
由 Vagrant生成 inventory . 239
并行配置 ........................... 240
指定群组 ........................... 241
Ansible本地置备器 .......... 242

第 14章 Amazon.EC2. ........244
术语 .................................. 246
实例 ........................... 246
Amazon 系统镜像 ..... 246
标签 ........................... 247
指定认证凭据 ................... 247
环境变量 ................... 248
配置文件 ................... 248
必要条件: Boto Python 库 ........................................... 249
动态 inventory................... 249
inventory 缓存 ........... 251
其他配置项................ 252
自动生成群组 ............ 252
使用标签定义动态群组..... 253
把标签应用到现有资源 ......................................... 253
更好听的群组名 ........ 254
EC2 Virtual Private Cloud和 EC2 Classic ..................... 255
配置 ansible.cfg 支持使用 EC2 ..................................... 256
启动新的实例 ................... 256
EC2 密钥对 ....................... 258
创建新的密钥 ............ 258
上传已有密钥 ............ 260
安全组 ............................... 260
允许的 IP 地址 .......... 261
安全组端口................ 262
获取最新的 AMI ............... 262
向群组中添加一个新的实例 ......................................... 264
等待服务器启动 ................ 266
创建实例的幂等性方法..... 267
全部加在一起 ................... 267
指定 Virtual Private Cloud 270
动态 inventory和 VPC .......................................... 274
构建 AMI .......................... 274
使用 ec2_ami模块 .... 274
使用 Packer ............... 275
其他模块 ........................... 279

第 15章 Docker.................280
Docker与 Ansible配合案例 ......................................... 281
Docker应用的生命周期 .... 282
样例应用: Ghost .............. 283
连接到 Docker Daemon..... 283
在本地机器上运行容器..... 283
从 Dockerfile 构建镜像 ..... 284
在本机上对多个容器进行编排 ..................................... 286
推送镜像到 Docker registry .......................................... 287
查询本地镜像 ................... 289
部署 Docker化的应用 ...... 291
后端: Postgres .......... 291
前端 ........................... 292
前端: Ghost .............. 293
前端: Nginx ............. 293
清除容器 ................... 294
直连容器 ................... 294
Ansible Container .............. 296
Conductor .................. 296
创建 Docker镜像 ...... 297
本地运行 ................... 301
发布镜像到 registry ... 302
将容器部署到生产环境 ......................................... 303

第 16章 调试 Ansible.playbook. ........................................304
人类可读的错误信息 ........ 304
调试 SSH问题 .................. 305
debug模块 ........................ 307
playbook调试器 ............... 307
assert模块 ......................... 309
在执行前检查你的 playbook ......................................... 311
语法检查 ................... 311
列出 host ................... 311
列出 task .................... 312
检测模式 ................... 312
显示文件变化 ............ 313
限制指定的 task运行 ........ 313
step ............................ 313
start-at-task ................ 314
tags ............................ 314

第 17章 管理 Windows主机..316
连接到 Windows ............... 316
PowerShell ........................ 317
Windows 模块 ................... 320
第一个 playbook ............... 320
升级 Windows ................... 321
添加本地用户 ................... 323
结论 .................................. 326

第 18章 使用 Ansible管理网络设备......................................327
网络模块现状 ................... 327
所支持的网络供应商列表 . 328
网络设备的准备工作 ........ 328
支持 SSH身份验证 ... 329
模块如何工作 ................... 331
我们的第一个 playbook .... 332
网络模块中的 inventory和变量.................................... 333
本地连接 ................... 335
连接配置 ................... 335
身份验证变量 ............ 336
保存配置 ................... 336
使用文件中的配置 ............ 338
模板,模板,模板 ............ 341
收集 fact ............................ 344
结论 .................................. 345

第 19章 Ansible.Tower:Ansible企业版. ............................346
订阅模式 ........................... 347
试用 Ansible Tower ... 347
Ansible Tower能解决什么问题 .................................... 348
访问控制 ................... 348
项目管理 ................... 349
inventory管理 ........... 350
按作业模板运行作业 . 351
RESTful API ..................... 354
Ansible Tower的命令行 ... 354
安装 ........................... 355
创建用户 ................... 355
运行作业 ................... 357
以终为始 ........................... 358
附录A SSH.......................359
附录B 在 EC2认证中使用 IAM.role.....................................369
术语表................................373
参考文献..............................379

读者评论

相关图书

Terraform:多云、混合云环境下实现基础设施即代码(第2版)

Yevgeniy Brikman ( (作者) 白宇 (译者)

Terraform工具已经成为DevOps领域的关键角色。在各种云平台和虚拟化环境(如AWS、Goolge Cloud、Azure等)中,可以对基础设施即代码(...

¥108.00

DevOps安全:云安全服务

Julien Vehent (作者) 覃宇 (译者)

本书主要介绍了 DevOps 实践中最容易被忽视的一环——安全,并且对云原生服务的安全保障也做了全面的阐述。书中详细介绍了 Web 攻击防范、权限验证、日志监控...

¥108.00

企业级DevOps技术与工具实战

刘淼 张笑梅 (作者)

本书包含DevOps理论的介绍,深入浅出地解析了DevOps体系所包括的Agile/Lean/ITSM/TPS各种方法的精粹和脉络,为DevOps爱好者提供了较...

 

SRE生存指南:系统中断响应与正常运行时间最大化

Nat Welch (作者) 冯文辉 冯文辉 (译者)

站点可靠性工程(Site Reliability Engineering,简称SRE)是一个令人兴奋的新兴领域,它专注于如何确保系统稳定、可靠地运行。本书基于一...

 

Zabbix企业级分布式监控系统(第2版)

吴兆松 (作者)

本书基于稳定版本Zabbix 4.0,对Zabbix的各项功能进行了详细而深入的讲解,包括监控系统规划、安装包定制、架构高可用、性能调优、指标数据采集、自动化处...

 

Nginx实战:基于Lua语言的配置、开发与架构详解

王力 王力 (作者)

本书主要讲解了Nginx在反向代理和应用开发中的作用,阅读本书可以了解Nginx在互联网开发中扮演的多个角色,充分利用这些角色的各项功能有助于提升服务的整体性能...

¥47.40