ansible vars_files与include_vars

时间:2018-11-11 22:28:03

标签: ansible

两者之间有什么区别

vars_files:指令

-include_vars 模块

何时不赞成使用上述任何一种方法?

3 个答案:

答案 0 :(得分:7)

vars_files include_vars 都被标记为稳定接口,因此它们都不被弃用。两者都有一些共同点,但解决了不同的目的。

vars_files:

vars_file 指令只能在定义用于指定变量文件的播放时使用。这些文件中的变量包含在剧本中。由于它是在播放开始时使用的,因此很可能暗示其他一些播放(在此播放之前)创建了这些vars文件,或者它们是在运行配置之前静态创建的;表示它们是该剧的配置变量。

include_vars:

vars_files 的一个目的是将一组文件中的vars包括在内,但是如果

  • vars文件是动态创建的,您想将它们包括在播放中
  • 在有限范围内包括vars。
  • 您有多个vars文件,并且要根据某些条件(例如,如果本地数据库存在,则包括本地数据库的配置,否则包括远程托管数据库的配置。
  • include_vars priority vars_files 高,因此,它可用于覆盖默认配置(vars)。
  • include_vars 的计算是惰性的(在使用它们时进行评估)。
  • 您想使用 loop 动态包含var。
  • 您要读取文件并将所有这些变量放入命名字典中,而不是读取全局变量名称空间中的所有变量。
  • 您要在不知道vars文件确切名称的情况下,将目录中的所有文件或目录中的文件的某些子集包括在内(基于前缀或排除列表)。

这些是我能想到的一些情况,如果要使用以上任何情况,则需要 include_vars

答案 1 :(得分:4)

播放开始时将读取

vars_files。当剧本到达任务时,将读取include_vars。您可能还对Variable precedence: Where should I put a variable?

感兴趣

答案 2 :(得分:1)

一些更新的信息...

  • import_*被认为是静态重用,vars_files是一种 导入。
  • include_*被视为动态重用。

如弗拉基米尔(Vladimir)所述,

播放开始时

vars_files被读取。当剧本到达任务时,将读取include_vars

与所有静态项目一样,在播放开始之前先读取vars_files。与include_vars不同,后者在剧本到达时会“包含”。

静态重用和动态重用之间的最大区别之一是如何处理其中的变量或任务。默认情况下,所有静态重用项均使用linear strategy处理,所有主机彼此保持同步。在下一个任务可以开始之前,每个任务都必须在所有主机上完成。被跳过的主机实际上要处理一个noop任务。

动态重用不会将performance strategy从线性更改,但是会更改处理任务的顺序。通过动态重用,整个任务组必须在单个主机上完成,然后由下一个主机处理。不幸的是,所有其他主机在等待时都扭曲了它们的“不睡”。

当您需要通过一系列具有已注册输出的任务“循环”主机某个主机,并在下一个主机启动之前对这些信息进行某些操作时,语句非常有用。

当您需要在一组主机上收集信息或执行任务之前,导入语句非常有用。

这是一个非常好的表,可以比较所有不同的Include_ *和Import_ *函数。Comparing includes and imports: dynamic and static re-use

就像供参考,这是有关绩效策略以及如何提高绩效的更多信息的链接。 How can I improve performance for network playbooks?