Ansible - jinja не позволяет jinja удалять символы новой строки в макросе

Предполагая, что у меня есть шаблон jinja2, используя следующий p

{% macro logging(ltype) %}
{% if ltype == 'fluentd' %}
logging:
  driver: 'fluentd'
  options:
    tag: "{{ app_name }}.{{ '{{' }}.Name{{ '}}' }}"
    labels: "mylabel"
{% endif %}
{% endmacro %}
...                                                                                                                   
   {{ logging('fluentd') }}                                                                                           
... 

Когда я визуализирую этот шаблон (модуль template), я получаю

...
   logging:
  driver: 'fluentd'
  options:
    tag: "test.{{.Name}}"
    labels: "mylabel"

...

Как видите, клавиша driver сдвинута по неизвестным мне причинам. Я перепробовал все возможности управления пробелами, ничего не меняет это поведение.

Есть у кого-нибудь идея исправить?

Желаемый результат

...
   logging:
     driver: 'fluentd'
     options:
       tag: "test.{{.Name}}"
       labels: "mylabel"   
...

Извините, но здесь немного запутался. Похоже, что сдвигается logging, а не driver, и ваш вывод, похоже, хочет, чтобы ВСЕ было с отступом больше, чем в шаблоне.

Jack 30.10.2018 18:28

Точно: ведение журнала точно в нужном месте, но драйвер удалил все пробелы, которые были в макросе

ProfHase85 30.10.2018 18:46
Введение в Ansible Roles
Введение в Ansible Roles
Ansible - это отличный инструмент управления конфигурацией, который можно использовать для автоматизации настройки или развертывания на большом...
0
2
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Измените эту часть шаблона на:

...

{{ logging('fluentd') | indent(3,true) }}

...

Ничего не меняет - все по-прежнему с неправильным отступом. (еще три пробела справа)

ProfHase85 31.10.2018 11:34

Вы переместили его полностью влево в шаблоне?

Jack 31.10.2018 13:14

Не на мой взгляд. Все, что делает макрос, - это вставляет этот текст в то место, где вы поместили макрос. Если вы удалите из исходного шаблона часть с надписью {{ logging('fluentd') }}, а затем выполните копирование и вставку строк макроса в это место (с теми же тремя пробелами слева), вы получите точно такой же результат, который вы получили, когда вы вызвали макрос в этом месте. Макрос - это просто копипаст.

Jack 31.10.2018 16:25

Другие вопросы по теме