web-dev-qa-db-fra.com

Comment répertorier tous les hôtes actuellement ciblés dans une pièce Ansible

J'exécute une pièce Ansible et je voudrais répertorier tous les hôtes ciblés par celle-ci. Ansible docs mentionne que cela est possible , mais leur méthode ne semble pas fonctionner avec un groupe cible complexe (ciblage comme les hôtes: web_servers: & data_center_primary)

Je suis sûr que c'est faisable, mais je ne peux pas trouver de documentation supplémentaire à ce sujet. Existe-t-il un var avec tous les hôtes actuellement ciblés?

22
xabram

Vous recherchez la variable '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

entraînerait

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']"
}

inventaire:

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

[some_other_group]
web1
web3
27
sirkubax

Vous pouvez utiliser l'option --list-hosts pour ne répertorier que les hôtes concernés par un playbook.

En outre, il existe le dict hostvars qui contient tous les hôtes actuellement connus d'Ansible. Mais je pense que le module setup devait être exécuté sur tous les hôtes, vous ne pouvez donc pas ignorer cette étape via gather_facts: no.

21
udondan