রিমোট মেশিন থেকে একাধিক ফাইল আনসিবল সহ লোকালয়ে কীভাবে আনতে হয়


17

আমি দূরবর্তী ডিরেক্টরি থেকে স্থানীয় ডিরেক্টরিতে উত্তরগুলি সহ ফাইলগুলি অনুলিপি করতে চাই তবে আনতে মডিউল আমাকে কেবল একটি ফাইল অনুলিপি করতে দেয়। আমার অনেকগুলি সার্ভার রয়েছে যা থেকে আমার ফাইলগুলি (প্রতিটি ডিরেক্টরি একই ডিরেক্টরি) প্রয়োজন এবং আমি এখন কীভাবে উত্তরযোগ্য এটি করব don't

কোন ধারনা?

উত্তর:


22

আপনার সম্ভবত রিমোট সামগ্রীর নিবন্ধকরণ করতে হবে এবং এটির লুপের চেয়ে, এর মতো কিছু কাজ করা উচিত:

- 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 }}"

/remoteআপনার দূরবর্তী সার্ভারের ডিরেক্টরি পথ এবং /local/আপনার মাস্টারের ডিরেক্টরি সহ যেখানে পরিবর্তন করা উচিত


1
যাইহোক, এটি কেবলমাত্র এক স্তর গভীরে যায় (উপ-ডিরেক্টরিগুলি ছেড়ে দেয়) এবং ডিরেক্টরিগুলি সাধারণভাবে উপেক্ষা করে তাই যদি এটি আপনার ইচ্ছা মতো কিছু না হয় তবে কেবল শেল কমান্ডটি অক্ষরে পরিবর্তন করুন।
কাস্টুটিস

যখন আমি একগুচ্ছ সার্ভারগুলিতে চলি তখন কী হবে? প্রতিটি তার নিজস্ব অনুসন্ধান নিবন্ধন করবে? এবং সঠিকগুলি আনা?
আমির মেহলার

কোন সূত্র কিভাবে win_find দিয়ে এটি করবেন? ফাইল তালিকা থেকে এটি কীভাবে ফিরে আসে সেগুলি থেকে কীভাবে অতিরিক্ত পথ পাবে তা আমি বুঝতে পারি না
পিটার কাহন

27

এটি করার জন্য আপনার সিঙ্ক্রোনাইজ মডিউলটি ব্যবহার করা উচিত । এটি rsync এর দুর্দান্ত শক্তি ব্যবহার করে । এটি কোনও গভীরতার ফাইল এবং ডিরেক্টরি কাঠামো অনুলিপি করবে, বুলেটপ্রুফ এবং অত্যন্ত দক্ষ - কেবলমাত্র আসল বাইটগুলিই বদলেছে যা অনুলিপি করছে:

- name: Fetch stuff from the remote and save to local
  synchronize:  src={{ item }} dest=/tmp/ mode=pull
  with_items:
    - "folder/one"
    - "folder/two"

কীটি হল modeপ্যারামিটার:

সিঙ্ক্রোনাইজেশনের দিক উল্লেখ করুন। পুশ মোডে লোকালহোস্ট বা প্রতিনিধি হ'ল উত্স; পুল মোডে প্রসঙ্গে দূরবর্তী হোস্টটি উত্স।


1
আমি synchroniseঅনুলিপি করা অন্যান্য পদ্ধতির চেয়ে ফাইলগুলিকে অনুলিপি করার চেয়ে মডিউলটি অনেক বেশি নির্ভরযোগ্য এবং স্কেলযোগ্য হতে পেরেছি।
ছানা

3
এটি অবশ্যই গ্রহণের উত্তরের চেয়ে ভাল করার একটি উপায়।
চাইল্ডফসূং

5

আমার মন্তব্য করার মতো যথেষ্ট পরিমাণে উত্তর নেই, অন্যথায় আমি এটি যুক্ত করতে পারি।

কস্টুটিস যা পোস্ট করেছিলেন তা আমি ব্যবহার করেছি। আমাকে কিছুটা পরিবর্তন করতে হয়েছিল

- 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 }}"

আমার সাথে পরিবর্তন করতে হবে এমন এলাকাটি ছিল_ইটেমগুলির সাথে। এটি অন্যথায় ফাইলগুলি সনাক্ত করতে সক্ষম হয় নি।


2

উপরের উদাহরণটি ঠিক করা

- 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 }}"

1

ভাল, আপনি যদি ২.২.১.০ এর মতো সাম্প্রতিক উত্তরযোগ্য সংস্করণটি ব্যবহার করেন তবে আমি মনে করি আমাদের আইটেমটির উদ্ধৃতি দরকার

- 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 }}"


0

আমি এটি ব্যবহার করি: 1. দূরবর্তী হোস্ট থেকে নির্দিষ্ট হোস্টগুলিতে ডিরেক্টরিগুলি টানুন

- 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.
  1. নোড থেকে লোকালহোস্টে ডিরেক্টরিগুলি টানুন
- 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 "

জায়

[nodes]
server1
server2
server3
[profiling_server]
server1

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.