【发布时间】:2018-11-11 22:28:02
【问题描述】:
有什么区别
-
vars_files指令和
-
include_vars模块
当上述任何一项被弃用或不鼓励时,应该使用哪个?
【问题讨论】:
标签: ansible
有什么区别
vars_files 指令
和
include_vars模块
当上述任何一项被弃用或不鼓励时,应该使用哪个?
【问题讨论】:
标签: ansible
vars_files 和 include_vars 都被标记为稳定的接口,因此它们都没有被弃用。它们都有一些共同点,但它们解决的目的不同。
vars_files:
vars_file 指令只能在定义播放时使用以指定可变文件。这些文件中的变量包含在剧本中。由于它在播放开始时使用,因此很可能意味着其他播放(在此播放之前)创建了这些 vars 文件,或者它们是在运行配置之前静态创建的;意味着它们是戏剧的一种配置变量。
include_vars:
vars_files 有一个目的是从一组文件中包含变量,但如果
这些是我能想到的一些情况,如果你想使用上述任何一种情况,那么你需要include_vars。
【讨论】:
vars_files 在播放开始时被读取。 include_vars 在播放到达任务时被读取。你可能对Variable precedence: Where should I put a variable?也感兴趣
【讨论】:
一些更新的信息...
正如弗拉基米尔所说,
vars_files 在播放开始时被读取。当play到达任务时读取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?
【讨论】: