如何提供包含另一个变量的 Ansible 默认值?

EM0*_*EM0 4 ansible

我希望 Ansible 2.6.2 任务使用变量的值var1(如果已设置),否则使用包含变量的字符串var2。然而,只会设置其中之一。如果我使用简单的{{ var1 | default(var2) }}它可以工作,但是当我尝试将字符串附加到var2Ansible 时,当未定义时会出现错误var2,即使var1是:

失败的!=> {“msg”:“该任务包含一个带有未定义变量的选项。错误是:'var2'未定义\n\n错误似乎出现在'test.yml'中:第13行,第7列,但是可能\n位于文件中的其他位置,具体取决于具体的语法问题。\n\n有问题的行似乎是:\n\n msg: \"简单默认值:{{ var1 | 默认(var2) }}\"\n - 调试:\n ^ 这里\n"}

剧本:

- hosts: all
  gather_facts: false
  connection: local
  vars:
    var1: "one"
#    var2: "two"
  tasks:
    - debug:
        # This works
        msg: "Simple default: {{ var1 | default(var2) }}"
    - debug:
        # This fails when var2 is undefined, even though var1 is
        msg: "Default with concatenation: {{ var1 | default(var2 + '?') }}"
Run Code Online (Sandbox Code Playgroud)

tec*_*raf 6

错误消息很明确:解析器需要定义一个变量。

您可以使用相同的default过滤器来提供默认值,而不是var2

msg: "Default with concatenation: {{ var1 | default(var2|default('') + '?') }}"
Run Code Online (Sandbox Code Playgroud)