如何使用 'or' 条件或 'is defined ' 在 Ansible 模板中传递环境变量

How to use 'or' condition or 'is defined ' to pass environment variable in Ansible template

我的方案是只将其中一个变量传递给 Ansible 模板文件,在 Jinja 中也是如此。

逻辑应该是:如果 variable_a 被传递,分配 var_a 并忽略 var_b 否则分配 var_b.

我在执行 playbook 时从外部传递它们

ansible-playbook playbooks/deploy.yaml \
  -e 'variable_a=${variable_a}' \
  -e 'variable_b=${variable_b}'

我想在条件中使用 or,同时在模板中传递变量。

这是 Ansible 模板

key = {{ variable_a if variable_a is defined else variable_b }}

这个我也试过了

key = {{ variable_a | default(variable_b) }}

我的问题是,如果 variable_a 没有定义,variable_b 就不会被赋值。

试试这个

key = "{% if variable_a is defined %}{{ variable_a }}{% else %}{{ variable_b }}{% endif %}"

我发现我在

中丢失了True
key = {{ variable_a | default(variable_b) }}

documentation所述。

最终声明是

key = {{ variable_a | default(variable_b, True) }}