Ansible: заполнение шаблона, содержащего неизменяемые интерполяции

Ansible: заполнение шаблона, содержащего неизменяемые интерполяции

Мне нужно создать сценарий, который возьмет файл шаблона, интерполирует некоторые переменные и поместит полученный файл в другой каталог.

Первая часть проблемы заключается в том, что полученный файл будет использоваться как еще один плейбук 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 }}

Связанный контент