带通配符的 Ansible 复制文件?

Kyu*_*u96 7 copy wildcard provisioning ansible

在我的文件目录中,我有各种文件,名称结构相似:

data-example.zip
data-precise.zip
data-arbitrary.zip
data-collected.zip
Run Code Online (Sandbox Code Playgroud)

我想使用 Ansible 在远程机器的 /tmp 目录中传输所有这些文件,而无需明确指定每个文件名。换句话说,我想传输每个以“data-”开头的文件。

这样做的正确方法是什么?在一个类似的帖子中,有人建议了with_fileglob关键字,但我无法让它发挥作用。有人可以为我提供一个如何完成上述任务的例子吗?

dee*_*gan 11

方法1:找到所有文件,将它们存储在一个变量中,然后将它们复制到目的地。

- hosts: lnx
  tasks:
    - find: paths="/source/path" recurse=yes patterns="data*"
      register: file_to_copy
    - copy: src={{ item.path }} dest=/dear/dir
      owner: root
      mode: 0775
      with_items: "{{ files_to_copy.files }}"
Run Code Online (Sandbox Code Playgroud)

使用remote_src: yes将远程机器中的文件从一个路径复制到另一个路径。

Ansible 文档

方法二:Fileglob

- name: Copy each file over that matches the given pattern
  copy:
    src: "{{ item }}"
    dest: "/etc/fooapp/"
    owner: "root"
    mode: 0600
  with_fileglob:
    - "/playbooks/files/fooapp/*"
Run Code Online (Sandbox Code Playgroud)

Ansible 文档

  • `with_fileglob` 用于将文件从 ansible 服务器复制到远程服务器。如果要复制远程服务器内部的文件,则需要使用第一种方法。 (3认同)
  • 谢谢回复。看来`with_fileglob`适合大多数情况。但是我不认为有办法直接在远程计算机上进行这种模式匹配?(例如,如果您想将与模式匹配的所有文件从远程计算机上的一个位置复制到远程计算机上的另一个位置? (2认同)

Kyu*_*u96 7

在发布问题后不久,我实际上自己弄明白了。该with_fileglob关键字是做它的方式。

- name: "Transferring all data files"
  copy:
    src: "{{ item }}"
    dest: /tmp/
  with_fileglob: "data-*"
Run Code Online (Sandbox Code Playgroud)