Ansible系列(四)

如果说前面讲过的模块是雕刻工具,那么 Playbook 就是一份说明书,而清单中的主机就是原材料。

这三者联合起来,就能像流水线一样批量把清单中的主机改造成说明书里描述的样子。

单口相声

Playbook 顾名思义就是“剧本”,而剧本就是由一幕幕的戏剧构成。在每一幕剧中,清单中的主机充当各种主角,演绎剧本中的各种桥段。

我们来看一段只有一出戏的剧本:

1
2
3
4
5
6
7
8
9
10
11
# 01-playbook.yml
---
- hosts: host01
remote_user: root
tasks:
- name: ping the remote host
ping:
- name: copy local file to remote
copy:
src: /etc/hosts
dest: /tmp/hosts

这份剧本解说:

  • hosts:出演角色,可以一个人也可以一组人(对应清单中记录的姓名)。
  • remote_user:出道的艺名(以哪个用户身份登录远程主机)。
  • tasks:有哪些戏码。
    • name:该戏码的名称。
    • ping/copy 道具(使用的模块名字)。
      • src/dest 道具使用方式(模块参数)。

然后导演这出戏:

1
$ ansible-playbook 01-playbook.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
PLAY [host01] ******************************************************************************************************

TASK [Gathering Facts] *********************************************************************************************
ok: [host01]

TASK [ping the remote host] ****************************************************************************************
ok: [host01]

TASK [copy local file to remote] ***********************************************************************************
changed: [host01]

PLAY RECAP *********************************************************************************************************
host01 : ok=3 changed=1 unreachable=0 failed=0

执行结果如上所示:
PLAY [host01] 表示这出戏的主角是 host01 这位。

TASK [...] 这个则是这出戏中主角的一系列演出动作,TASK [Gathering Facts] 这个动作则是每出戏都必备的,用来搜集主角当前的各种状态,之前不是说过 Ansible 自带“幂等性”功能嘛,这个准备工作也是在这步搜集信息的。其他两个 TASK 则是我们在剧本中指定的。

PLAY RECAP 是观众对这出戏表演完之后的“评价”。

对口相声

我们现在再来增加一位角色:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 02-playbook.yml
---
- hosts: host01
remote_user: root
tasks:
- name: ping the remote host
ping:

- hosts: host02
remote_user: root
tasks:
- name: copy local file to remote
copy:
src: /etc/hosts
dest: /tmp/hosts

开导,ansible-playbook 02-playbook.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
PLAY [host01] ******************************************************************************************************

TASK [Gathering Facts] *********************************************************************************************
ok: [host01]

TASK [ping the remote host] ****************************************************************************************
ok: [host01]

PLAY [host02] ******************************************************************************************************

TASK [Gathering Facts] *********************************************************************************************
ok: [host02]

TASK [copy local file to remote] ***********************************************************************************
changed: [host02]

PLAY RECAP *********************************************************************************************************
host02 : ok=2 changed=1 unreachable=0 failed=0
host01 : ok=2 changed=0 unreachable=0 failed=0

哈哈,导演一部两个人的剧也并不是很难嘛!

Playbook 的基本概念也就这么简单,无非就是看你导演的水平如何,能否导出一手好戏。

P.S. 关注我的公众号,第一时间接收更新提醒。


公众号二维码