Lorsque la raison de ce comportement est parfaitement indiqué par @flowerysong de réponse, il y a une solution que vous pouvez utiliser pour obtenir votre exigence.
L'astuce est d'utiliser le fait que vous pouvez définir deux pièces de théâtre à l'intérieur d'un playbook et, ensuite, utiliser la variable définie sur l'ordinateur hôte(s) de la première pièce.
Donc, ce que nous allons faire, c'est:
- Exécuter un jeu sur
localhost
et de définir un fait à venir à partir de l'hôte de groupe que nous cherchons à cibler dans le deuxième jeu
- En option: j'ai également défini une
target_hosts
variable dans la première pièce, à être sûr que, si le deuxième jeu de la cible est modifiée, le groupe hôte variable est toujours le même que le deuxième jeu est d'aller à la cible.
- Utilisez cette variable dans la seconde pièce, à partir de
localhost
's hostvars
Note: il n'y a pas de comptabilité pour le goût, mais je préfère le inline si à l' ternary
le filtre, quand même, ils sont strictement équivalentes.
Donc, compte tenu de la playbook:
- hosts: localhost
gather_facts: no
tasks:
- set_fact:
target_hosts: nodes
- set_fact:
host_set: "{{ hostvars[groups[target_hosts].0].host_set }}"
- hosts: "{{ hostvars.localhost.target_hosts }}"
gather_facts: no
serial: "{{ '100%' if hostvars.localhost.host_set else '1' }}"
tasks:
- debug:
- Lors de l'exécution avec
host_set: true
dans le nodes
groupe:
PLAY [localhost] *******************************************************************************************************************
TASK [set_fact] ********************************************************************************************************************
ok: [localhost]
TASK [set_fact] ********************************************************************************************************************
ok: [localhost]
PLAY [nodes] ***********************************************************************************************************************
TASK [debug] ***********************************************************************************************************************
ok: [node1] =>
msg: Hello world!
ok: [node2] =>
msg: Hello world!
ok: [node3] =>
msg: Hello world!
PLAY RECAP *************************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node3 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
- Lors de l'exécution avec
host_set: false
dans le nodes
groupe:
PLAY [localhost] *******************************************************************************************************************
TASK [set_fact] ********************************************************************************************************************
ok: [localhost]
TASK [set_fact] ********************************************************************************************************************
ok: [localhost]
PLAY [nodes] ***********************************************************************************************************************
TASK [debug] ***********************************************************************************************************************
ok: [node1] =>
msg: Hello world!
PLAY [nodes] ***********************************************************************************************************************
TASK [debug] ***********************************************************************************************************************
ok: [node2] =>
msg: Hello world!
PLAY [nodes] ***********************************************************************************************************************
TASK [debug] ***********************************************************************************************************************
ok: [node3] =>
msg: Hello world!
PLAY RECAP *************************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node3 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0