Respuestas:
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 el directorio en su maestro
Debe usar el módulo de sincronización para hacer esto. Esto usa el increíble poder de rsync . Copiará las 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 modo push, el host local o delegado es la fuente; En modo pull, el host remoto en contexto es la fuente.
synchronise
módulo es mucho más confiable y escalable que los otros métodos que Ansible tiene para copiar archivos.
No tengo suficiente representante para comentar, de lo contrario lo agregaría.
Usé lo que Kęstutis publicó. tuve que hacer una ligera 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 fue el área que tuve que cambiar. de lo contrario, no pudo localizar los archivos.
bueno, si está utilizando la última versión ansible, como 2.2.1.0, creo que necesitamos citas para el artículo
- 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 }}"
- hosts: srv-test
tasks:
- find: paths="/var/tmp/collect" recurse=no patterns="*.tar"
register: file_to_copy
- fetch: src={{ item }} dest=/tmp
with_items: files_to_copy.stdout_lines
Yo uso esto: 1. Extraer directorios del host remoto a hosts específicos
- name: Gather hosts stats from other hosts
shell: " scp -r {{results_root_dir_src}} root@{{groups['profiling_server'][0]}}:{{results_root_dir_dest}}/abc/"
when: "'profiling_server' not in group_names"
#It will not run on the node where the directories need to be copied.
- name: Gather from host to local
delegate_to: 127.0.0.1
run_once: true
become: false
shell: "scp -r root@{{groups['profiling_server'][0]}}:{{results_root_dir}} ./results_local_location "
inventario
[nodes]
server1
server2
server3
[profiling_server]
server1