Řešení 1:
K tomu byste měli použít modul synchronizace. To využívá úžasnou sílu rsync. Zkopíruje struktury souborů a adresářů libovolné hloubky, je neprůstřelný a vysoce účinný – kopíruje pouze skutečné bajty, které se změnily:
- name: Fetch stuff from the remote and save to local
synchronize: src={{ item }} dest=/tmp/ mode=pull
with_items:
- "folder/one"
- "folder/two"
Klíč je mode
parametr:
Určete směr synchronizace. V režimu push je zdrojem localhost nebo delegát; V režimu pull je vzdálený hostitel v kontextu zdrojem.
Řešení 2:
Pravděpodobně budete muset zaregistrovat vzdálený obsah a poté přes něj smyčkovat, něco takového by mělo fungovat:
- 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 }}"
kde /remote
by měl být změněn s cestou k adresáři na vašem vzdáleném serveru a /local/
s adresářem na vašem master
Řešení 3:
Nemám dost zástupců na to, abych se vyjádřil, jinak bych to přidal.
Použil jsem to, co napsal Kęstutis. musel jsem provést mírnou úpravu
- 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 byla oblast, kterou jsem musel změnit. jinak nebyl schopen najít soubory.
Řešení 4:
Oprava výše uvedeného příkladu
- 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 }}"
Řešení 5:
dobře, pokud používáte nejnovější ansible verzi, jako je 2.9.9, myslím, že potřebujeme uvozovky k položce
- 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 }}"