如何获取同一组(当前主机除外)中主机的所有库存变量?

时间:2017-08-01 21:37:54

标签: ansible jinja2

假设我们有这样的安全库存:

[somegroup]
host1 secondaryIp=1.0.0.0
host2 secondaryIp=1.0.0.1
host3 secondaryIp=1.0.0.2

在运行任务(特别是模板模块)时,是否可以获取组[somegroup]中“所有其他主机”的secondaryIp列表?

我尝试搜索ansible过滤器:http://docs.ansible.com/ansible/latest/playbooks_filters.html#list-filters

我唯一的工作想法就是在库存中这样做:

[somegroup]
host1 secondaryIp=1.0.0.0 otherIps="1.0.0.1,1.0.0.2"
host2 secondaryIp=1.0.0.1 otherIps="1.0.0.0,1.0.0.2"
host3 secondaryIp=1.0.0.2 otherIps="1.0.0.0,1.0.0.1"

1 个答案:

答案 0 :(得分:2)

您可以使用groups['somegroup']获取该组中的主机列表,并使用hostvars访问其变量。要排除当前正在运行的主机ansible,您只需要检查列表中的当前主机是否等于inventory_hostname。以下是它在实践中的运作方式。

在模板中

{% for host in groups['somegroup'] %}
{% if host != inventory_hostname %}
{{ hostvars[host]['secondaryIp'] }}
{% endif %}
{% endfor %}

在任务中

- name: debug
  debug:
    msg: "{{ hostvars[item]['secondaryIp'] }}"
  when: item != inventory_hostname
  with_items: "{{ groups['somegroup'] }}"