답변:
이를 위해 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 }}' }
둘 이상의 위치가 필요한 경우 둘 이상의 작업이 필요합니다. 하나의 복사 작업은 한 위치 (여러 파일 포함)에서 노드의 다른 위치로만 복사 할 수 있습니다.
- 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
모듈은 ansible 1.x에서 아닙니다 ansible 2.x에서 작동하지만
stdout_lines
반환 값에 언급 했지만 find
모듈 에는 적용 할 수 없기 때문에 답변을 수정했습니다 . 그것은 단지가 files
, examined
및 matched
반환 값으로. 그 도움이 다른 사람을 희망
find
관리 노드에서 아무것도 가져 오지 못하도록 원격 시스템 만 보는 것 같습니다. 을 사용하는 이러한 답변은 stackoverflow.com/a/42290160/272387 , stackoverflow.com/a/36720342/272387with_fileglob
을 사용 하는 것이 더 적합 합니다.
- 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 / {{항목}}"
다른 항목에 대한 변수를 사용하여 경로를 전달하는 경우
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