Ansible 如何获取同一组中主机(当前主机除外)的所有清单变量?
假设我们有一个类似这样的可分解库存:Ansible 如何获取同一组中主机(当前主机除外)的所有清单变量?,ansible,jinja2,Ansible,Jinja2,假设我们有一个类似这样的可分解库存: [somegroup] host1 secondaryIp=1.0.0.0 host2 secondaryIp=1.0.0.1 host3 secondaryIp=1.0.0.2 在运行任务(特别是模板模块)时,是否有方法获取组[somegroup]中“所有其他主机”的secondaryIp列表 我尝试搜索ansible筛选器: 我唯一的工作想法是在库存中这样做: [somegroup] host1 secondaryIp=1.0.0.0 otherIps
[somegroup]
host1 secondaryIp=1.0.0.0
host2 secondaryIp=1.0.0.1
host3 secondaryIp=1.0.0.2
在运行任务(特别是模板模块)时,是否有方法获取组[somegroup]中“所有其他主机”的secondaryIp列表
我尝试搜索ansible筛选器:
我唯一的工作想法是在库存中这样做:
[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"
您可以使用
groups['somegroup']
获取组中主机的列表,并使用hostvars
访问其变量。要排除ansible当前正在运行的主机,只需检查列表中的当前主机是否等于inventory\u 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'] }}"
其中是(1)您尝试过的代码;(2) 你的预期结果;(3) 你的实际结果如何?