LINUX.ORG.RU

Как удобно написать развесистое условие через jinja2 в yml?

 , , ,


0

1

В файле all.yml мне надо написать примерно такое:

all:
  vars:
    ...
    targetPath: "{% if   distId=='debian8' %}blablabla1
                 {% elif distId=='debian9' %}blablabla2
                 {% elif distId=='astra13' %}blablabla3
                 {% endif %}|trim()"

Проблема в том, что в таком виде фильтр trim() не работает, потому что ему на вход надо подавать строку. А чтобы обозначить строку, надо выражение {% if ... %} заключить в кавычки. Но в этом коде уже использованы двойные и одинарные кавычки.

Как обойти это ограничение?

★★★★★

Не надо так писать.

Надо сделать переменную:

targetPath:
  debian8: blablabla1
  debian9: blablabla2
  astra13: blabla3

И использовать targetPath.get(distId)

alpha ★★★★★
()
Последнее исправление: alpha (всего исправлений: 1)
Ответ на: комментарий от alpha

И использовать targetPath.get(distId)

Блин, я вручную два часа перерывал всю доку по Ansible

https://docs.ansible.com/ansible/latest/user_guide/index.html

и нашел только единственное упоминание get() в коде без объяснения что это за

https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html

В конце концов нашел, что это кусок Python

https://www.w3schools.com/python/ref_dictionary_get.asp

Причем там даже не сказано, что этот синтаксис является альтернативой работы с ассоциативными структурами вида targetPath[distId].


Но таки да, в таком виде код проще получается.

Xintrea ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.