テンプレートは次のようになります。
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がおそらくデフォルトでこれを設定していることを理解しています。しかし、それは-/ +空白タグを尊重していないようです。
改行を強制する方法はありますか?
次の行をテンプレートの最初の位置に追加します。
#jinja2: trim_blocks:False
同じ問題がありました。追加して解決しました
{{''}}
行の終わりまで、例えば:
solr.replication.master={% if ansible_eth0.ipv4.address == servermaster.eth0 %}false{% else %}true{% endif %}{{''}}
これにより、空白が削除されないという副作用のある空の文字列リテラルが挿入されます。
グーグルが私をここに連れてきたので、繁栄のためにこの答えを残しました。
あなたが述べたように-/+
空白タグは受け入れられず、 行マクロ も有効になりません(少なくとも%%
または#
または##
)。
trim_blocks
はansibleで有効になっています。私が見つけた唯一のことはうまくいきます、それはtrim_blocks
最初の改行のみを無視します
あなたの例では、余分な改行を追加するだけで十分です
solr.replication.master={% if ansible_eth0.ipv4.address == servermaster.eth0 %}false{% else %}true{% endif %}
solr.replication.slave=false
ternary
フィルターを使用すると効果があると思います。
solr.replication.master={{ (ansible_eth0.ipv4.address == servermaster.eth0) | ternary('false', 'true') }}
solr.replication.slave=false
回避策として、テンプレートに追加できます
{% raw %}{% endraw %}