fir*_*baa 8 ansible ansible-2.x ansible-facts
我有一个 ansible 角色,如下所示:
\n\nmy-role\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 files\n\xe2\x94\x82 my-file-one\n\xe2\x94\x82 my-file-two\n\xe2\x94\x82 my-file-...\n\xe2\x94\x82 my-file-n\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 tasks\n main.yml\nRun Code Online (Sandbox Code Playgroud)\n\n在我的main.yml中,我有这个递归复制任务,\n并且我想复制所有文件,而不需要手动列出它们:
\n\n- name: copy all files\n copy:\n src: "{{ item }}"\n dest: /dest/\n with_items:\n - ????\nRun Code Online (Sandbox Code Playgroud)\n\n建议??
\n如果你的files目录是扁平的(即,你不需要担心递归目录),你可以使用with_fileglob来获取文件列表:
---
- name: copy all files
copy:
src: "{{ item }}"
dest: /dest/
with_fileglob: "files/*"
Run Code Online (Sandbox Code Playgroud)
如果需要递归副本,则无法使用,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 }}"
Run Code Online (Sandbox Code Playgroud)
来自复制模块文档。
\n\n\n\n\n要复制到远程服务器的文件的本地路径。\n 这可以是绝对路径或相对路径。\n 如果路径是目录,则以递归方式复制。在这种情况下,如果路径以“/”结尾,则仅将该目录的内部内容复制到目标。否则,如果它不以“/”结尾,则复制目录本身及其所有内容。
\n
如果将文件放入files目录的子目录中(例如my_files),则可以用作模块的my_files/参数。srccopy
my-role\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 files\n| \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80my_files\n\xe2\x94\x82 my-file-one\n\xe2\x94\x82 my-file-two\n\xe2\x94\x82 my-file-...\n\xe2\x94\x82 my-file-n\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 tasks\n main.yml\nRun Code Online (Sandbox Code Playgroud)\n\n- name: copy all files\n copy:\n src: my_files/\n dest: /dest/\nRun Code Online (Sandbox Code Playgroud)\n
小智 5
使用./作为src论据对我有用。它将所有文件和目录从角色files目录递归复制到目标。此解决方案不需要在复制文件之前将文件与其他任务一起列出。
---
- name: Copy all role files to target
copy:
src: ./
dest: <destination_dir>
Run Code Online (Sandbox Code Playgroud)