web-dev-qa-db-ja.com

条件付きの後にAnsibleテンプレートで新しい行を尊重する方法

テンプレートは次のようになります。

solr.replication.master=
    {% if ansible_eth0.ipv4.address == servermaster.eth0 %}
        false
    {% else %}
        true
    {% endif %}

solr.replication.slave=false

出力は次のようになります。

solr.replication.master=true
solr.replication.slave=false

私が実際に得ているのは:

solr.replication.master=truesolr.replication.slave=false

Jinja2が空白を取り除き、ansibleがおそらくデフォルトでこれを設定していることを理解しています。しかし、それは-/ +空白タグを尊重していないようです。

改行を強制する方法はありますか?

25
Oliver Lorton

次の行をテンプレートの最初の位置に追加します。

#jinja2: trim_blocks:False
22
Acti67

同じ問題がありました。追加して解決しました

{{''}}

行の終わりまで、例えば:

solr.replication.master={% if ansible_eth0.ipv4.address == servermaster.eth0 %}false{% else %}true{% endif %}{{''}}

これにより、空白が削除されないという副作用のある空の文字列リテラルが挿入されます。

6
Peter Lloyd

グーグルが私をここに連れてきたので、繁栄のためにこの答えを残しました。

あなたが述べたように-/+空白タグは受け入れられず、 行マクロ も有効になりません(少なくとも%%または#または##)。

trim_blocksはansibleで有効になっています。私が見つけた唯一のことはうまくいきます、それはtrim_blocks最初の改行のみを無視します

あなたの例では、余分な改行を追加するだけで十分です

solr.replication.master={% if ansible_eth0.ipv4.address == servermaster.eth0 %}false{% else %}true{% endif %}

solr.replication.slave=false
5
00500005

ternaryフィルターを使用すると効果があると思います。

solr.replication.master={{ (ansible_eth0.ipv4.address == servermaster.eth0) | ternary('false', 'true') }}
solr.replication.slave=false
2
moon.musick

回避策として、テンプレートに追加できます

{% raw %}{% endraw %}
0
panticz