我的角色很像这样:
my-role
├─── files
│ my-file-one
│ my-file-two
│ my-file-...
│ my-file-n
└─── tasks
main.yml
在我的 main.yml 中,我执行了此递归复制任务, 而且我想复制所有文件而无需手动列出它们:
- name: copy all files
copy:
src: "{{ item }}"
dest: /dest/
with_items:
- ????
建议
答案 0 :(得分:3)
如果您的files
目录是平坦的(即,您不必担心递归目录),则只需使用with_fileglob
即可获取文件列表:
---
- name: copy all files
copy:
src: "{{ item }}"
dest: /dest/
with_fileglob: "files/*"
如果需要递归副本,则不能使用with_fileglob
,因为它仅返回文件列表。您可以像这样使用find
模块:
---
- name: list files
find:
paths: "{{ role_path }}/files/"
file_type: any
register: files
- name: copy files
copy:
src: "{{ item.path }}"
dest: /dest/
loop: "{{ files.files }}"
答案 1 :(得分:1)
要复制到远程服务器的文件的本地路径。 这可以是绝对的也可以是相对的。 如果path是目录,则以递归方式复制它。在这种情况下,如果路径以“ /”结尾,则仅将该目录的内部内容复制到目标。否则,如果它不以“ /”结尾,则将复制具有所有内容的目录本身。
如果将文件放入files
目录的子目录中(例如my_files
),则可以使用my_files/
作为{{1}的src
参数}模块。
copy
my-role
├─── files
| └───my_files
│ my-file-one
│ my-file-two
│ my-file-...
│ my-file-n
└─── tasks
main.yml
答案 2 :(得分:0)
使用./
作为src
参数对我有用。它将所有文件和目录从角色files
目录中递归复制到目标。
此解决方案不需要在复制文件之前列出具有其他任务的文件。
---
- name: Copy all role files to target
copy:
src: ./
dest: <destination_dir>