Introducción
Ansible es una herramienta de infraestructura como código que permite que un solo nodo de control supervise y administre una gran cantidad de hosts remotos (servidores).
Ansible utiliza playbooks para definir una variedad de tareas que deben realizar los hosts remotos, incluida la verificación de si existen archivos y carpetas.
Este tutorial cubre cómo usar el stat
módulo en Ansible para verificar si existen archivos y carpetas en hosts remotos.
Requisitos previos
- Acceso a la línea de comandos/ventana de terminal
- Ansible instalado y configurado (consulte nuestras guías sobre Instalación de Ansible en Windows e Instalación de Ansible en Ubuntu)
Comprobar si existe un archivo en Ansible
La forma más fácil de verificar si existe un archivo usando Ansible es con stat
módulo.
El propósito de la stat
El módulo es recuperar datos sobre archivos y carpetas y registrarlos en un registro. El módulo stat usa la siguiente sintaxis:
---
- name: Playbook name
hosts: all
tasks:
- name: Task name
stat:
path: [path to the file or directory you want to check]
register: register_name
...
donde:
stat:
Declara que estamos usando el módulo de estadísticas.path:
Declara la ruta al archivo o carpeta que queremos verificar.register:
Proporciona el nombre del registro donde el módulo de estadísticas guarda los detalles del archivo y la carpeta.
Uno de los valores registrados en el registro es exists
. Combinando este valor con debug
El módulo le permite mostrar un mensaje que detalla si existe un archivo o una carpeta:
- name: Task name
debug:
msg: "The file or directory exists"
when: register_name.stat.exists
1. En el libro de jugadas de ejemplo, la primera tarea (Comprobar si existe un archivo ) usa el stat
módulo para recuperar datos sobre el test.txt
archivo ubicado en /home/example_folder en el host remoto. Registra estos hechos en un registro llamado file_data
.
2. La segunda tarea (Informar si existe un archivo ) usa el debug
módulo para mostrar un mensaje. Comprueba los file_data
registrarse y utiliza el exists
valor como condición para mostrar un mensaje. Si exists
el valor es verdadero , el módulo muestra el mensaje ‘El archivo o directorio existe’ .
3. La tercera tarea (Informar de un archivo faltante ) hace lo mismo, excepto que muestra el mensaje ‘El archivo o directorio no existe’ si el exists
el valor es falso .
Ejecutar el libro de jugadas proporciona el siguiente resultado:
La salida nos dice que el archivo, de hecho, no existe.
Si también desea verificar que el archivo en cuestión es un archivo normal y no una carpeta, agregue el isreg
valor para el debug
condición del módulo:
- name: Task name
debug:
msg: "The file or directory exists"
when: register_name.stat.exists and register_name.stat.isreg
Comprobar si existe un directorio en Ansible
Usar Ansible para verificar si existe un directorio es exactamente lo mismo que verificar si existe un archivo. La única diferencia es que usa el isdir
valor para confirmar la ruta al directorio especificado:
- name: Task name
debug:
msg: "The file or directory exists"
when: register_name.stat.exists and register_name.stat.isdir
Ejecución de tareas de Ansible dependiendo de si existen archivos y carpetas
Hay momentos en los que desea ejecutar u omitir tareas en su libro de jugadas dependiendo de si existen ciertos archivos o carpetas.
Por ejemplo, si tiene un libro de jugadas diseñado para crear un archivo en cada host remoto, desea omitir aquellos hosts donde el archivo ya existe para evitar la creación de duplicados.
Para hacer esto, use los detalles del archivo recuperados por stat
módulo con el when
argumento para crear condiciones para ejecutar tareas:
---
- name: Playbook name
hosts: all
tasks:
- name: Task name
stat:
path: [path to the file or directory you want to check]
register: register_name
- name: Task name 2
file:
path: [path to the file you want to create]
state: touch
when: not register_name.stat.exists
...
1. En el manual anterior, la primera tarea (Comprobar si existe un archivo ) usa el stat
módulo para recuperar los detalles del test.txt
archivo ubicado en example_folder en el host remoto.
2. La segunda tarea (Crear un archivo si aún no existe ) comienza comprobando que exists
valor en el registro. Si el valor es verdadero , la tarea se omite y el cuaderno de estrategias finaliza. Si el valor es falso , la tarea se ejecuta y crea un nuevo archivo llamado test.txt
.