जवाबों:
आप इसके लिए 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 }}' }
आप इस उद्देश्य के लिए with_t पूरी तरह से उपयोग कर सकते हैं:
- name: Copy multiple files to multiple directories
copy: src={{ item.0 }} dest={{ item.1 }}
with_together:
- [ 'file1', 'file2', 'file3' ]
- [ '/dir1/', '/dir2/', '/dir3/' ]
यदि आपको एक से अधिक स्थान चाहिए, तो आपको एक से अधिक कार्य करने होंगे। एक प्रतिलिपि कार्य नोड पर केवल एक स्थान (कई फ़ाइलों सहित) से दूसरे को कॉपी कर सकता है।
- 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/*
चूंकि अन्सिबल 2.5 का with_*
निर्माण किया गया है , और loop
सिंटैक्स का उपयोग किया जाना चाहिए। एक सरल व्यावहारिक उदाहरण:
- name: Copy CA files
copy:
src: '{{item}}'
dest: '/etc/pki/ca-trust/source/anchors'
owner: root
group: root
mode: 0644
loop:
- symantec-private.crt
- verisignclass3g2.crt
- 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
मॉड्यूल केवल ansible 2.x के लिए काम करता है, लेकिन ansible 1.x के लिए नहीं
stdout_lines
रिटर्न वैल्यू में उल्लेख किया है लेकिन find
मॉड्यूल के लिए लागू नहीं है । यह केवल है files
, examined
और matched
वापसी मूल्यों के रूप में। आशा है कि दूसरों की मदद करने के लिए
find
केवल रिमोट सिस्टम को देखने के लिए लगता है, प्रबंध नोड से कुछ भी हड़पने की अनुमति नहीं है। ये उत्तर, का उपयोग करते हुए with_fileglob
, अधिक उपयुक्त प्रतीत होते हैं: stackoverflow.com/a/42290160/272387 , stackoverflow.com/a/36720342/272387 ।
- 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: "/ root / {{item}}"
यदि आप विभिन्न मदों के लिए एक चर का उपयोग करके पथ से गुजर रहे हैं
src: "/ root / {{item.source_path}}"
copy
मॉड्यूल कई फ़ाइलों और / या निर्देशिका संरचना की नकल करने के लिए एक गलत उपकरण है, synchronize
इसके बजाय मॉड्यूल का उपयोग करें जो rsync
बैकएंड के रूप में उपयोग करता है । आप पर ध्यान दें, इसके लिए rsync
कंट्रोलर और टारगेट होस्ट दोनों पर इंस्टॉल होना आवश्यक है। यह वास्तव में शक्तिशाली है, ansible प्रलेखन की जाँच करें ।
उदाहरण - लक्ष्य मेजबान पर निर्देशिका 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