2016-11-19 97 views
4

我正在写一个Ansible模板,需要在主机组中产生一个ip列表,不包括当前主机IP。我已经在网上搜索,并通过文档,但我找不到任何过滤器,允许您删除列表中的项目。我在下面创建了(hacky)for循环来做到这一点,但想知道是否有人知道这样的“最佳实践”过滤方式。如何删除或排除Ansible模板列表中的项目?

{% set filtered_list = [] %} 

{% for host in groups['my_group'] if host != ansible_host %} 
    {{ filtered_list.append(host)}} 
{% endfor %} 

比方说群体[ 'my_group']有3个IP的(192.168.1.1,192.168.1.2 192.168.1.3和)。当为192.168.1.1生成模板时,它应该只打印IP的192.168.1.2和192.168.1.3。

回答

9

differencefilter为:

- debug: var=item 
    with_items: "{{ groups['my_group'] | difference([inventory_hostname]) }}" 

这会给你没有当前主机从my_group所有项目的主机。

+0

非常感谢!只是我在找:)。 – ScoSol

+0

值得一提的是,过滤器'差异([inventory_hostname])'需要列表作为输入参数,这对使用方括号很重要。 – antonbormotov