task - ansible ignora la configuración run_once en la tarea
ansible-playbook idempotent (1)
Estoy usando Ansible y quiero ejecutar una tarea solo una vez. Sigo la documentación sobre cómo configurar y ejecutar una tarea solo una vez
- name: apt update
shell: apt-get update
run_once: true
Pero cuando ejecuto Ansible, siempre ejecuta esta tarea. ¿Cómo puedo ejecutar mi tarea una sola vez?
La opción run_once se ejecutará cada vez que se ejecute su Playbook / tareas, pero solo se ejecutará una vez durante la ejecución específica. Por lo tanto, cada vez que ejecute el juego, se ejecutará, pero solo en el primer host de la lista. Si está buscando una manera de ejecutar ese comando solo una vez, punto, deberá usar el argumento de creación. Usando su ejemplo, esto se puede lograr usando lo siguiente:
- name: apt update
shell: apt-get update && touch /root/.aptupdated
args:
creates: /root/.aptupdated
En este caso se crea el archivo /root/.aptupdated. La tarea ahora verificará si existe, y si lo hace, no se ejecutará.
En una nota relacionada, si la tarea que está intentando ejecutar es la actualización apt-get, es posible que desee utilizar el módulo apt nativo. Entonces puedes hacer algo como esto ...
- name: apt update
apt: update_cache=yes cache_valid_time=86400
Ahora esto solo se ejecutará si el caché es más antiguo que un día.