
Мне нужно создать сценарий, который возьмет файл шаблона, интерполирует некоторые переменные и поместит полученный файл в другой каталог.
Первая часть проблемы заключается в том, что полученный файл будет использоваться как еще один плейбук Ansible, поэтому исходный файл содержит другие интерполяции, и эти интерполяции должны быть сохранены такими, какие они есть. В качестве примера предположим, что исходный файл содержит что-то вроде этого:
key1: {{ value1 }}
key2: {{ value2 }}
Значение key1
должно быть интерполировано по моему плану (оно должно стать значением переменной value1
), но в то же время его value2
необходимо сохранить таким, какое оно есть (оно должно быть {{ value2 }}
.
Вторая часть проблемы в том, что я не могу просто изменить исходный файл и добавить обратные косые черты перед фигурными скобками, потому что этот файл обновляется другими процессами. Более того, поскольку файл шаблона время от времени обновляется, я не могу предсказать, какие переменные нужно пропустить после следующего обновления. Я знаю только, что мне нужно интерполировать value1
, но я не знаю, как называются другие переменные (сегодня это value2
и value3
, завтра разработчики переименовали value2
в value2_deprecated
и где-то добавили value3
).
Могу ли я попросить Ansible выполнить value1
только интерполяцию?
Спасибо.
решение1
В:"Шаблон содержит интерполяции, и эти интерполяции необходимо сохранить в неизменном виде."
A: Объявить переменные по умолчанию
lbr: '{{ "{{" }}'
rbr: '{{ "}}" }}'
value1: '{{ lbr }} value1 {{ rbr }}'
value2: '{{ lbr }} value2 {{ rbr }}'
и создайте шаблон
shell> cat template.yml.j2
key1: {{ value1 }}
key2: {{ value2 }}
В:"Мне нужно интерполировать только value1."
A: Переопределить значение по умолчанию, например
- template:
src: template.yml.j2
dest: playbook.yml
vars:
value1: value1
дает
shell> cat playbook.yml
key1: value1
key2: {{ value2 }}