#ansible #jinja2
#ansible #jinja2
Вопрос:
У меня следующий сценарий: переменные, названные как:
size_1: 1
size_2: 2
size_3: 3
nb_of_sizes: 3
И я хочу создать их шаблон в файле jinja2 с итерацией, чтобы получить что-то вроде:
NB-1-01
NB-1-02
NB-2-01
NB-2-02
NB-3-01
NB-3-02
Индекс в конце имени не важен, поскольку мне удалось его получить.
Важно то, как шаблонировать значение параметра size.
Я попробовал с 2 циклами for, первый работает нормально (с индексом), но я не знаю, как заменить вторую переменную {{ index2}} в имени размера: size_{{ index2}}
Это моя попытка:
{% for index in range(1, nb_of_servers 1) %}
{% for index2 in range(1, number_of_sizes 1) %}
- name: "NB-{{ index2 }}-0{{ index }}"
size: "{{ size_{{ index2 }} }}"
{% endfor %}
{% endfor %}
Комментарии:
1. Вы не можете вложить маркеры jinja2. Более того, поскольку вы ищете переменную «верхнего уровня» динамически, вам придется использовать
vars
lookup => `size: «{{ lookup(‘vars’, ‘size_’ index2) }}»
Ответ №1:
Проблема, похоже, в том, что вы заключили size_
внутри маркеров шаблонов Jinja {{
.
Как вам кажется, требуется только size_1
, size_2
, и т.д. Простое изменение, подобное приведенному ниже, должно сделать:
{% for index in range(1, num_servers 1) %}
{% for index2 in range(1, num_sizes 1) %}
- name: "NB-{{ index2 }}-0{{ index }}"
size: "size_{{ index2 }}"
{% endfor %}
{% endfor %}
Комментарии:
1. Но если я передам значение, подобное этому, size_{{ index2}}, то конечным значением параметра «size» не будет size: size_1, хотя на самом деле я хочу, чтобы size был целочисленным значением, например size: 1, size: 2
2. Тогда этого было бы
size: {{ index2 }}
недостаточно?3. Нет, потому что размер будет другим, например 100, 200. и index2 увеличится максимум до 4.