Risposte:
Probabilmente avrai bisogno di registrare il contenuto remoto e poi di passarci sopra, 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 modificato con il percorso della directory sul server remoto e /local/
con la directory sul master
A tale scopo, è necessario utilizzare il modulo di sincronizzazione . Questo utilizza il fantastico potere di rsync . Copia le strutture di file e directory di qualsiasi profondità, è a prova di proiettile e altamente efficiente, copiando solo i byte effettivi che sono stati modificati:
- 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 è il mode
parametro:
Specifica la direzione della sincronizzazione. In modalità push l'host locale o il delegato è l'origine; In modalità pull l'host remoto nel contesto è l'origine.
synchronise
modulo molto più affidabile e scalabile rispetto agli altri metodi che devono essere copiati dai file.
non ho abbastanza rappresentante per commentare altrimenti lo aggiungerei.
Ho usato quello che ha pubblicato Kęstutis. ho dovuto apportare una leggera 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 }}"
With_items era l'area che dovevo cambiare. altrimenti non è stato in grado di individuare i file.
bene, se stai usando l'ultima versione ansible, come 2.2.1.0, penso che abbiamo bisogno di virgolette per l'oggetto
- 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 }}"
- hosts: srv-test
tasks:
- find: paths="/var/tmp/collect" recurse=no patterns="*.tar"
register: file_to_copy
- fetch: src={{ item }} dest=/tmp
with_items: files_to_copy.stdout_lines
Uso questo: 1. Estrarre le directory dall'host remoto a host specifici
- name: Gather hosts stats from other hosts
shell: " scp -r {{results_root_dir_src}} root@{{groups['profiling_server'][0]}}:{{results_root_dir_dest}}/abc/"
when: "'profiling_server' not in group_names"
#It will not run on the node where the directories need to be copied.
- name: Gather from host to local
delegate_to: 127.0.0.1
run_once: true
become: false
shell: "scp -r root@{{groups['profiling_server'][0]}}:{{results_root_dir}} ./results_local_location "
inventario
[nodes]
server1
server2
server3
[profiling_server]
server1