2016-11-19 109 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