如何删除或排除 Ansible 模板列表中的项目?

How to remove or exclude an item in an Ansible template list?

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

{% 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.

differencefilter

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

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