回答:
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 }}' }
複数の場所が必要な場合は、複数のタスクが必要です。1つのコピータスクは、ノード上の1つの場所(複数のファイルを含む)から別の場所にのみコピーできます。
- 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 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
moduleは、多くのファイルやディレクトリ構造をコピーするための誤ったツールです。synchronize
代わりにrsync
、バックエンドとして使用するmoduleを使用してください。ご注意ください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