编辑推荐

适读人群:软件开发;系统管理者。

在当下百家争鸣的配置管理工具领域中,Ansible有着独特的优势:原生即轻量。你不需要在要管理的机器上安装任何软件,并且它的学习曲线非常平缓。在第2版中,不管你是要将代码部署到生产环境的开发者还是寻求更好的自动化解决方案的系统管理员,这本使用指南都将帮助你快速地在生产环境中使用这个工具。

作者LorinHochstein和RenéMoser示范了如何编写playbook(Ansible中的配置管理脚本),如何管理远程服务器。除此之外,他们还会带领你探索这个工具的潜在法宝:内置模块。通过阅读《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》,你会发现,Ansible拥有你所需要的功能的同时,还简单得超出你的想象。

■理解Ansible区别于其他配置管理系统的特点

■使用YAML语法编写你自己的playbook

■部署一个复杂应用的完整范例

■管理Windows服务器和自动化配置网络设备

■将应用部署到AMZNEC2或其他云平台

■使用Ansible创建Docker镜像并部署Docker容器

建议从头开始阅读《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》,后面的章节会建立在前面章节的基础之上。因为它是以教程风格编写的,所以你可以在自己的机器上跟随讲解一步步操作。并且,大多数实例都与Web应用程序相关,对于生产环境非常有借鉴意义。

内容简介

Ansible是近年来急速发展的开源配置管理工具。在Ansible之前,行业中已经有很多开源配置管理工具了,特别是大名鼎鼎的Puppet,简直是配置管理工具中的超级star。然而,Ansible依靠它的简单易用、“零依赖”以及弱抽象获得了无数开发者和运维工程师的青睐。遗憾的是,除了官方文档外,Ansible相关的优秀文档凤毛麟角,而《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》恰恰就是为了缓解这一问题而编写的。作者在《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》中演示了如何使用Ansible管理接近真实生产环境的案例。既展现了Ansible的强大功能,又能够帮助读者快速入门与上手,《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》非常适合作为官方文档的补充或者搭配阅读。特别值得一提的是,《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》第2版还增加了管理Windows服务器和网络设备方面的章节,并重新编写了Docker相关章节,及时地对第1版中的不足进行了改进。

作者简介

LorinHochsteinLorinHochestin是Netflix的Chaos工程团队的高级软件工程师。他曾在SendGrid实验室担任高级软件工程师,在那之前曾在NimbisServices担任云服务首席架构师,还曾经是加州大学信息科学院的计算机科学家。从小在魁北克蒙特利尔长大,除了偶尔会说“闭上灯”这种话之外,从他的口音中你绝对猜不出他是加拿大人。他正在回归学术界:他已经在内布拉斯加大学林肯分校作为教授计算机科学与应用的副教授两年。此外,他还曾作为计算机科学家在南加州大学信息科学院工作过四年。他在麦吉尔大学取得了计算机工程学学士学位,在波士顿大学取得了电子工程学硕士学位,并在马里兰大学帕克分校取得了计算机科学的博士学位。他现在在Netflix的Chaos工程团队任高级软件工程师。

RenéMoser是一位瑞士籍系统工程师,ASFCloudStack的代码贡献者,Ansible中与CloudStack集成相关部分的作者,并从2016年起一直是Ansible社区的核心成员。与妻子和三个孩子定居在瑞士。他获得了IT专业的高等教育文凭。在IT领域,他喜欢以简单的方式实现需求并不断扩展。他沉浸于开源社区已超过15年,他是Ansible核心贡献者和40多个Ansible模块的作者,他还是ApacheCloudStack项目管理委员会成员及代码贡献者。他目前在SWISSTXT任职系统工程师。

译者简介

主译人员曾于新浪任职技术总监,负责私有云平台研发与运维并支撑新浪微博从零至上市高速发展的过程。后于华为任职技术专家,致力于提升华为公有云运维能力。2016年加入贝壳找房前身链家网,并一直致力于打造基于ansible的自动化平台。

精彩书评

大规模集群的配置管理工具一直都是提升效率的利器。新浪在2003年前后开始使用CFengine;在2010年前后,为了解决CFengine的一些问题,逐渐在一些业务中用SSH进行批量命令执行和配置文件拉取,这种组合一直用到现在,管理着数万台服务器,但现在基本上已经以SSH为主了。《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》的译者在新浪负责很多配置管理系统的开发,以我们的经验来看,基于SSH进行配置管理有很多好处,这也是我对Ansible很感兴趣的地方。充分利用系统现成的机制,不仅省去了Agent的安装,在数千台规模的大型数据中心,少一些中心化服务还意味着少了一些路由和安全策略的配置,省去了很多不必要的麻烦。当然,Ansible还有很多吸引人的地方,非常值得你去学习和发现。

——童剑新浪研发中心总经理

Ansible作为自动化系统运维的一大利器,在构建整个体系过程中有着举足轻重的地位。DSL、幂等性、playbook、大量的模板等都是它的魅力所在,再加上易封装、接口调用方便,Ansible正在被越来越多的大公司采用,包括独立使用以及与其他工具(如Puppet)结合使用。《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》通过大量简单易用的实例帮助读者快速上手,通读《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》会让你对Ansible有一个全面的了解,动手操作书中的实例,可快速掌握Ansible,剩下的就交给你的灵感吧。

——刘宇@守住每一天,金山西山居架构师《Puppet实战》作者,《Puppet实战手册》译者之一

对于DevOps,我自己的理解是运维即开发,人管理代码,代码管理机器,而不是人直接管理机器。Ansible帮我们实现了运维人员向运维开发的转型,让繁杂、危险的运维工作变得简单、安全和可控。《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》秉承了Ansible这一工具简明的一贯特点,不是长篇累牍地讲解复杂技术原理,而是列举了大量简明的实例,拿来阅读半小时即可上手解决实际问题。

——程辉UnitedStack公司创始人兼CEO

我在几个小时内就疯狂地“啃”完了第1版《奔跑吧Ansible》的手稿:Lorin妙笔生花,对Ansible的讲解如行云流水。听到他与René合写第2版的时候我感到非常兴奋。在第2版中,两位作者向读者展示了如何将一个非常有用的实用工具应用得出神入化,我想不出有什么内容是他们没有讨论到的。

—Jan-PietMens,咨询顾问

Ansible的万用指南。《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》不仅适用于入门,也适用于了解如何使用高级功能提升你的Ansible技能。

——MattJaynes,HighVelocityOps首席工程师

Ansible的美妙在于,你可以从实践入手,而它又易于快速实现原型,很快就能迭代起来,并且能不断解决问题。这当然很棒。然而,随着时间的推移,这种方式会导致知识和理解上的偏差,而且很难去调和。《奔跑吧Ansible》(第2版)恰恰可以解决这个问题。因为它从Ansible的基础知识一直讲解到使用YAML和Jinja2的复杂性。而且《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》还包含许多现成的案例可供学习和测试,可以帮助读者深入了解自动化构建与部署生产环境。在过去几年的培训课程和实践工作中,我总是向同事和客户推荐这《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》。

——DagWieers,自由职业Linux系统工程师,Ansible长期贡献者和咨询顾问

奔跑吧Ansible(第2版):探索自动化配置与部署捷径》既为大家提供了简单功能的讲解,同时也深入探讨了Ansible的配置管理方法。《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》还包含很多提示和指引,并覆盖了各种形式的案例,例如AWS、Windows和Docker。

——IngoJochim,itelligenceGMS/CISCloudImplementation经理

Lorin和René字字珠玑,妙合无痕。他们手把手带领读者完成创建和管理Ansible项目的所有重要步骤。《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》不单单是一本Ansible的参考书,它还涵盖了官方文档中缺少的几个重要概念和主题。它是Ansible初学者的优秀学习资源,同时也包含许多对Ansible中高级使用者很有帮助的概念与技巧。

——DominiqueBarton,confirmITsolutionsDevOps工程师

不管你是一名新手,还是一名已经在使用Ansible并且希望继续取得进步的老程序员,《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》都精辟地涵盖了你所需要了解的内容。它与同类书籍至大的区别在于,它采用了真实的例子,并解释了如何实现以及为什么会这样,这一大特点将帮助你更加深入地理解Ansible。

——PaulAngus,ShapeBlue技术VP

我在几个小时内就疯狂地“啃”完了第1版《奔跑吧Ansible》的手稿:Lorin对Ansible的讲解如行云流水,妙笔生花。听到他与René合作第2版的时候我感到非常兴奋。在第2版中,两位作者向读者展示了如何将一个非常有用的实用工具应用得出神入化,我想不出有什么内容他们没有讨论到的。

——Jan-PietMens咨询顾问

目录

序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

安装Ansible10

建立一台用于测试的服务器11

使用Vagrant来创建测试服务器11

将测试服务器的信息配置在Ansible中14

使用ansible.cfg文件来简化配置16

展望19

第2章 playbook:一切的开始.20

一些准备工作20

一个简单的playbook21

定义Nginx的配置文件23

创建一个定制的首页24

创建一个webservers群组25

运行这个playbook25

YAML格式的playbook27

文件起始27

注释27

字符串27

布尔型28

列表28

字典28

分行29

剖析playbook30

play31

task32

模块33

将它们整合在一起34

执行Ansible后发生变化了吗?跟踪主机状态35

来点更酷炫的:添加TLS支持35

生成TLS证书36

变量37

生成Nginx配置模板..39

handler41

运行playbook42

第3章 使用inventory描述你的服务器44

inventory文件44

准备工作:创建多台Vagrant虚拟机45

inventory行为参数48

ansible_connection49

ansible_shell_type49

ansible_python_interpreter49

ansible_*_interpreter49

改变行为参数的默认值50

群组50

范例:部署一个Django应用51

别名和端口54

群组的群组54

为主机编号(宠物还是公牛)55

在inventory内部的主机和组变量55

在各自文件中的主机和组变量57

动态inventory59

动态inventory脚本接口60

编写动态inventory脚本61

预装inventory脚本65

将inventory分割到多个文件65

使用add_host和group_by在运行时添加条目65

add_host65

group_by67

第4章 变量与fact69

在playbook中定义变量69

检查变量的值70

registering变量70

fact74

查看与某台服务器关联的所有fact75

查看fact子集75

任何模块都可以返回fact77

本地fact77

使用set_fact定义新变量79

内置变量79

hostvars80

inventory_hostname80

groups81

在命令行设置变量81

优先级82

第5章 引入测试应用:Mezzanine84

为什么向生产环境部署软件是一件复杂的事84

PostgreSQL:数据库88

Gunicorn:应用服务器88

Nginx:Web服务器89

Supervisor:进程管理器90

第6章 使用Ansible部署Mezzanine91

列出playbook中的task91

组织要部署的文件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虚拟机上运行playbook123

故障排查124

无法拉取Git仓库代码124

192.168.33.10.xip.io地址不可达124

错误的请求(400)125

将Mezzanine部署到多台主机125

第7章 role:扩展你的playbook126

role的基本构成126

范例:database和mezzaninerole127

在你的playbook中使用role127

pre-tasks和post-tasks129

用于部署数据库的databaserole130

用于部署Mezzanine的mezzaninerole132

使用ansible-galaxy创建role文件与目录137

从属role138

AnsibleGalaxy139

Web界面139

命令行工具139

将你自己的role发布到Galaxy140

第8章 复杂的playbook141

处理不良行为的命令:changed_when和failed_when.141

过滤器145

默认过滤器145

用于注册变量的过滤器145

应用于文件路径的过滤器146

编写你自己的过滤器.147

lookup148

file149

pipe150

env150

password150

template151

csvfile151

dnstxt152

redis_kv153

etcd154

编写你自己的lookup插件155

更复杂的循环155

with_lines156

with_fileglob156

with_dict157

将循环结构用作lookup插件158

循环控制158

设置变量名称158

为输出增加标签160

include161

动态引用162

roleinclude162

block164

利用block进行异常处理164

使用Vault加密敏感数据168

第9章 自定义host、run和handler.170

通过模式匹配指定主机170

限制运行的主机171

在控制主机上运行task171

在涉及的主机以外的机器上运行task172

逐台主机运行173

一次运行一批主机174

只执行一次175

运行策略175

linear策略176

free策略177

高级handler179

Pre和Posttask中的handler179

flushhandler180

handlerslisten182

手动采集fact188

从主机获取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章 Vagrant236

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

必要条件:BotoPython库249

动态inventory249

inventory缓存251

其他配置项252

自动生成群组252

使用标签定义动态群组253

把标签应用到现有资源253

更好听的群组名254

EC2VirtualPrivateCloud和EC2Classic255

配置ansible.cfg支持使用EC2256

启动新的实例256

EC2密钥对258

创建新的密钥258

上传已有密钥260

安全组260

允许的IP地址261

安全组端口262

获取最新的AMI262

向群组中添加一个新的实例264

等待服务器启动266

创建实例的幂等性方法267

全部加在一起267

指定VirtualPrivateCloud270

动态inventory和VPC274

构建AMI274

使用ec2_ami模块274

使用Packer275

其他模块279

第15章 Docker280

Docker与Ansible配合案例281

Docker应用的生命周期282

样例应用:Ghost283

连接到DockerDaemon283

在本地机器上运行容器283

从Dockerfile构建镜像284

在本机上对多个容器进行编排286

推送镜像到Dockerregistry287

查询本地镜像289

部署Docker化的应用291

后端:Postgres291

前端292

前端:Ghost293

前端:Nginx293

清除容器294

直连容器294

AnsibleContainer296

Conductor296

创建Docker镜像297

本地运行301

发布镜像到registry302

将容器部署到生产环境303

第16章 调试Ansible.playbook.304

人类可读的错误信息304

调试SSH问题305

debug模块307

playbook调试器307

assert模块309

在执行前检查你的playbook311

语法检查311

列出host311

列出task312

检测模式312

显示文件变化313

限制指定的task运行313

step313

start-at-task314

tags314

第17章 管理Windows主机..316

连接到Windows316

PowerShell317

Windows模块320

第一个playbook320

升级Windows321

添加本地用户323

结论326

第18章 使用Ansible管理网络设备327

第19章 Ansible.Tower:Ansible企业版.346

(篇幅有限,完整目录请见《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》)

前言/序言

第2版译者序

距离上一版《奔跑吧Ansible》中文版问世已经两年有余,非常荣幸还能主导本次第2版的翻译工作。自第1版出版后,不管是大规模服务器配置管理、Ansible社区,还是我的工作,都有了很多变化。

我从专注于运维能力提升的专家岗位上离职,转而回归基础设施研发与运维团队的技术管理工作。在新的岗位上,我有三个深切的感触:第一,自动化配置管理领域的触角已经深入网络设备领域;第二,在数据中心与IT基础设施中,仍然有部分领域难以避免地使用Windows操作系统;第三,容器化接过云计算的接力棒,正在席卷整个行业。也许是作者也和我有类似的感受,第2版《奔跑吧Ansible》如期而至,添加了Windows管理和网络设备管理的相关章节。同时,还重写了Docker一章。

除了行业的变化外,Ansible的大版本也来到了2.x。在这个大版本中,Ansible带来了不少改变与新特性。使用Ansible新版本的同时,继续使用第1版的《奔跑吧Ansible》作为工具书显然会让读者产生很多困惑,第2版的出版恰好可以解决这个问题。

在第2版的翻译中,我尝试让我所管理的SRE团队都参与到《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》的翻译工作中,感谢各位同事的辛勤劳动。参与翻译的人员如下:杨振振(第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(第2版):探索自动化配置与部署捷径》可以帮助一些读者快速上手Ansible。

由于水平所限,《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》中难免出现一些翻译错误,诚恳地欢迎大家向我或者出版社反馈《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》中的各种错误。

最后,我想要感谢赵新宇、陈明杰和刘宇等朋友,他们在我翻译《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》的过程中为我提供了无私的帮助和支持。还要感谢我的夫人张若金的支持与理解。没有你们就不会有《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》的出版。

2012年2月Ansible创立的时候,它还是一个非常简单的项目,随后它的快速发展令我们十分惊喜。现在,它已经是上千人参与开发的产品了(如果包括参与贡献想法的人还会更多),并且几乎在每个国家都有人在使用。在各种技术会议中也总是能找到一些人在使用它,这在计算机领域是一件很不寻常的事。

Ansible的不平凡源自于它的平凡。Ansible并不企图做盘古开天地般的创新,而是从那些聪明的家伙已经提出的想法中提炼出精华,并将这些想法尽可能地落地。

Ansible旨在探求某些学术上的IT自动化方法(它们本身就是对大型繁杂的商业套件的一种反映)与简单粗暴解决问题的脚本之间的平衡点。另外,我们如何能将配置管理系统、部署发布系统、编排系统(orchestrationproject)以及千奇百怪但是非常重要的shell脚本库用一个单一系统替换呢?这恰恰是Ansible要实现的。

我们可以从IT自动化技术栈中移除主要架构组件吗?去掉管理性守护进程,转而依赖于OpenSSH,意味着系统转眼间就可以开始管理一台新的计算机,而不需要在被管理的机器上安装任何东西。更深一层来说,系统更趋于可靠和安全。

我注意到,尝试使用自动化系统本该使事情变得简单,但实际上却变得更难了。并且编写以自动化为目的的东西就好像一个吸收时间的黑洞,使我无法在本应该更专注的事情上投入更多时间。况且我并不想在这种系统上投入数个月以成为这个领域的专家。

我个人尤其享受编写新的软件,而不喜欢在使其自动化方面花太多时间。简而言之,我希望自动化的事情尽快完成,这样我就能将更多时间投入到我更关注的事情上。Ansible并不是一个你需要整天和它打交道的系统。你可以很快把它拿起来,很快搞定,然后又很快回到你更关心的事情上面。我希望这些也会成为你喜欢Ansible的原因。

我花了大量时间来确保Ansible的文档易于理解和掌握,其他渠道也还有很多不同形式的材料可以参考,参考这些资料进行实践是大有裨益的。在《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》中,Lorin使用非常流畅的行文、适于逐步探索的顺序介绍了Ansible。Lorin几乎是从最开始就参与到Ansible项目中的,我真诚地感谢他做出的贡献。我还要真诚地感谢今天项目中的每一位成员,以及未来的每一位成员。

最后,希望大家喜欢这《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》,享受瞬间就可以管理你的计算机的愉悦感!啊,对了,别忘记安装cowsay!1

—MichaelDeHaan,Ansible软件的创作者,Ansible公司前CTO22015年4月

1Ansible的创作者很有趣。从0.5版本开始,他给Ansible留了一个彩蛋:如果你的机器中安装了cowsay的话,执行playbook的时候,终端上就会显示一头奶牛。最主要的是,他还在发布0.5版本的时候严肃地介绍了这么做的优点。——译者注

2如MichaelDeHaan自己所说,他其实更享受编写新软件。目前他已经从Ansible公司离职到DataStax工作。在Ansible公司的最后工作日,他写下了一篇博文:HappyTrails,Ansible(http://michaeldehaan.net/post/109595670406/happy-trails-ansible)。——译者注

第2版前言

自《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》第1版撰写(早在2014年)以来,Ansible的世界发生了很大变化。Ansible项目完成了一次重大发布,版本号变为2.0。项目之外也发生了很大变化:支持Ansible项目的公司Ansible,Inc.被RedHat收购。所幸RedHat的收购并没有影响Ansible项目的发展,它仍在积极开发并努力赢得用户。

我们在这个版本中做了多处更改,最重要的变化是增加了5个全新的章节。该书现在涵盖了回调插件、Windows主机、网络硬件和AnsibleTower。在第8章中添加了很多内容,将其扩展为新的一章“自定义host、run和handler”。我们还重写了“Docker”一章以涵盖新的Docker模块。

为了与Ansible2.3版本兼容,我们更新了所有范例的代码。特别是将已弃用的sudo语

句全部替换为become。删除了对已弃用模块(如docker、ec2_vpc和ec2_ami_search)

的引用,并将它们改为使用新的模块。“Vagrant”一章新收录了Ansible本地置备器,“AmazonEC2”一章增加了PackerAnsible远程置备器,“让Ansible快到起飞”一章涵

盖了异步任务,以及在“调试Ansibleplaybook”一章介绍了2.1版中引入的调试器。

此外,还有一些细微的变化。例如,OpenSSH从使用十六进制编码的MD5指纹切换到base64编码的SHA256指纹,并更新了相应的范例。最后,我们还修改了读者提交的勘误表。

关于人称的注释

奔跑吧Ansible(第2版):探索自动化配置与部署捷径》的第1版只有一个作者,并且经常使用第一人称单数:我。但是第2版有两位作者,使用第一人称单数会比较奇怪。但我们还是决定保留它,因为它通常用于表达其中一位作者的意见。

致谢来自Lorin

感谢Jan-PietMens、MattJaynes和JohnJarvis审阅《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》的草稿并提供反馈。感谢SendGrid的IsaacSaldana和MikeRowan对《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》的支持。感谢MichaelDeHaan创建Ansible并对社区做出的巨大贡献,以及对该书的反馈,包括他对为什么选择使用Ansible这个名字的解释。感谢我的编辑BrianAnderson,他对我的工作充满了无限的耐心。

感谢我的父母对我的无尽支持;感谢我的兄弟Eric,我家的正牌作家;还要感谢我的两个儿子,Benjamin和Julian。最后,感谢我的妻子Stacy为我所做的一切。

来自René

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

第1版前言

我为什么写这《奔跑吧Ansible(第2版):探索自动化配置与部署捷径

多年前,我使用当时流行的PythonWeb框架Django编写了我人生中的第一个Web应用,当那个应用终于在我的台式计算机中成功运行时,油然而生的成就感让我至今难忘。首先运行djangomanage.pyrunserver,然后打开浏览器并访问http://localhost:8000,最后是见证奇迹的时刻——我的Web应用闪亮登场!

然而,随后我就发现让应用运行在Linux服务器上有非常多令人无奈的事情。除了把Django本身和我的应用安装在服务器上之外,还必须安装Apache和mod_python模块。有了mod_python模块,Apache才可以运行Django应用。这还不算完,我还必须弄明白天书一般的Apache配置文件,并把它配置为可以同时运行我的程序和其他所依赖的静态内容。

说实在的,每一步都不算难,但是想把所有的环节都配置正确也不是一件容易的事。作为一名程序员,我真不想不停地摆弄配置文件,我只是想让我的应用能运行而已。好在当我把一切都配置好之后,就不用再去动它了。然而几个月后的一天,噩耗传来,在另一台服务器上还得再经历一遍这些无奈,而且还是从头开始。

终于有一天,我发现痛苦的根源在于我用的方法不对。做这些事情的正确方法有一个学名:配置管理。使用配置管理要注意的一件重要的事情是:它是一种获取那些始终保持最新的配置与信息的方法。你不再需要频繁地搜索正确的文档或者查找以前的笔记。

不久以前,一位同事出于兴趣尝试使用Ansible部署新项目,他请我帮忙推荐一些官方文档以外的Ansible应用实践方面的参考资料。那时我才突然发现,好像官方文档以外没有什么资料可以推荐了。于是我决定填补这个空白,所以就有了这《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》。可惜这《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》对于那位同事来说太迟了,但希望对于你来说它来得正是时候。

谁适合读这《奔跑吧Ansible(第2版):探索自动化配置与部署捷径

这《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》是写给需要管理Linux或者类UNIX服务器的人的。如果你对下列术语如数家珍:系统管理、运维、部署、配置管理(看到这里也许有的读者在叹气)或者DevOps,那么看到《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》你也许会觉得如获至宝。

尽管我也在管理自己的Linux服务器,但我的专业其实是软件开发。这意味着《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》的范例将偏向于部署领域,尽管我同意AndrewClayShafer的“部署与配置没有明确边界”的观点。

阅读指南

我对这样的提纲并不感兴趣:第1章涵盖这个,第2章涵盖那个,类似这样的内容不会有人真正仔细去看(反正我从没看过)。我认为目录反倒应更易于浏览。

奔跑吧Ansible(第2版):探索自动化配置与部署捷径》的内容编排是适于从前向后顺序阅读的,后面章节中的内容会基于前面章节中的内容。《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》包含大量范例,建议你按照《奔跑吧Ansible(第2版):探索自动化配置与部署捷径》的指导在自己的计算机上去实践这些范例。绝大部分范例都是面向Web应用的。


其他推荐