我有两组主机:dc1和dc2。 也结合到一个DC组。
我需要将来自外部DC的主机的IP地址列表传递给命令。 with_items根本不起作用。
应该是这样的:
somescript -H 10.10.10.3 -H 10.10.10.4
所以有2点:1.获得DC组中的主机列表,不包括主机主组中的主机列表。 不知道这是否可能,所以肮脏的方法是设置一个remote_dcvariables(或数组)。 假设我们有一个来自p.1的主机列表:groups [remote_dc]。 如何使用它作为hostvars [key] ['ansible_eth1'] ['ipv4'] ['address']的密钥并获得结果作为列表?
现在我不得不使用一种非常肮脏的方式:我为每个DC组创build了一个remote_addresses列表,并且像这样迭代:
command: somescript -H {{ remote_addresses|join(' -H ') }}
那么是否有一个合适的方法来实现p.1和p.2并省略手动创buildip地址列表?
有用的文档有这个例子:
一个常用的习惯用法是走一个小组来查找该组中的所有IP地址:
{% for host in groups['app_servers'] %} {{ hostvars[host]['ansible_eth0']['ipv4']['address'] }} {% endfor %}
它大概做你想要的。 你可以像这样使用它:
- name: Execute somescript command: > somescript {% for host in groups['app_servers'] %} -H {{ hostvars[host]['ansible_eth0']['ipv4']['address'] }} {% endfor %}
现在,你也想从IP地址列表中排除主机本身。 你可以通过修改{% for %}来做到这一点:
{% for host in groups['app_servers'] if host != ansible_host %}
而不是ansible_host ,你可能需要使用ansible_fqdn或ansible_nodename 。 你必须检查什么适合你。