Saltar al contenido

¿Cómo puedo verificar si el archivo se ha descargado en ansible?

Solución:

Nota: esta respuesta cubre la pregunta general de “¿Cómo puedo verificar la existencia del archivo en ansible?”, No un caso específico de descarga de archivos.

El problema con las respuestas anteriores que usan acciones de “comando” o “shell” es que no funcionan en el modo –check. En realidad, la primera acción se omitirá y la siguiente generará un error en la condición “when: solr_exists.rc! = 0” (debido a que la variable no está definida).

Desde Ansible 1.3, hay una forma más directa de verificar la existencia de archivos, usando el módulo “stat”. Por supuesto, también funciona bien como “local_action” para comprobar la existencia de un archivo local:

- local_action: stat path={{secrets_dir}}/secrets.yml
  register: secrets_exist

- fail: msg="Production credentials not found"
  when: secrets_exist.stat.exists == False

A menos que tenga una razón para usar wget por qué no usar get_url módulo. Verificará si es necesario descargar el archivo.

---
- hosts        : all
  gather_facts : no
  tasks:
   - get_url:
       url="http://mirror.mel.bkb.net.au/pub/apache/lucene/solr/4.7.0/solr-4.7.0.zip"
       dest="{{project_root}}/solr-4.7.0.zip"

NOTA: Si coloca el directorio y no la ruta completa en el dest ansible aún descargará el archivo a un directorio temporal, pero hará una verificación md5 para decidir si copiar al directorio de destino.

Y si necesita guardar el estado de descarga, puede usar:

---
- hosts        : all
  gather_facts : no
  tasks:
   - get_url:
       url="http://mirror.mel.bkb.net.au/pub/apache/lucene/solr/4.7.0/solr-4.7.0.zip"
       dest="{{project_root}}/solr-4.7.0.zip"
     register: get_solr

   - debug: 
       msg="solr was downloaded"
     when: get_solr|changed

Muchos módulos ya conocen el resultado y se omitirán si ya está allí, como file o geturl. A otros les gusta command tener un creates opción, que omitirá este comando si ese archivo ya existe (o no existe, si usa la removes opción).

Por lo tanto, primero debe verificar los módulos disponibles, si ya son lo suficientemente inteligentes. Si no: recomiendo el stats módulo. Ventaja sobre la otra solución: No hay “errores rojos pero ignorados” en la salida.

- name: Check MySQL data directory existence
  stat: path=/var/lib/mysql-slave
  register: mysql_slave_data_dir

- name: Stop MySQL master to copy data directory
  service: name=mysql state=stopped
  sudo: yes 
  when: not mysql_slave_data_dir.stat.exists
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *