Как удалить или исключить элемент из списка шаблонов Ansible?

Я пишу шаблон Ansible, который должен создать список IP-адресов в группе хостов, исключая текущий IP-адрес хоста. Я поискал в Интернете и в документации, но не смог найти никаких фильтров, позволяющих удалить элемент из списка. Я создал (хакерский) цикл for ниже, чтобы сделать это, но мне было интересно, знает ли кто-нибудь «передовой» способ фильтрации, подобный этому.

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


person ScoSol    schedule 19.11.2016    source источник


Ответы (1)


Для этого есть difference фильтр:

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

Это даст вам все хосты элементов из my_group без текущего хоста.

person Konstantin Suvorov    schedule 19.11.2016
comment
Стоит отметить, что фильтр difference([inventory_hostname]) ожидает список в качестве входного параметра, поэтому важно использовать квадратные скобки. - person antonbormotov; 28.08.2017