包含和导入文件及角色结构
1 包含和导入文件
1.1 管理大型playbook
如果playbook很长或很复杂,我们可以将其分成较小的文件以便于管理。可采用模块化方式将多个playbook组合为一个主要playbook,或者将文件中的任务列表插入play。这样可以更轻松地在不同项目中重用play或任务序列
1.2 包含或导入文件
Ansible可以使用两种操作将内容带入playbook,可以包含内容,也可以导入内容
包含内容是一个动态操作,在playbook运行期间,Ansible会在内容到达时处理所包含的内容
导入内容是一个静态操作,在运行之前,Ansible在最初解析playbook时预处理导入的内容
1.3 导入playbook
import_playbook指令允许将包含play列表的外部文件导入playbook,可以把一个或多个额外playbook导入到主playbook,由于导入的内容是一个完整的playbook,因此import_playbook功能只能在playbook的顶层使用,不能在play内使用,如果导入多个playbook,则按顺序导入并运行导入内容
导入两个额外playbook的主playbook的示例
[root@master apache]# cat main.yml
- name: import playbook for install
import_playbook: install.yml
- name: import playbook for config
import_playbook: config.yml
还可以使用导入的playbook在主playbook中交替play。
- hosts: all
tasks:
- name: start service
service:
name: httpd
state: started
enabled: yes
- name: import playbook for install
import_playbook: install.yml
- name: import playbook for config
import_playbook: config.yml
1.4 导入和包含任务
1.4.1 导入任务文件
可以使用import_tasks功能将任务文件静态导入playbook内的play中。导入任务文件时,在解析该playbook时将直接插入该文件中的任务。Playbook中的import_tasks的位置控制插入任务的位置以及运行多个导入的顺序。
---
- name: Install web server
hosts: webservers
tasks:
- import_tasks: webserver_tasks.yml
导入任务文件时,在解析该playbook时将直接插入该文件中的任务。由于import_tasks在解析playbook时静态导入任务,因此对其工作方式有一些影响。
- 使用import_tasks功能时,导入时设置的when等条件语句将应用于导入的每个任务
- 无法将循环用于import_tasks功能
- 如果使用变量来指定要导入的文件的名称,则将无法使用主机或组清单变量
案例:
[root@master ~]# cd /etc/ansible/playbook/apache/
[root@master apache]# ls
config.yml fil