将手册中列表的列表传递给单个命令(而不是with_items)

我有两组主机: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_fqdnansible_nodename 。 你必须检查什么适合你。