Lösung 1:
Verwenden Sie dazu das Synchronisierungsmodul. Dies nutzt die großartige Leistung von rsync. Es kopiert Datei- und Verzeichnisstrukturen beliebiger Tiefe, ist kugelsicher und hocheffizient - es kopiert nur die tatsächlichen Bytes, die sich geändert haben:
- name: Fetch stuff from the remote and save to local
synchronize: src={{ item }} dest=/tmp/ mode=pull
with_items:
- "folder/one"
- "folder/two"
Der Schlüssel ist der mode
Parameter:
Geben Sie die Richtung der Synchronisation an. Im Push-Modus ist der Localhost oder Delegate die Quelle; Im Pull-Modus ist der Remote-Host im Kontext die Quelle.
Lösung 2:
Wahrscheinlich müssen Sie Remote-Inhalte registrieren und diese dann durchlaufen, so etwas sollte funktionieren:
- 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 }}"
wobei /remote
sollte mit dem Verzeichnispfad auf Ihrem Remote-Server und /local/
geändert werden mit Verzeichnis auf Ihrem Master
Lösung 3:
Ich habe nicht genug Repräsentanten, um zu kommentieren, sonst würde ich es hinzufügen.
Ich habe verwendet, was Kęstutis gepostet hat. Ich musste eine kleine Änderung vornehmen
- 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 }}"
Die with_items war der Bereich, den ich ändern musste. es war nicht in der Lage, die Dateien sonst zu finden.
Lösung 4:
Korrektur des obigen Beispiels
- 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 }}"
Lösung 5:
Nun, wenn Sie die neueste Ansible-Version wie 2.9.9 verwenden, benötigen wir Anführungszeichen für das Element.
- 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 }}"