首页 > 解决方案 > 如何在ansible的for循环中使用主机变量时访问变量值?

问题描述

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

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}}'

谁能在这里建议如何使用索引值。

标签: ansiblejinja2

解决方案


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

推荐阅读