Yanıtlar:
Muhtemelen uzak içeriği kaydetmeniz gerekir ve bunun üzerinden döngü yapmak yerine, böyle bir şey işe yarayacaktır:
- 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 }}"
nerede /remote
uzak sunucuda ve dizin yolu ile değiştirilmesi gerektiğini /local/
efendin dizine ile
Bunu yapmak için senkronizasyon modülünü kullanmalısınız . Bu rsync'in müthiş gücünü kullanır . Herhangi bir derinlikte dosya ve dizin yapılarını kopyalar, kurşun geçirmez ve yüksek verimlidir - sadece değişen gerçek baytları kopyalar:
- name: Fetch stuff from the remote and save to local
synchronize: src={{ item }} dest=/tmp/ mode=pull
with_items:
- "folder/one"
- "folder/two"
Anahtar mode
parametredir:
Senkronizasyonun yönünü belirtin. İtme modunda localhost veya delege kaynaktır; Çekme modunda bağlamdaki uzak ana bilgisayar kaynaktır.
synchronise
modülü çok daha güvenilir ve ölçeklenebilir yanıtlayıcı 'dosyaları kopyalamak zorundadır diğer yöntemlere göre daha olmaktır.
başka yorum eklemek için yeterli temsilcisi yok.
Kęstutis'in gönderdiklerini kullandım. küçük bir değişiklik yapmak zorunda kaldım
- 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 değiştirmek zorunda kaldı alan oldu. aksi halde dosyaları bulamadı.
2.2.1.0 gibi en yeni ansible sürümünü kullanıyorsanız, öğeye alıntı yapmamız gerektiğini düşünüyorum
- 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
Bunu kullanın: 1. Uzak ana bilgisayardan belirli ana bilgisayarlara dizinleri çekin
- 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 "
envanter
[nodes]
server1
server2
server3
[profiling_server]
server1