Ansible 包含和导入文件
Ansible 包含和导入文件
如果Playbook很长或很复杂,可以尝试将其分成较小的文件以便与管理。适宜食用模块化方式将多个Playbook组合成一个主要的Playbook,或者将文件中的任务列表插入到Play中。和杨可以更轻便、更加便于管理的操作项目中的Play和任务序列。
包含与导入文件概念区别
Ansible支持两种方式将内容带入到Playbook,可以使用包含内容,也可以使用导入内容。
包含内容(include)是一个动态的过程。在playbook运行期间,Ansible会在内容到达时再去处理所包含的内容。
导入内容(import)是一个静态操作。在最开始的时候Ansible运行Playbook时就将它解析好并导入到要执行的这个Playbook中了。
导入Playbook
使用import_playbook
指令可以将外部的Playbook导入到当前的Playbook中。
导入的Playbook是一个完成的playbook,因此要使用import_playbook
指令需要在Play的位置导入,而不能在tasks处进行导入Playbook。如果你导入了多喝playbook,则将按照导入的顺序一次运行.
1 |
|
在上面的例子中,会一次执行三个Play,并且导入操作可以和展开的Play穿插使用。
导入和包含任务
可以将任务文件中的任务列表导入或包含在Play中。任务文件是包含一个任务平面列表的文件:
vim tasks_firewalld.yml
1 | - name: Install the firewall |
导入任务文件
使用import_tasks
功能将任务文件静态导入Playbook的Play中。在一开始解析Playbook时就会将该任务文件插入到Play中。
1 | - name: Play |
- 使用import_tasks功能时,导入时设置的when等条件语句将应用于导入的每个任务。
- 使用import_tasks功能时,无法将loop循环应用在上面。
- 如果使用变量来指定要导入的文件的名称,则无法使用主机或组清单变量。
包含任务文件
使用include_tasks
可以将任务文件动态包含进Tasks中。
1 | - name: Play |
在Play运行到达该Tasks前,Ansible不会处理该任务文件的任何内容。使用include_tasks
时,包含时设置的when
等条件语句将确定任务是否包含在Play中。