辨析 ansible 之 import 和 include

2022-05-06 15:17:45 浏览数 (1)

辨析 ansible 之 import 和 include

概括起来讲,import_tasks 是静态的,include_tasks 是动态的。(学过 C 的朋友想一下静态联编和动态联编就明白了。)

在 ansible 中二者还会有更多的一些特性。

二者都可以用来将任务导入。

在使用 import_tasks 引用变量时,要确保变量定义在 vars/vars_file或命令行中。这个属于语言细节,注意一下。

使用 set_fact 是过不去的。

when 关键字对 include_tasks 和 import_tasks 有着本质区别。这个就属于编译特性了。这个特性在 ansible 中得以展现。

当对 import_tasks 使用 when 进行条件判断时,when 对应的条件会被应用于 include 文件中的每一个任务,意思是每要执行一个任务时,都要先进行条件判断。总结起来就是顺序执行 include 文件中列出的每一个任务前,都要进行条件判断,满足条件就执行,不满足就跳过,需要多次判断。 当对 include_tasks 使用 when 进行条件判断时,when 对应的条件只应用一次,发生在是否include这个文件,若include,则执行这个include文件中所有的任务,不再进行其他判断。

相同的还有 tag,在静态联编中才会被打开。

使用 loop 或 with_items 关键字对 include 文件进行循环操作时,只能配合 include_tasks。

这个也是属于编译特性的东西,只有动态联编才能对未来传参。

0 人点赞