En el nivel de juego, tenemos serial: 1que permitirnos ejecutar todo el juego un host a la vez. Pero no he encontrado una manera simple de hacer esto en una sola tarea. Esto es especialmente relevante, si la tarea en cuestión no realiza el bloqueo adecuado (por cualquier razón).
Una respuesta obvia es poner la tarea en su propio juego. Pero eso no ayuda con los roles. (Tener que serial: 1actuar con el rol no es realmente intuitivo).

serial: 1déjenme ponerlo en una obra de teatro al menos. Pero solo quiero establecerlo en un subpunto de una obra de teatro (cualquiera que sea el nombre correcto de eso. Pensé que era "tarea", pero el comentario anterior parece estar en desacuerdo).serial: 1hace algo completamente diferente: es como ejecutar el libro de jugadas para cada host a la vez, esperar la finalización del libro de jugadas completo antes de pasar al siguiente host.forks=1significa ejecutar la primera tarea en una jugada en un host antes de ejecutar la misma tarea en el siguiente host, por lo que la primera tarea se ejecutará para cada host antes de tocar la siguiente tarea. Así que solo quieresforks=1una jugada; lamentablemente eso no es posible actualmente.Hay una solución alternativa a este problema: se puede pasar una lista de hosts (o un grupo)
with_itemsy luego usarladelegate_tocon esta lista. De esta manera, la tarea se ejecutará host por host.Por ejemplo:
fuente
run_once: trueestá allí, intente sacarlo. No te gustará lo que sucede. (tantas ejecuciones repetidas aaaahhhh)Si lo está ejecutando en una sola máquina, entonces surge un problema de bloqueos exclusivos para más de un host. Por lo tanto, debe ejecutar uno por uno para todos los hosts. Para esto, debe
--forks=1estar configurado al llamar al comando ansible playbook. Por ejemplo:ansible-playbook webserver.yml --forks=1donde webserver.yml tiene app01 y app02 dentro de su[webserver]fuente
Piensa que lo que quieres es
run_once: true
fuente
Para los comandos que se pueden ejecutar localmente, use un bucle para iterar sobre todos los hosts en la obra. Esto SOLO funciona si el comando se puede ejecutar localmente. También podría ejecutar un comando con ssh en las máquinas remotas una por una de esta manera, si las teclas están configuradas, pero se vuelve difícil cuando se habla de escalada.
P.EJ:
fuente
inventory_hostname, de lo contrario, el bucle no tiene sentido.