1

Ansible 模板中的 Jinja2 允许在模板中使用这种类型的表达式:

{% if foobar is defined %} foo_bar = {{foobar}} {% endif %}
{% if barfoo is defined %} bar_foo = {{barfoo}} {% endif %}

等等

是否有任何较短的版本说'如果未定义其变量,则不要打印此行?

像 foo_bar = {{foobar|skip_this_line_if_undefined}} 之类的东西?

4

2 回答 2

2

你可以使用宏。

{% macro line(key, value) -%}
    {% if not value|none  %}{{ key }} = {{ value }}{% endif %}
{%- endmacro %}

然后只需为每个键/值对调用宏。

{{ line('foo_bar', foobar) }}
{{ line('bar_foo', barfoo) }}

不过,在边缘情况下可能会出现问题。如果foobarbarfoo未定义,它可能会引发错误。在宏中,value无论如何都会被定义,因此条件is defined不再有意义。但是,如果 null/none 实际上是任何变量的有效值,那么您就碰壁了……

更长一点但可能防水:

{% macro line(key, value) -%}
    {% if value != omit  %}{{ key }} = {{ value }}{% endif %}
{%- endmacro %}

{{ line('foo_bar', foobar|default(omit)) }}
{{ line('bar_foo', barfoo|default(omit)) }}
于 2016-06-18T20:23:30.583 回答
2

您可以使用default(omit)过滤器。有关详细信息,请查看文档

于 2016-06-17T12:34:14.603 回答