Назад | Перейти на главную страницу

Создание файла свойств с помощью Ansible, где свойство не должно добавляться, если значение не существует

Я пытаюсь создать файл свойств с обязательными и необязательными свойствами в 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 сравнимо с Python if заявление. В простейшей форме вы можете использовать его, чтобы проверить, определена ли переменная, не пуста и не ложна.

Вот пример того, как вы должны это настроить:

{% if OptProperty2_value %}OptProperty2={{ OptProperty2_value }}{% endif %}