Solusi 1:
Anda harus menggunakan modul sinkronisasi untuk melakukan ini. Ini menggunakan kekuatan rsync yang luar biasa. Ini akan menyalin struktur file &direktori dengan kedalaman apa pun, tahan peluru dan sangat efisien - hanya menyalin byte aktual yang telah berubah:
- name: Fetch stuff from the remote and save to local
synchronize: src={{ item }} dest=/tmp/ mode=pull
with_items:
- "folder/one"
- "folder/two"
Kuncinya adalah mode
parameter:
Tentukan arah sinkronisasi. Dalam mode push, localhost atau delegasi adalah sumbernya; Dalam mode tarik, host jarak jauh dalam konteks adalah sumbernya.
Solusi 2:
Anda mungkin perlu mendaftarkan konten jarak jauh dan kemudian mengulanginya, sesuatu seperti ini seharusnya berfungsi:
- 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 }}"
di mana /remote
harus diubah dengan jalur direktori di server jarak jauh Anda dan /local/
dengan direktori di master Anda
Solusi 3:
saya tidak punya cukup perwakilan untuk berkomentar kalau tidak saya akan menambahkannya.
Saya menggunakan apa yang diposting Kęstutis. saya harus membuat sedikit modifikasi
- 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 adalah area yang harus saya ubah. itu tidak dapat menemukan file sebaliknya.
Solusi 4:
Memperbaiki contoh di atas
- 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 }}"
Solusi 5:
baik, jika Anda menggunakan versi terbaru yang memungkinkan, seperti 2.9.9, saya pikir kami perlu memberi tanda kutip untuk item tersebut
- 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 }}"