Сочетание переменных Ansible и Jinja2 - PullRequest
0 голосов
/ 07 мая 2018

У меня есть книга игр, которая генерирует скрипт bash из двух списков Ansible.

В файле шаблона Jinja2 я пытаюсь запустить цикл for в одном списке Ansible, а затем запустить в нем другой цикл for на основе выходных данных первого.

Вот мой Ansible defaults.yml:

##################################
#        FIRST LOOP              #
##################################

prefix_list:
  - prefix1
  - prefix2

##################################
#         SECOND LOOP            #
##################################
prefix1:
  - kola
  - wlcom
  - linkstory



prefix2:
  - kola

Jinja2 Шаблон:

#!/bin/bash
date=$(date +'%Y.%m' -d "month ago")
exdate=$(date +'%Y.%m' -d "{{ exdate }} months ago")
{% for prefix in prefix_list %}
    {% for index in prefix %}
        {{ index }}
    {% endfor %}
{% endfor %}

Результат:

#!/bin/bash
date=$(date +'%Y.%m' -d "month ago")
exdate=$(date +'%Y.%m' -d "12 months ago")
            p
            r
            e
            f
            i
            x
            1
                p
            r
            e
            f
            i
            x
            2

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Используйте vars поисковый плагин для ссылки на переменные (вместо итерации по символам в их именах, как вы делаете сейчас).

Ваш внутренний цикл должен быть:

{% for index in lookup('vars', prefix) %}

Также проверьте, как контролировать пробелы в Jinja2 , потому что вывод, который вы получите с вашим текущим кодом, будет иметь странный отступ.

0 голосов
/ 07 мая 2018

Я не очень опытен в Ansible, но, думаю, вам стоит попробовать вложить свои списки в defaults.yml

Случай 1 - вложенные списки

(Это то, что ожидает ваш шаблон)

prefix_list:
  -
    - kola
    - wlcom
    - linkstory

  -
    - kola

Случай 2 - словарь

(Когда вам нужно prefix1 и prefix2 в вашем шаблоне

prefix_list:
  prefix1:
    - kola
    - wlcom
    - linkstory

  prefix2:
    - kola

В этом случае цикл Jinja должен быть исправлен таким образом

{% for prefix in prefix_list %}
    {% for index in prefix_list[prefix] %}
        {{ index }}
    {% endfor %}
{% endfor %}
...