Tengo que verificar si existe un archivo en /etc/
. Si el archivo existe, entonces tengo que omitir la tarea. Aquí está el código que estoy usando:
- name: checking the file exists
command: touch file.txt
when: $(! -s /etc/file.txt)
Primero puede verificar si el archivo de destino existe o no y luego tomar una decisión en función de la salida de su resultado:
tasks:
- name: Check that the somefile.conf exists
stat:
path: /etc/file.txt
register: stat_result
- name: Create the file, if it doesnt exist already
file:
path: /etc/file.txt
state: touch
when: not stat_result.stat.exists
stat_result
tendrá un valorstat_result.state.exists
Falso (y es entonces cuando se ejecuta la segunda tarea). Puede ver los detalles del módulo de estadísticas aquí: docs.ansible.com/ansible/stat_module.htmlwhen: stat_result.stat.exists == False
awhen: not stat_result.stat.exists
si desea que se lea de forma más natural.El módulo de estadísticas hará esto y también obtendrá mucha otra información para los archivos. De la documentación de ejemplo:
fuente
Esto se puede lograr con el módulo de estadísticas para omitir la tarea cuando existe un archivo.
fuente
En general, haría esto con el módulo de estadísticas . Pero el módulo de comando tiene la
creates
opción que lo hace muy simple:¿Supongo que tu comando táctil es solo un ejemplo? La mejor práctica sería no verificar nada y dejar que Ansible haga su trabajo, con el módulo correcto. Entonces, si desea asegurarse de que el archivo existe, usaría el módulo de archivo:
fuente
state: file
No crea archivos. Ver docs.ansible.com/ansible/file_module.htmlfuente
when: mypath is not exists
significa en este caso? ¿No esmypath
una cadena simple?Creo que puede ser molesto y propenso a errores hacer muchas de estas
.stat.exists
comprobaciones de tipo. Por ejemplo, requieren un cuidado especial para que el modo de verificación (--check
) funcione.Muchas respuestas aquí sugieren
Sin embargo, a veces este es un olor a código, así que siempre busque mejores formas de usar Ansible, específicamente existen muchas ventajas al usar el módulo correcto. p.ej
o
Pero cuando no sea posible, use un módulo, también investigue si puede registrarse y verificar el resultado de una tarea anterior. p.ej
Tenga en cuenta la
when:
sino también elcreates:
modo--check
no fuera errorMenciono esto porque a menudo estas prácticas menos que ideales vienen en pares, es decir, sin paquete apt / yum, por lo que tenemos que 1) descargar y 2) descomprimir
Espero que esto ayude
fuente
Descubrió que las llamadas
stat
son lentas y recopilan mucha información que no es necesaria para la verificación de existencia de archivos.Después de pasar algún tiempo buscando una solución, descubrí la siguiente solución, que funciona mucho más rápido:
fuente
Puede usar el módulo estadístico Ansible para registrar el archivo y cuándo el módulo aplicará la condición.
fuente
** **
Cómo verificar si existe un archivo en Ansible usando cuando condición
** **
A continuación se muestra la reproducción ansible que utilicé para eliminar el archivo cuando el archivo existe en el sistema operativo final.
He usado la condición de juego como a continuación
puede dar verdadero / falso según su requerimiento
fuente
Si solo desea asegurarse de que existe un determinado archivo (por ejemplo, porque debe crearse de una manera diferente a la de ansible) y falla si no es así, puede hacer esto:
fuente
Una nota sobre caminos relativos para complementar las otras respuestas.
Cuando hago infraestructura como código, generalmente uso roles y tareas que aceptan rutas relativas, especialmente para los archivos definidos en esos roles.
Las variables especiales como playbook_dir y role_path son muy útiles para crear las rutas absolutas necesarias para probar la existencia.
fuente