Мой вариант использования следующий:
У меня есть файл шаблона, и я хотел бы создать 2 разных файла из этого шаблона, при этом переменные заполняются другим набором переменных для каждого файла.
Например, допустим, я хочу создать шаблон для файла, содержащего строку:
mkdir -p {{myTemplateVariable}}
Я хотел бы найти правильный способ заполнить эту переменную «File1» и «File2». Что-то типа :
- name: template test 1
template:
src=myTemplateFile
dest=result1
- name: template test 2
template:
src=myTemplateFile
dest=result2
где я мог бы указать для первого шаблона, что использовать переменную a = "File1", а для второго b = "File2".
ansible
ansible-template
Кестемонт Макс
источник
источник
Ответы:
Для Ansible 2.x:
Для Ansible 1.x:
К сожалению,
template
модуль не поддерживает передачу ему переменных, которые можно использовать внутри шаблона. Был запрос на добавление функции, но он был отклонен.Я могу придумать два обходных пути:
1. Включите
В
include
заявлении поддерживает передачи переменных. Таким образом, вы можете поместить своюtemplate
задачу в дополнительный файл и дважды включить ее с соответствующими параметрами:my_include.yml:
main.yml:
2. Повторно определите myTemplateVariable.
Другой способ - просто переопределить myTemplateVariable прямо перед каждой
template
задачей.источник
С Ansible 2.x вы можете использовать
vars:
с задачами.Шаблон
test.j2
:Пособие:
Это передаст разные
myTemplateVariable
значения в test.j2.источник
Вы можете сделать это очень просто, посмотрите мой рецепт Супервайзера:
job.conf.j2:
Выход:
Наслаждайтесь!
источник
Я использую это решение / хак:
задачи / main.yml:
vars / main.yml
шаблоны / test.j2:
После запуска вы попадете
this is var_a
в / tmp / templateA иthis is var_b
в / tmp / templateB.Обычно вы злоупотребляете
with_items
визуализацией шаблона с каждым элементом в списке из одного элемента. Это работает, потому что вы можете контролировать, что это за список при использованииwith_items
.Обратной стороной этого является то, что вы должны использовать
item
имя переменной в своем шаблоне.Если вы хотите передать более одной переменной таким образом, вы можете dicts в качестве элементов списка следующим образом:
а затем обратитесь к ним в своем шаблоне следующим образом:
источник
with_items: '{{ var_a }}'
Я так и сделал.
В задачах / main.yml
и в vars / main.yml
и в templates / myTemplateFile.j2
Надеюсь, это решит вашу проблему.
источник
with_dict
это лучшее решение.ВАЖНО: обратите внимание, что элемент не обязательно должен быть просто строкой, это может быть объект с любым количеством свойств, поэтому вы можете передавать любое количество переменных.
В шаблоне у меня есть:
источник
Мне нужно было решить аналогичную проблему, вот простое решение того, как передавать переменные в файлы шаблонов, трюк в том, чтобы написать файл шаблона, используя переменную. Вам необходимо создать словарь (также возможен список), в котором содержится набор переменных, соответствующих каждому файлу. Затем в файле шаблона получите к ним доступ.
увидеть ниже:
пьеса
источник
Еще один пример из реального мира с использованием списка
выдержка для шаблона для php.ini
Это вар
Затем я развертываю с этим
источник