কোনও কার্যে উত্তর দিয়ে আমি কীভাবে একাধিক ফাইলকে রিমোট নোডে অনুলিপি করতে পারি?
ফাইলগুলি সংজ্ঞায়িত করার জন্য আমি আমার কার্যটিতে অনুলিপি করার চেষ্টা করেছি তবে এটি কেবল প্রথম ফাইলটি অনুলিপি করে।
উত্তর:
আপনি এর with_fileglobজন্য লুপটি ব্যবহার করতে পারেন :
- copy:
src: "{{ item }}"
dest: /etc/fooapp/
owner: root
mode: 600
with_fileglob:
- /playbooks/files/fooapp/*
/roles/db/filesতবে আমি এই পদ্ধতিতে এটি কাজ করতে পারি না। আমি চেষ্টা করেছি with_fileglob: - /roles/db/file/* কিন্তু পথটি ভাল করবে না
- name: Your copy task
copy: src={{ item.src }} dest={{ item.dest }}
with_items:
- { src: 'containerizers', dest: '/etc/mesos/containerizers' }
- { src: 'another_file', dest: '/etc/somewhere' }
- { src: 'dynamic', dest: '{{ var_path }}' }
# more files here
destভেরিয়েবল হিসাবে সেট দিয়ে এই সমাধান করা সম্ভব ? { src: 'containerizers', dest: {{ containerizers }} }।
{ src: '{{ source.var }}', dest: '{{ dest.var }}' }
আপনি এই উদ্দেশ্যটির জন্য_ সহ একসাথে ব্যবহার করতে পারেন:
- name: Copy multiple files to multiple directories
copy: src={{ item.0 }} dest={{ item.1 }}
with_together:
- [ 'file1', 'file2', 'file3' ]
- [ '/dir1/', '/dir2/', '/dir3/' ]
আপনার যদি একাধিক অবস্থানের প্রয়োজন হয় তবে আপনার একাধিক কার্য প্রয়োজন need একটি অনুলিপি টাস্ক নোডের কেবলমাত্র একটি অবস্থান (একাধিক ফাইল সহ) থেকে অন্য এক জায়গায় অনুলিপি করতে পারে।
- copy: src=/file1 dest=/destination/file1
- copy: src=/file2 dest=/destination/file2
# copy each file over that matches the given pattern
- copy: src={{ item }} dest=/destination/
with_fileglob:
- /files/*
- hosts: lnx
tasks:
- find: paths="/appl/scripts/inq" recurse=yes patterns="inq.Linux*"
register: file_to_copy
- copy: src={{ item.path }} dest=/usr/local/sbin/
owner: root
mode: 0775
with_items: "{{ files_to_copy.files }}"
findমডিউলটি কেবল উত্তরসূচক 2.x এর জন্য কাজ করে তবে উত্তরযোগ্য 1.x এর জন্য নয়
stdout_linesরিটার্ন মানটিতে উল্লেখ করেছেন তবে findমডিউলটির জন্য প্রযোজ্য নয় । এটি কেবল আছে files, examinedএবং matchedফেরতের মান হিসাবে। আশা করি এটি অন্যকে সহায়তা করবে
findকেবল ম্যানেজিং নোড থেকে কিছু দখল করার অনুমতি না দিয়ে দূরবর্তী সিস্টেমটি দেখে মনে হচ্ছে। এই উত্তরগুলি ব্যবহার করে with_fileglobআরও মানানসই বলে মনে হচ্ছে: stackoverflow.com/a/42290160/272387 , stackoverflow.com/a/36720342/272387 ।
অথবা আপনি_উত্তরগুলি সহ ব্যবহার করতে পারেন:
- copy:
src: "{{ item }}"
dest: /etc/fooapp/
owner: root
mode: 600
with_items:
- dest_dir
- name: find inq.Linux*
find: paths="/appl/scripts/inq" recurse=yes patterns="inq.Linux*"
register: find_files
- name: set fact
set_fact:
all_files:
- "{{ find_files.files | map(attribute='path') | list }}"
when: find_files > 0
- name: copy files
copy:
src: "{{ item }}"
dest: /destination/
with_items: "{{ all_files }}"
when: find_files > 0
আপনার ক্লায়েন্ট মেশিনে একাধিক ফাইল অনুলিপি করার জন্য নিম্নলিখিত উত্স কোডটি ব্যবহার করুন।
- name: Copy data to the client machine
hosts: hostname
become_method: sudo
become_user: root
become: true
tasks:
# Copy twice as sometimes files get skipped (mostly only one file skipped from a folder if the folder does not exist)
- name: Copy UFO-Server
copy:
src: "source files path"
dest: "destination file path"
owner: root
group: root
mode: 0644
backup: yes
ignore_errors: true
বিঃদ্রঃ:
আপনি যদি ভেরিয়েবল ব্যবহার করে একাধিক পাথ পার করছেন
src: "/ রুট / {{আইটেম}}"
যদি আপনি বিভিন্ন আইটেমের জন্য একটি ভেরিয়েবল ব্যবহার করে পাথ পার করছেন then
src: "/ রুট / {{আইটেম.সোর্স_পথ}}"
copyমডিউল অনেকগুলি ফাইল এবং / অথবা ডিরেক্টরি কাঠামো অনুলিপি করার জন্য একটি ভুল সরঞ্জাম, synchronizeপরিবর্তে মডিউল ব্যবহার করে যা rsyncব্যাকএন্ড হিসাবে ব্যবহার করে । মনে মনে, এটি rsyncনিয়ামক এবং লক্ষ্য হোস্ট উভয়ই ইনস্টল করা প্রয়োজন । এটি সত্যই শক্তিশালী, উত্তরযোগ্য ডকুমেন্টেশন পরীক্ষা করুন ।
উদাহরণ - লক্ষ্য হোস্টের ডিরেক্টরিতে buildকন্ট্রোলারের ডিরেক্টরি থেকে ডিরেক্টরি (সাব-ডিরেক্টরি সহ) অনুলিপি /var/www/htmlকরুন:
synchronize:
src: ./my-static-web-page/build/
dest: /var/www/html
rsync_opts:
- "--chmod=D2755,F644" # copy from windows - force permissions