include_tasks和import_tasks有什么区别?

在Ansible 2.4中, include模块已被弃用。 在它的地方,它附带两个replace模块, import_tasksinclude_tasks 。 但他们有非常相似的描述:

  • include_tasks :包含一个文件,其中包含当前剧本中要执行的任务列表。
  • import_tasks :导入要添加到当前剧本中的任务列表以供后续执行。

什么时候应该使用前者,何时使用后者?

文档中有相当多的关于这个主题的内容:

  • 包括与import
  • dynamic与静态

主要区别是:

所有import*语句都在parsing剧本时进行预处理。
所有include*语句都是在执行playbook的过程中遇到的。

所以import是静态的, includedynamic的。

根据我的经验,在处理逻辑“单位”时应该使用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