17

我正在编写一个 Ansible 模板,该模板需要在主机组中生成一个 IP 列表,不包括当前主机 IP。我在网上和文档中进行了搜索,但找不到任何允许您删除列表中项目的过滤器。我在下面创建了(hacky)for循环来执行此操作,但想知道是否有人知道这样的“最佳实践”过滤方式。

{% set filtered_list = [] %}

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

假设 groups['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。

4

1 回答 1

27

difference 过滤器

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

这将为您提供my_group没有当前主机的所有项目主机。

于 2016-11-19T18:32:23.843 回答