¿Cómo ejecuto ansible en un host a la vez y rompo un fallo?

15

Tengo un libro de jugadas de Ansible donde quiero actualizar una serie de dispositivos inestables en secuencia. Puedo usarlo serial:1, pero quiero detener el libro de jugadas por completo si tengo un error para poder solucionarlo antes de continuar en lugar de acumular errores.

También me gustaría reiniciar el libro de jugadas en el mismo host en el que paré. Actualmente usa Ansible v2.0, pero también puede cambiar a una versión más nueva si ese tipo de función solo está disponible en versiones más recientes.

Peter Turner
fuente

Respuestas:

15

Su libro de jugadas se detendrá cuando ocurra una falla y lo esté utilizando de serial: 1acuerdo con la documentación .

De forma predeterminada, Ansible continuará ejecutando acciones siempre que haya hosts en el grupo que aún no hayan fallado.

Dicho esto, parece haber cierta confusión en la comunidad sobre el comportamiento predeterminado, y parece haber cambiado, o ha tenido errores, en algún lugar entre 1.8 y 2.1.

Entonces, si serial: 1no es suficiente, use esta configuración adicional:

max_failure_percentage: 0

En algunas situaciones, como con las actualizaciones continuas descritas anteriormente, puede ser deseable abortar la reproducción cuando se alcanza un cierto umbral de fallas. Para lograr esto, a partir de la versión 1.3 puede establecer un porcentaje máximo de falla ...

==

En cuanto a volver a intentar su libro de jugadas, debería ver un mensaje de error como este:

to retry, use: --limit @/home/user/site.retry

Use esa --limitbandera y en su próxima ejecución de ansible-playbooky continuará desde donde falló.

Los archivos de reintento se crearán a menos que haya establecido retry_files_enabled = Falsesu configuración.

Alternativamente, --start-at-tasktambién puede funcionar.

Fuentes:

https://github.com/ansible/ansible/issues/1663

https://github.com/ansible/ansible/issues/16241

http://docs.ansible.com/ansible/playbooks_delegation.html#rolling-update-batch-size

http://docs.ansible.com/ansible/playbooks_delegation.html#maximum-failure-percentage

http://docs.ansible.com/ansible/intro_configuration.html#retry-files-enabled

http://docs.ansible.com/ansible/playbooks_startnstep.html#start-at-task

Cazador de bosques
fuente
1
Si alguien tiene una mejor idea de lo que sucedió con el cambio / error en 1.9 y 2.0, hágamelo saber y actualizaré esta respuesta.
Woodland Hunter
Sí, sé que ansible 2.0 continuará ejecutándose en otros hosts si falla en uno de ellos. Supongo que no pensé que tendría un comportamiento diferente si ejecutara serial: 1. ¿Eso es lo que estás diciendo?
Peter Turner
Eso es correcto, serial: 1 debería tener ese comportamiento, y si no lo hace (porque ??) agregue max_failure_percentage: 0 también. También sugeriría que actualizar Ansible como 2.0 tuviera muchos errores.
Woodland Hunter
¡De hecho, hay tantos errores que te faltan los archivos .retry en 2.0! github.com/ansible/ansible/issues/13944
Woodland Hunter
Je, así que no soy el único que está constantemente parcheando la fuente. Es bueno saberlo.
Peter Turner