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

标签 ansible jinja2 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 %}


可以说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。

最佳答案

difference filter

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


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

关于ansible - 如何删除或排除Ansible模板列表中的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40696130/

相关文章:

ansible - 在 Ansible 模板中加入键值对列表

python - 如何使用 UNICODE 字符串格式化模板中的 JINJA 变量?

ansible shell 任务在没有正确消息的情况下出错

gitlab - 在 GitLab CI 中使用条件并进行用户干预

ansible - 如何根据条件在 Ansible 模板中设置串联字符串变量

ansible - 如何使用 ansible-vault 2.3.0 解密字符串

ansible - 如果客户端不在广告域中,则运行 ansible 任务

ansible 嵌套神社表达式

ansible - 如何格式化 Ansible 输出

python - 从 For 循环接收内存地址