Как перечислить все текущие целевые узлы в игре Ansible

Я запускаю игру Ansible и хочу перечислить все хосты, на которые она нацелена. Ansible docs упоминает, что это возможно, но их метод, похоже, не работает со сложной целевой группой (таргетинг как хосты: web_servers: & data_center_primary)

Я уверен, что это выполнимо, но, похоже, на нем нет никакой дополнительной документации. Есть ли var со всеми целевыми хостами в настоящее время?

Ответ 1

Вы ищете переменную play_hosts

---
- hosts: all

  tasks:
    - name: Create a group of all hosts by app_type
      group_by: key={{app_type}}

    - debug: msg="groups={{groups}}"
      run_once: true

- hosts: web:&some_other_group

  tasks:
   - debug: msg="play_hosts={{play_hosts}}"
     run_once: true

приведет к

TASK: [Create a group of all hosts by app_type] *******************************
changed: [web1] => {"changed": true, "groups": {"web": ["web1", "web2"], "load_balancer": ["web3"]}}

TASK: [debug msg="play_hosts={{play_hosts}}"] *********************************
ok: [web1] => {
    "msg": "play_hosts=['web1']"
}

инвентарь:

[proxy]
web1 app_type=web
web2 app_type=web
web3 app_type=load_balancer

[some_other_group]
web1
web3

Ответ 2

Если вы этого не знали/не знали, вы можете использовать переключатель --list-hosts только для списка хостов, на которые повлияла бы игра.

Кроме того, существует dict hostvars, который содержит все хосты, которые в настоящее время известны Ansible. Но я думаю, что модуль setup должен выполняться на всех хостах, поэтому вы не можете пропустить этот шаг через gather_facts: no.