Ansible系列(五)

为了创建逻辑清晰,内容可重用的 Playbook,Playbook 支持 importinclude 两种方法。

使用的时候,可能会发现用法很相似,但是 Ansible 执行的时候还是有区别的。

import * 进来的语句都是在 Playbook 解析的时候就预处理完了。

include * 进来的语句是在 Playbook 执行的时候才会执行。

导入 Playbook

可以直接在主 Playbook 中导入:

1
2
- import_playbook: webservers.yml
- import_playbook: databases.yml

在每个 Playbook 中的 play 和 task 都是按照其编写的顺序执行的,就像在主 Playbook 中直接定义的那样。

导入 task

将 task 打碎,放在分类好的各自文件中,是一种有效的组织复杂 task 的方法,而且还能重用这些 task。

比如一个普通的 task 列表长这样:

1
2
3
4
5
6
# common_tasks.yml

- name: placeholder foo
command: /bin/foo
- name: placeholder bar
command: /bin/bar

我们可以在主 task 列表中使用 import_tasksinclude_tasks 来导入其他文件的 tasks:

1
2
3
4
tasks:
- import_tasks: common_tasks.yml
# 或者这么导入
- include_tasks: common_tasks.yml

另外,在 handlers 中,我们也能像导入 task 一样导入 handlers:

1
2
3
4
# one_handers.yml

- name: restart nginx
service: name=nginx state=restarted

然后在 Playbook 中用到的地方直接导入就行了:

1
2
3
4
handlers:
- include_tasks: one_handlers.yml
# 或者
- import_tasks: one_handlers.yml

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


公众号二维码