Câu trả lời:
Bạn có thể sẽ cần phải đăng ký nội dung từ xa và hơn là lặp lại nội dung đó, một cái gì đó như thế này sẽ hoạt động:
- 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 }}"
nơi /remote
nên được thay đổi với đường dẫn thư mục trên máy chủ từ xa của bạn và /local/
với thư mục trên máy chủ của bạn
Bạn nên sử dụng mô-đun đồng bộ hóa để làm điều này. Điều này sử dụng sức mạnh tuyệt vời của rsync . Nó sẽ sao chép cấu trúc tệp và thư mục ở bất kỳ độ sâu nào, có khả năng chống đạn và hiệu quả cao - chỉ sao chép các byte thực tế đã thay đổi:
- name: Fetch stuff from the remote and save to local
synchronize: src={{ item }} dest=/tmp/ mode=pull
with_items:
- "folder/one"
- "folder/two"
Chìa khóa là mode
tham số:
Chỉ định hướng đồng bộ hóa. Trong chế độ đẩy, localhost hoặc đại biểu là nguồn; Trong chế độ kéo, máy chủ từ xa trong ngữ cảnh là nguồn.
synchronise
mô-đun đáng tin cậy và có thể mở rộng hơn nhiều so với các phương pháp khác mà ansible phải sao chép các tập tin.
Tôi không có đủ đại diện để bình luận nếu không tôi sẽ thêm nó.
Tôi đã sử dụng những gì Kęstutis đăng. tôi đã phải sửa đổi một chút
- 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 là khu vực tôi phải thay đổi. nó không thể xác định vị trí các tập tin khác.
tốt, nếu bạn đang sử dụng phiên bản ansible mới nhất, như 2.2.1.0, tôi nghĩ rằng chúng ta cần báo giá cho mục này
- 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
Tôi sử dụng điều này: 1. Kéo thư mục từ máy chủ từ xa đến máy chủ cụ thể
- 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 "
hàng tồn kho
[nodes]
server1
server2
server3
[profiling_server]
server1