es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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:

  1. 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
  1. 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.

Tags:  , , , ,

Answer

  1. Avatar for 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:

    # Descargador
    
    tasks:
      - name: Descargar respaldos de FTP's
        get_url:
          url: "{{ item.name }}"
          dest: "{{ item.path }}"
          mode: 0750
        no_log: false
        ignore_errors: True
        register: result
        until: result is succeeded or result is skipped
        retries: 10
        delay: 10
        wait_for:
          - path: "{{ item.path }}"
            state: file
            search_regex: "{{ item.name.split('/')[-1] }}"
        with_items: "{{ website_backup_download }}"
    

    En este ejemplo, la tarea get_url se repite hasta que tenga éxito o se omita (debido a ignorar errores). El parámetro register se utiliza para almacenar el resultado de la tarea, que se comprueba mediante la condición until. Los parámetros retries y delay determinan cuántas veces y cuánto tiempo esperar entre intentos. Finalmente, el módulo wait_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 variable website_backup_download. El parámetro path también se establece dinámicamente en función del valor path del elemento actual.

Comments are closed.