Ansible中如何在for循环中使用主机变量时访问变量值?

时间:2019-07-02 11:14:19

标签: ansible jinja2

如何在处理组变量时访问变量值。

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 :(得分:0)

为确保每个主机组分别循环,您可以使用以下代码(或类似的代码)。这里有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 %}