Ansible:如何从特定角色的“文件”文件夹中复制所有内容

fir*_*baa 8 ansible ansible-2.x ansible-facts

我有一个 ansible 角色,如下所示:

\n\n
my-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\n
Run 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    - ????\n
Run Code Online (Sandbox Code Playgroud)\n\n

建议??

\n

lar*_*sks 8

如果你的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)

  • 这是一个旧答案。根据文档,“with_fileglob”是本地查找,而“find”是远程查找,因此这可能不会满足您的要求。 (2认同)

Cal*_*pin 5

来自复制模块文档

\n\n
\n

要复制到远程服务器的文件的本地路径。\n 这可以是绝对路径或相对路径。\n 如果路径是目录,则以递归方式复制。在这种情况下,如果路径以“/”结尾,则仅将该目录的内部内容复制到目标。否则,如果它不以“/”结尾,则复制目录本身及其所有内容。

\n
\n\n

如果将文件放入files目录的子目录中(例如my_files),则可以用作模块的my_files/参数。srccopy

\n\n
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\n
Run Code Online (Sandbox Code Playgroud)\n\n
- name: copy all files\n  copy:\n    src: my_files/\n    dest: /dest/\n
Run 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)