En el nivel de juego, tenemos serial: 1
que 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: 1
actuar con el rol no es realmente intuitivo).
serial: 1
dé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: 1
hace 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=1
significa 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=1
una 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_items
y luego usarladelegate_to
con esta lista. De esta manera, la tarea se ejecutará host por host.Por ejemplo:
fuente
run_once: true
está 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=1
estar configurado al llamar al comando ansible playbook. Por ejemplo:ansible-playbook webserver.yml --forks=1
donde 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.