Ansible добавить несколько шаблонов в один файл - PullRequest
0 голосов
/ 25 февраля 2020

Как добавить несколько шаблонов в один файл в зависимости от переменной.

У меня есть 3 переменные vara, varb, var c. И их истина / ложь определяют, могу ли я использовать template1, template2, template3.

Их может быть несколько перестановок этих трех файлов.

Так что должна быть лучшая стратегия для добавления этих шаблонов в один файл.

Например: если vara - true, varb - false, var c - true. Тогда выходной файл должен содержать template1 и template3.

Ответы [ 3 ]

0 голосов
/ 25 февраля 2020

Это приведет к копированию каждого шаблона, если соответствующая переменная имеет значение true без необходимости использования дополнительных шаблонов Jinja2

- name: copy template
  template:
    src: "{{ item.name }}"
    dest: /my/dest/dir/
  when: item.state         ## this is a simplified version of "when item.state == True"
  loop:
    - vara_template: "{ name: 'template1', state: vara }"
    - varb_template: "{ name: 'template2', state: varb }"
    - varc_template: "{ name: 'template3', state: varc }"
0 голосов
/ 25 февраля 2020

Q: "Например: если vara истинно, varb ложно, var c истинно. Тогда выходной файл должен содержать template1 и template3."

A: Возможно использовать плагин lookup и template. Например,

shell> cat test.j2
{% if vara %}{{ lookup('template', 'template1.j2') }}{% endif %}
{% if varb %}{{ lookup('template', 'template2.j2') }}{% endif %}
{% if varc %}{{ lookup('template', 'template3.j2') }}{% endif %}

shell> cat template1.j2
vara: {{ vara }}

shell> cat template2.j2
varb: {{ varb }}

shell> cat template3.j2
varc: {{ varc }}
- hosts: localhost
  vars:
    vara: true
    varb: false
    varc: true
  tasks:
    - template:
        src: test.j2
        dest: test.txt

и

shell> cat test.txt
vara: True
varc: True
.
0 голосов
/ 25 февраля 2020

Если вы помещаете все это в один выходной файл, вы должны использовать только один шаблон, но поместите свой if elsif logi c в сам шаблон.

{% if vara == true %}
text1
{% elif varb == true %}
text2
{% elif varc == true %}
text3
{% endif %}
...