ansible vars_files与include_vars

bas*_*iat 13 ansible

之间有什么区别

vars_files: 指令

-include_vars模块

如果不赞成使用上述任何一种方法,则应使用哪种方法?

Kan*_*aad 16

无论vars_filesinclude_vars被标记为稳定的接口,因此他们都不是过时。两者都有一些共同点,但解决了不同的目的。

vars_files:

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

include_vars:

vars_files的一个目的是将一组文件中的vars包括在内,但不能处理以下情况:

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

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


Vla*_*tka 7

播放开始时读取 vars_files。当剧本到达任务时,将读取 include_vars。您可能还对变量优先级感兴趣:我应该在哪里放置变量?


小智 5

一些更新的信息...

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

正如弗拉基米尔提到的,

vars_files 在播放开始时被读取。include_vars 在播放到达任务时被读取

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

静态重用和动态重用之间最大的区别之一是如何处理其中的变量或任务。所有静态复用项均采用线性策略处理,所有主机彼此保持同步。每个任务必须在所有主机上完成,然后下一个任务才能开始。被跳过的主机实际上会得到一个 noop 任务来处理。

动态重用不会改变线性的性能策略,但它会改变任务的处理顺序。通过动态重用,整个任务组必须在单个主机上完成,然后才能由下一个主机处理。不幸的是,所有其他主机在等待时都在闲逛。

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

当您需要在一组主机上收集信息或执行任务然后才能为任何主机启动下一个任务时,导入语句非常有用。

这是一个非常好的表格,比较了所有不同的 Include_* 和 Import_* 函数。比较包含和导入:动态和静态重用

仅供参考,这里有一个链接,提供有关绩效策略以及如何提高绩效的更多信息。 如何提高网络剧本的性能?