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

Ansible : How to copy everything from "Files" folders of a specific role

我有一个 ansible 角色,看起来像这样:

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:
    - ????

建议??

如果您的 files 目录是平面目录(即您不需要担心递归目录),您可以只使用 with_fileglob 获取文件列表:

---
- name: copy all files
  copy:
    src: "{{ item }}"
    dest: /dest/
  with_fileglob: "files/*"

如果您需要递归复制,则不能使用 with_fileglob,因为它只有 returns 个文件列表。您可以像这样使用 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 }}"

来自copy module docs.

Local path to a file to copy to the remote server. This can be absolute or relative. If path is a directory, it is copied recursively. In this case, if path ends with "/", only inside contents of that directory are copied to destination. Otherwise, if it does not end with "/", the directory itself with all contents is copied.

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

my-role
├─── files
|  └───my_files
│         my-file-one
│         my-file-two
│         my-file-...
│         my-file-n
└─── tasks
        main.yml
- name: copy all files
  copy:
    src: my_files/
    dest: /dest/

使用 ./ 作为 src 参数对我有用。它以递归方式将角色 files 目录中的所有文件和目录复制到目标。 此解决方案不需要在复制文件之前使用其他任务列出文件。

---
- name: Copy all role files to target
  copy:
    src: ./
    dest: <destination_dir>