Я пытаюсь создать файл свойств с обязательными и необязательными свойствами в Ansible с помощью шаблонов.
Я хочу, чтобы каждая практически статическая строка (каждое необязательное имя свойства) отображалась только в том случае, если существует связанное значение свойства (из переменной Ansible)
Прямо сейчас мой шаблон ansible выглядит так:
# Mandatory Properties
ManProperty1={{ ManProperty1_value }}
ManProperty2={{ ManProperty2_value }}
# Optional Properties
OptProperty1={{ OptProperty1_value }}
OptProperty2={{ OptProperty2_value }}
Но само приложение имеет жестко запрограммированные значения для всех необязательных свойств, и мне нужно, чтобы в файл свойств из шаблона записывалась только строка «свойство = значение», если связанная переменная существует.
Итак, продолжая использовать шаблон выше, если я установил для среды X (group_vars)
ManProperty1_value = myManValue1
ManProperty2_value = myManValue2
OptProperty1_value = myOptValue1
но не устанавливайте
OptProperty2_value
Мой желаемый результат шаблона для развернутого файла:
# Mandatory Properties
ManProperty1=myManValue1
ManProperty2=myManValue2
# Optional Properties
OptProperty1=myOptValue1
В Ansible должно быть лучшее решение. Самым близким, что я нашел, была фильтрация по возможности, но я не смог найти там ничего, связанного с отображением / скрытием текста шаблона.
Последнее замечание: у меня есть хакерское решение для резервного копирования - я беру каждую строчку property=value
и сделайте переменную равной всей строке. Но похоже, что в нем полностью отсутствует смысл шаблона с таким большим количеством статического текста, хранящегося в переменных.
Во-первых, это не проблема Ansible, это вопрос о том, как использовать язык шаблонов Jinja2 (и, как строго вопрос программирования, его следует задавать в StackOverflow, а не в ServerFault).
Направляйтесь к Документация Jinja2 по if
заявление и вы найдете точный пример для вашего случая:
В
if
заявление в Jinja сравнимо с Pythonif
заявление. В простейшей форме вы можете использовать его, чтобы проверить, определена ли переменная, не пуста и не ложна.
Вот пример того, как вы должны это настроить:
{% if OptProperty2_value %}OptProperty2={{ OptProperty2_value }}{% endif %}