Как получить доступ к значениям переменных при использовании переменных хоста для цикла for ansible? - PullRequest
0 голосов
/ 02 июля 2019

Как получить доступ к значению переменной при работе с групповыми переменными.

Ansible 2.5

{% for ----%}
{% set floop = loop %}
{% for host in groups['web{{floop.index}}']%}
            --- block of code ---
{% endfor %}
{% endfor %}

Файл инвентаризации:

[web1]
host1
host2

[web2]
host3
host4

Это дает мне следующую ошибку.

AnsibleUndefinedVariable: 'dict object' has no attribute 'web{{loop.index}}'

Может кто-нибудь подсказать, как использовать значение индекса здесь.

1 Ответ

0 голосов
/ 03 июля 2019

Чтобы убедиться, что каждая группа хостов проходит по отдельности, вы можете использовать следующий код (или что-то подобное).Инструкция if предназначена для того, чтобы убедиться, что вы перебираете только группу с именем web<number>:

{% for group in groups %}
{% if group | regex_search('^web\d+') %}
{% for host in groups[group] %}
--- block of code ---
{% endfor %}
{% endif %}
{% endfor %}

Это был мой первоначальный ответ.Оставьте это здесь на случай, если это поможет кому-то еще.

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

Инвентарь:

[web1]
host1
host2

[web2]
host3
host4

[web:children]
web1
web2

Цикл:

{% for host in groups['web'] %}
--- block of code ---
{% endfor %}
...