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

default(omit)フィルターを使用できます。詳細については、ドキュメントを参照してください。

于 2016-06-17T12:34:14.603 に答える
2

マクロを使用できます。

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

次に、すべてのキーと値のペアに対してマクロを呼び出します。

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

ただし、エッジケースでは問題になる可能性があります。foobarまたはが定義されていない場合barfoo、おそらくエラーが発生します。マクロで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 に答える