playbook是ansible用于配置,部署,和管理被控节点的剧本。通过playbook的“描述”,通过执行“剧本”的内容,让受控主机达到预期的状态。playbook就像Ansible控制器给被控节点列出的的一系列ad-hoc模块操作已将,playbook是将该一系列操作组合起来,统一完成操作。
当一个设施过于复杂,需要大量的操作时候,且需要不断的重复操作,这时最好使用playbook,其使用意义类似于脚本一样,可以很方便的批处理任务,但playbook与脚本不同的是,playbook有自己的语法格式。
核心元素:
Tasks:任务,由模板定义的操作列表
Variables:变量
Templates:模板,即使用模板语法的文件
Handlers:处理器 ,当某条件满足时,触发执行的操作
Roles:角色
hosts和users:
hosts一行可以是一个主机组、主机、多个主机,中间以冒号分隔,可使用通配模式。其中remote_user表示执行的用户账号。
Tasks list 和action:
1:Play的主体部分是task列表,task列表中的各任务按次序逐个在hosts中指定的主机上执行,即在所有主机上完成第一个任务后再开始第二个任务。
在运行playbook时(从上到下执行),如果一个host执行task失败,整个tasks都会回滚,请修正playbook 中的错误,然后重新执行即可。
Task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量,模块执行时幂等的,这意味着多次执行是安全的,因为其结果一致。
2:每一个task必须有一个名称name,这样在运行playbook时,从其输出的任务执行信息中可以很好的辨别出是属于哪一个task的。如果没有定义name,‘action’的值将会用作输出信息中标记特定的task。
3:定义一个task,常见的格式:”module: options” 例如:yum: name=httpd
4:ansible的自带模块中,command模块和shell模块无需使用key=value格式
playbook由YMAL语言编写。YAML参考了其他多种语言,包括:XML、C语言、Python等;YMAL格式是类似于JSON的文件格式,便于人理解和阅读,同时便于书写。
对于 Ansible, 每一个 YAML 文件都是从一个列表开始. 列表中的每一项都是一个键值对, 通常它们被称为一个 “哈希” 或 “字典”. 所以, 我们需要知道如何在 YAML 中编写列表和字典。
文件名通常以.yml结尾方便标识,文件内容模板如下:
两个基本原则:(1)处于同一层次结构中同一级别的数据元素必须具有相同的缩进量,(2)如果项目属于其他项目的子项,其缩进量必须大于父项
这里只进行简单的说明,后续的变量等语法,将单独列出。
单任务:(查看servera.linux.com是否有linux用户)
1 ---
2 - name: Configure User
3 hosts: servera.linux.com
4 tasks:
5 - name: Linux user
6 user:
7 name: linux
8 uid: 1000
9 state: present
10 ...
~
多任务:(开启apache服务并设置默认配置页)
1 ---
2 - name: Install and Start Apache
3 hosts: web
4 tasks:
5 - name: Apache is present
6 yum:
7 name: httpd
8 state: present
9 - name: Change index.html
10 copy:
11 src: files/index.html
12 dest: /var/www/html/index.html
13 - name: Start Aparche
14 service:
15 name: httpd
16 state: started
17 enabled: true
18 ...
~
~
多剧本:(开启apache服务,并检测)
1 ---
2 - name: first play
3 hosts: web
4 tasks:
5 - name: first task
6 dnf:
7 name: httpd
8 state: present
9 - name: second task
10 service:
11 name: httpd
12 enabled: true
13 - name: second play
14 hosts: mariadb
15 tasks:
16 - name: first task
17 yum:
18 name: mariadb
19 state: present
20 - name: second task
21 service:
22 name: mariadb
23 enabled: true
24 ...
正确结果:
错误结果:
查看是否有语法错误:
ansible-playbook --syntax-check site.yml
产生错误是时,可以根据错误提示,进行修改即可。
预执行,查看是否会报错:(预执行不会更改受控端,只是检测执行结果)
ansible-playbook -C site.yml
演剧:
ansible-playbook site.yml
查看演剧的细节:
-v ###显示任务结果 ,并查看配置文件来源;
-vv ###显示任务结果和任务配置
-vvv ###包含关于与受管主机的连接信息
-vvvv ###增加连接插件相关的额外详细程度选项(包括受管主机上用于执行脚本的用户及所 执行的脚本)