Descarga de archivos grandes con Ansible
Estoy intentando descargar archivos de copia de seguridad de mis sitios web. He estructurado mi guión de juego de roles de la siguiente manera:
- site_vars.yml contiene mis variables:
- name: ftp://username:userpassword@ftp.mysite1.com/backups/mysite1backup.tgz
path: mysites/backups/www
- name: ftp://username:userpassword@ftp.mysite2.com/backups/mysite2backup.tgz
path: mysites/backups/www
- name: ftp://username:userpassword@ftp.mysite3.com/backups/mysite3backup.tgz
path: mysites/backups/www
- Guion de juego de roles de descarga real:
---
- name: Downloader
task:
- name: Download backups from FTP's
get_url:
url: "{{ item.name }}"
dest: "{{ item.path }}"
mode: 0750
no_log: false
ignore_errors: True
with_items:
- "{{ website_backup_download }}"
Esto funciona muy bien, pero el problema comienza con archivos de copia de seguridad grandes, la tarea debe ejecutarse hasta que el archivo de copia de seguridad se haya descargado correctamente.
No puedo repetir la tarea para completar el archivo o archivos incompletos. 🙂
He intentado otra solución, esto también funciona bien para un solo sitio, pero no puedo usarlo para descargas múltiples 🙁
- name: Download backups
command: wget -c ftp://username:userpassword@ftp.mysite1.com/backups/mysite1backup.tgz
args:
chdir: "{{ down_path }}"
warn: false
register: task_result
retries: 10
delay: 1
until: task_result.rc == 0
ignore_errors: True
Gracias por tu ayuda.
davy.ai
Posible solución para descargar grandes archivos de respaldo desde múltiples sitios web usando Ansible
Si la tarea debe seguir funcionando hasta que el archivo de respaldo se haya descargado correctamente, una posible solución podría ser usar el módulo
wait_for
en Ansible para esperar condiciones específicas antes de continuar con la siguiente tarea.Aquí hay un ejemplo de cómo se podría implementar esto en el playbook del descargador:
En este ejemplo, la tarea
get_url
se repite hasta que tenga éxito o se omita (debido a ignorar errores). El parámetroregister
se utiliza para almacenar el resultado de la tarea, que se comprueba mediante la condiciónuntil
. Los parámetrosretries
ydelay
determinan cuántas veces y cuánto tiempo esperar entre intentos. Finalmente, el módulowait_for
verifica la presencia de un archivo específico en la ruta de destino, usando una expresión regular para hacer coincidir el nombre de archivo extraído de la URL.Esta solución debería funcionar para descargar grandes archivos de respaldo desde múltiples sitios web, ya que utiliza el parámetro
with_items
para recorrer cada elemento en la variablewebsite_backup_download
. El parámetropath
también se establece dinámicamente en función del valorpath
del elemento actual.