一 .playbook 是什么
Playbook 是 Ansible 的配置、部署、编排语言,是一个用 YAML 格式编写的文件,用来定义一系列有序的任务,描述系统应该达到的最终状态。
剧本这个词很好的表述了playbook的一个作用,playbook(yaml文件)里面写的就是一系列操作,目标主机就是执行playbook写好的剧本即可。和ad-hoc不同,playbook是一系列的操作,而ad-hoc只是一个命令行,我们要对一个群组进行统一的httpd部署,我们就需要使用playbook,而不是ad-hok。
对于playbook的"剧本文件",就是一个yaml或者yml文件,编写这个文件我们要使用标准的yml语法。
一些基础语法简介:
1.文件的第一行应该以 "---" (三个连字符)开始,表明YAML文件的开始。
2.在同一行中,#之后的内容表示注释,类似于shell,python和ruby。
3.YAML中的 列表元素 以"-"开头然后紧跟着一个空格,后面为元素内容。
4.同一个列表中的元素应该保持相同的缩进。否则会被当做错误处理。
5.play中hosts,variables,roles,tasks等对象的表示方法都是键值中间以":"分隔表示,":"后面还要增加一个空格。
playbook的组成我们可以看作四个部分:
首先是Target selection这里指的就是定义需要操作的远程主机- hosts,或者组。然后是Variable section(可选),这个就是定义playbook运行时使用的变量- vars。接着是Task selection,定义将要在远程主机上执行的任务列表 - tasks,最后是Handler section(可选),定义 task 执行完成以后需要调用的任务 - handlers。
二 . 基本使用案例
1. 基本写法 -- 创建 httpd 服务并初始化首页
我们这里创建一个普通用户,通过普通用户来编写yml文件,这更符合平时的生产环境。

在普通用户的家目录下,创建一个ansible的目录,然后在这个下面创建一个test.yml文件。我们这里在通过playbook来装包一个Apache服务。

这里一定要注意格式,然后这些语法在ansible --doc中是有模板的,我们可以参考模板。我们写完之后最好输入指令检测一下是否正确。

这里语法检测是没有问题的,我们也可以接-C来预运行一下。

这只是一个预处理,并没有真正的在远端执行,只是测试一下。要真的执行我们这个playbook的话,我们去掉-C就可以了。
下载完之后,我们就可以启动httpd服务了,启动也是可以写在playbook剧本里面的

再次运行一下这个剧本:

最后我们往网页中写一点东西,这里使用的模块是copy模块,copy后面使用content可以覆盖文件的内容。

执行完成之后,我们访问我们的网站:

可以看到是部署成功了的,这个就是playbook一下配置多个任务,就是一个剧本,当然这里是可以直接给一个组分配任务的。
2. 改写 httpd 端口,并配置 handlers 触发器重启
我们这里想要将Apache服务的端口改为8080,那么此时我们可以使用lineinfile模块,这个模块可以修改配置文件里面的内容。

handlers就是触发器,默认是不会执行的,只有当某一个任务notify了对应触发器的名字的时候,此时触发器才会执行。由于我们修改的是静态的配置文件,我们需要重启服务之后,才可以真正的实现修改端口。
然后我们执行这个剧本,此时我们的端口就是8080了。

3. 一次性创建多个用户 --loop 循环
loop 是 Ansible 中用来重复执行同一个任务的关键字,让你避免在 Playbook 中重复编写相同的任务代码。
如果我们创建一个用户,我们会怎么做?我们可以使用ansible中的user模块,选择创建用户,同时设置用户的密码。

这里的密码设置是不建议明文,user的模块要求传入加密后的密码,我们可以传给这个过滤器,让其对密码进行一个加密处理。
那么如果我们i想要创建一百个用户呢?这样写100次显然是不合适的,我们就可以使用loop循环,我们这里为了简化就创建两个用户。

loop 中的每个元素会依次赋值给 {{ item }},任务会重复执行。我们这里是字典列表的写法,包含多个元素,这样就会一次性创建多个用户,而且我们也不写重复的代码。

在对应主机我们就可以看见刚才创建的三个用户了。