Cuando la razón de este comportamiento es perfectamente indicado por @flowerysong la respuesta, hay una solución que puede utilizar para lograr su requisito.
El truco es utilizar el hecho de que usted puede definir dos obras de teatro dentro de una playbook y, a continuación, utilizar la variable establecida en el host(s) de la primera jugada.
Así, lo que vamos a hacer es:
- Ejecute un juego de
localhost
y establecer un hecho que viene desde el grupo host que queremos destino en el segundo juego
- Opcionalmente: yo también define un
target_hosts
variable en el primer juego, para estar seguro de que, si el segundo juego del destino es modificado, el anfitrión de la variable de grupo siempre es el que el segundo juego va a dirigir.
- El uso de esa variable en la segunda obra, de
localhost
's hostvars
Nota adicional: no hay de contabilidad para su gusto, pero yo prefiero la de en línea si a la ternary
filtro, todavía, que son estrictamente equivalentes.
Por tanto, dada 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:
- Cuando se ejecuta con
host_set: true
en el nodes
grupo:
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
- Cuando se ejecuta con
host_set: false
en el nodes
grupo:
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