Solution 1 :
Vous devez utiliser le module de synchronisation pour ce faire. Cela utilise la puissance impressionnante de rsync. Il copiera les structures de fichiers et de répertoires de n'importe quelle profondeur, est à l'épreuve des balles et très efficace - ne copiant que les octets réels qui ont changé :
- name: Fetch stuff from the remote and save to local
synchronize: src={{ item }} dest=/tmp/ mode=pull
with_items:
- "folder/one"
- "folder/two"
La clé est le mode
paramètre :
Spécifiez le sens de la synchronisation. En mode push, l'hôte local ou le délégué est la source ; En mode pull, l'hôte distant en contexte est la source.
Solution 2 :
Vous aurez probablement besoin d'enregistrer le contenu distant et de le parcourir en boucle, quelque chose comme ceci devrait fonctionner :
- 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 }}"
où /remote
doit être modifié avec le chemin du répertoire sur votre serveur distant et /local/
avec un répertoire sur votre maître
Solution 3 :
Je n'ai pas assez de représentants pour commenter sinon je l'ajouterais.
J'ai utilisé ce que Kęstutis a posté. j'ai dû faire une légère modification
- 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 }}"
Le with_items était la zone que je devais changer. il n'a pas été en mesure de localiser les fichiers autrement.
Solution 4 :
Correction de l'exemple ci-dessus
- 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 }}"
Solution 5 :
bien, si vous utilisez la dernière version ansible, comme 2.9.9, je pense que nous avons besoin de guillemets pour l'élément
- 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 }}"