假设我们有这样的安全库存:
[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"
答案 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'] }}"