Ansible проблема: использование ansible для печати всех хостов в инвентаре в виде списка и отклонения IP хоста, на котором работает playbook? - PullRequest
2 голосов
/ 04 февраля 2020

У меня есть файл инвентаря, который я передаю в виде списка, и мне нужно распечатать все IP-адреса в инвентаризации, кроме текущего хоста, на котором запущена книга воспроизведения.

discovery_hosts: "{{ groups['all'] | map('extract', hostvars, 'ansible_host']) | reject('search', ['ansible_hostname']) | join(',') }}"

reject не работает. Я смотрю что-то вроде grep -v, которое может печатать все, кроме IP-адреса текущей машины в списке.

1 Ответ

1 голос
/ 05 февраля 2020

Вместо того, чтобы исправить ваш отказ (который, вероятно, сработает в конце), я предлагаю выполнить работу заранее: удалите хост из группы all перед извлечением данных. Вот идея:

discovery_hosts: >-
  {{
    groups['all'] |
    difference([inventory_hostname]) |
    map('extract', hostvars, 'ansible_host') |
    join(',')
  }}

Обратите внимание, что имя для удаления содержится в inventory_hostname (как заявлено в вашем инвентаре). Помните также, что ansible_host будет существовать, только если вы явно заявили об этом в своем инвентаре.

...