如何在 when 条件下使用变量替换?

How to use variable substitution in a when condition?

我是 ansible 的新用户。我在任务的 when 条件下需要一个变量。 我正在尝试使用 home_directory 变量,它在 vars/main.yaml 文件中定义为 home_directory: "{{ ansible_env.HOME }}"。

我尝试使用如下内容:

当:{{ home_directory}}/var_name['var_key'] != command_output['stdout']

不过,后来我发现jinja模板{{}}或{%%}不在allowed/recommended 当条件。我也试过不带引号和 {{}} 的条件,但 home_directory 值是 在 when 条件下没有被替换。

有人可以告诉我在这里可以做什么吗?

However, I later found out that jinja templates {{}} or {%%} are not allowed/recommended in the when condition.

这是因为 when 的参数是在隐式模板上下文中计算的。换句话说,在 {{...}} 标记中准确地写下您要写的内容,但您不需要标记,因为上下文是命令固有的。

换句话说,而不是:

when: {{ home_directory}}/var_name['var_key'] != command_output['stdout']

写入:

when: home_directory ~ "/" ~ var_name['var-key'] != command_output['stdout']

其中 ~ 是 Jinja 字符串连接运算符。

我们可以稍微简化一下:

when: "%s/%s" % (home_directory, var_name.var_key) != command_output.stdout

这利用 Linux 字符串格式化语法将变量替换为字符串。