如何在 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 字符串格式化语法将变量替换为字符串。
我是 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 字符串格式化语法将变量替换为字符串。