Estoy ejecutando Ansible 2.2, pero puedo actualizar si me ayuda.
Vi esto y estaba muy emocionado, pero no parece estar en esta (o en ninguna) versión de la documentación de Ansible.
El problema que estoy tratando de resolver es que tengo 1000 usuarios que necesito administrar en una caja de Centos.
Lleva bastante tiempo ejecutar esta tarea en serie. Y aún más molesto, todo aparece como modificado porque el comando "caduca" en el módulo de usuario siempre marca la cosa como modificada.
esto también parecía prometedor, pero tomó la misma cantidad de tiempo ejecutar cada comando en el ciclo with_items y no fue más rápido (nunca me molesté en esperar lo suficiente para llegar al final).
Omitir tareas es rápido ahora (mucho más rápido que en Ansible 2.0), si no puedo encontrar la manera de hacer que esto funcione en paralelo, creo que volveré y descubriré cómo omitir tareas sin sentido y, si todo de lo contrario falla, escribiré mi propio módulo. Pero parece que debería poder hacer todo esto más rápido en Ansible.
Esto es lo que quiero ejecutar en paralelo, host_authorizations
es una lista de nombres de usuario y otros datos.
- name: Create/modify OS user accounts
user: name={{ item.username }} group=sshusers shell=/bin/bash home="/home/selinux-modules/{{ item.username }}" state=present expires={{item.expiredate|default(omit)}}
with_items: "{{ host_authorizations }}"
tags: full_maintenance
Respuestas:
Como @webKnja mencionó, esto es posible con el
async
modo. Recientemente lo descubrí y aprendí que puedes usarlo de 3 maneras diferentes según tus necesidades.Ejecute y sondee los resultados, observe el
poll:5
, Esto sondeará los resultados cada 5 segundos. Puede ahorrar algo de tiempo con este método.Dispara y olvida
poll: 0
, esta es una opción muy rápida ya que Ansible solo está disparando esas tareas. La desventaja es que no sabemos cuál fue el resultado de la tarea, es decirchanged: True/False
. Por supuesto, es un inconveniente si te importan los comentarios;).Dispara y olvida con
async_status
, la sintaxis de la tarea es la misma que en el ejemplo 2, sin embargo, requerirá una tarea adicionalasync_status
. Este es mi favorito, ya que es relativamente rápido (más rápido que el bucle normal o elexecute and poll
) y le permite capturar los comentarios, aunque tendrá que lidiar con nuevosregister
para ustedasync_task
.retries: 20
- Cuántos intentos antes de fallar.delay: 2
- cuántos segundos esperar entre las encuestas.Una palabra de precaución , dependiendo de la tarea que no pueda utilizar la
async
opción. Tenía ejemplos en los que interactuaba con un sistema que no podía manejar múltiples solicitudes para el mismo recurso. Encontré laasync
opción que funciona mejor si tengo que realizar la misma tarea en varios hosts. Ahí es donde pude "ahorrar" la mayor parte del tiempo.Desde que publicó el enlace a la documentación de Ansible en la pregunta, no voy a hacer eso.
fuente
poll
valor a 0 en el ejemplo 3. ¡Esta es una explicación increíble! Thnx.async_status
requierejid
, noid
.Para responder a su pregunta: No, a partir de ahora Ansible no puede ejecutar bucles en paralelo.
En su
newusers
lugar, usaría , que está hecho para la creación masiva de usuarios. Crear un archivo con todos los usuarios en el mismo, copiarlo en el huésped, y corrernewusers /path/to/user/list
en unacommand
tarea.fuente
Es posible lograr esto usando el
async
modo. Encuentre algunas referencias sobre cómo hacer esto a continuación.Refs:
fuente