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

Sco*_*Sol 10 jinja2 ansible ansible-template

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

{% set filtered_list = [] %}

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

让我们说组['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.

Kon*_*rov 20

difference 过滤器:

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

这将为您提供来自my_group无当前主机的所有项目主机.

  • 值得一提的是,过滤器`difference([inventory_hostname])`希望列表作为输入参数,使用方括号很重要。 (2认同)