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

时间:2020-01-03 14:01:22

标签: ansible ansible-2.x ansible-facts

我的角色很像这样:

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

建议

3 个答案:

答案 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)

来自copy module docs

要复制到远程服务器的文件的本地路径。 这可以是绝对的也可以是相对的。 如果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>