Как получить шаблон 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 разделяет пробелы, и эта возможность, вероятно, настраивает это по умолчанию. Но это не похоже на чек -/+ пробелы.

Есть ли способ заставить разрыв строки?

Ответ 1

Добавьте следующую строку в свой шаблон в первой позиции:

#jinja2: trim_blocks:False

Ответ 2

Google привел меня сюда, так что оставив этот ответ ради процветания.

Как вы упомянули -/+ теги пробелов не выполняются, а также макросы линии (по крайней мере, не %% или # или ##).

trim_blocks разрешен в недоступном. Единственное, что я обнаружил, что это работает, заключается в том, что trim_blocks игнорирует только первую новую строку

Для вашего примера достаточно добавить дополнительную строку новой строки

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

solr.replication.slave=false

Ответ 3

Похоже, у вас есть force=no в незанятой пьесе, поэтому файл не будет перезаписан.

Ответ 4

Я считаю, что использование фильтра ternary может помочь.

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

Ответ 5

У меня была такая же проблема. Я решил это, добавив

{{''}}

до конца строки, например:

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

Вставляет пустой строковый литерал с побочным эффектом, который не разделяет пробелы.