Solución 1:
Debe usar el módulo de sincronización para hacer esto. Esto utiliza el increíble poder de rsync. Copiará estructuras de archivos y directorios de cualquier profundidad, es a prueba de balas y altamente eficiente, solo copia los bytes reales que han cambiado:
- name: Fetch stuff from the remote and save to local
synchronize: src={{ item }} dest=/tmp/ mode=pull
with_items:
- "folder/one"
- "folder/two"
La clave es el mode
parámetro:
Especifique la dirección de la sincronización. En el modo push, el localhost o delegado es la fuente; En el modo pull, el host remoto en contexto es la fuente.
Solución 2:
Probablemente necesitará registrar contenido remoto y luego recorrerlo, algo como esto debería funcionar:
- shell: (cd /remote; find . -maxdepth 1 -type f) | cut -d'/' -f2
register: files_to_copy
- fetch: src=/remote/{{ item }} dest=/local/
with_items: "{{ files_to_copy.stdout_lines }}"
donde /remote
debe cambiarse con la ruta del directorio en su servidor remoto y /local/
con directorio en tu maestro
Solución 3:
No tengo suficiente representante para comentar, de lo contrario lo agregaría.
Usé lo que publicó Kęstutis. Tuve que hacer una pequeña modificación
- shell: (cd /remote; find . -maxdepth 1 -type f) | cut -d'/' -f2
register: files_to_copy
- fetch: src=/remote/{{ item }} dest=/local/
with_items: "{{ files_to_copy.stdout_lines }}"
with_items era el área que tenía que cambiar. de lo contrario, no podría localizar los archivos.
Solución 4:
Arreglando el ejemplo anterior
- hosts: srv-test
tasks:
- find: paths="/var/tmp/collect" recurse=no patterns="*.tar"
register: files_to_copy
- fetch: src={{ item.path }} dest=/tmp
with_items: "{{ files_to_copy.files }}"
Solución 5:
bueno, si está utilizando la última versión de ansible, como 2.9.9, creo que necesitamos comillas para el elemento
- name: use find to get the files list which you want to copy/fetch
find:
paths: /etc/
patterns: ".*passwd$"
use_regex: True
register: file_2_fetch
- name: use fetch to get the files
fetch:
src: "{{ item.path }}"
dest: /tmp/
flat: yes
with_items: "{{ file_2_fetch.files }}"