在Ansible 2.4中, include
模块已被弃用。 在它的地方,它附带两个replace模块, import_tasks
和include_tasks
。 但他们有非常相似的描述:
include_tasks
:包含一个文件,其中包含当前剧本中要执行的任务列表。 import_tasks
:导入要添加到当前剧本中的任务列表以供后续执行。 什么时候应该使用前者,何时使用后者?
文档中有相当多的关于这个主题的内容:
主要区别是:
所有
import*
语句都在parsing剧本时进行预处理。
所有include*
语句都是在执行playbook的过程中遇到的。
所以import
是静态的, include
dynamic的。
根据我的经验,在处理逻辑“单位”时应该使用import
。 例如,将长长的任务列表分成子任务文件:
main.yml:
- import_tasks: prepare_filesystem.yml - import_tasks: install_prerequisites.yml - import_tasks: install_application.yml
但是你可以使用include
来处理不同的工作stream,并根据一些dynamic收集的事实做出决定:
install_prerequisites:
- include_tasks: prerequisites_{{ ansible_os_family | lower }}.yml