Soluzione 1:
Dovresti usare il modulo di sincronizzazione per fare questo. Questo utilizza il fantastico potere di rsync. Copierà strutture di file e directory di qualsiasi profondità, è a prova di proiettile e altamente efficiente - copia solo i byte effettivi che sono cambiati:
- name: Fetch stuff from the remote and save to local
synchronize: src={{ item }} dest=/tmp/ mode=pull
with_items:
- "folder/one"
- "folder/two"
La chiave è la mode
parametro:
Specificare la direzione della sincronizzazione. In modalità push il localhost o delegato è l'origine; In modalità pull l'host remoto nel contesto è l'origine.
Soluzione 2:
Probabilmente dovrai registrare il contenuto remoto e poi ripassarlo, qualcosa del genere dovrebbe funzionare:
- 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 }}"
dove /remote
dovrebbe essere cambiato con il percorso della directory sul tuo server remoto e /local/
con la directory sul tuo master
Soluzione 3:
non ho abbastanza rappresentante per commentare altrimenti lo aggiungerei.
Ho usato ciò che ha pubblicato Kęstutis. ho dovuto apportare una piccola modifica
- 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 }}"
Il with_items era l'area che dovevo cambiare. altrimenti non è stato in grado di individuare i file.
Soluzione 4:
Correggere l'esempio precedente
- 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 }}"
Soluzione 5:
beh, se stai usando l'ultima versione di ansible, come la 2.9.9, penso che abbiamo bisogno di virgolette per l'articolo
- 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 }}"