使用 Ansible 从远程服务器(使用 glob)获取或复制文件到当前服务器会导致“文件未找到:/tmp/data/*.zip”

使用 Ansible 从远程服务器(使用 glob)获取或复制文件到当前服务器会导致“文件未找到:/tmp/data/*.zip”

在 Ansible 中,我想从远程服务器 B 获取或复制 zip 文件到当前登录的远程服务器 A(两者都是 Linux 主机)。如下所示,我使用通配符(glob)指定源文件:

- hosts: server-A
  become: yes
  tasks:
  - name: copy the zip files
    fetch:
      src: /tmp/data/*.zip
      dest: /tmp/app/
      flat: yes
    register: zip_status
    delegate_to: server-B

以下是我得到的错误;我也尝试过复制/同步模块,但它不起作用。实际上该文件存在于目标服务器-B

fatal: [server-B -> 10.98.68.222]: FAILED! => {
    "changed": false,
    "invocation": {
        "module_args": {
            "src": "/tmp/data/*.zip"
        }
    "msg": "file not found: /tmp/data/*.zip"

我试过蒂姆·肯尼迪的回答。如上所述,我首先登录到Server-A。如上面的代码所示,我委托给Server-B。我delegate_to: server-B在下面添加了另一行。如上所述,我想将 .zip 文件从/tmp/data/(服务器 B)复制到/tmp/app/(服务器 A)。

- hosts: server-A
  become: yes
  tasks:
  - name: find the zip files
    find:
      paths: "/tmp/data"
      recurse: no
      patterns: "*.zip"
    register: zip_files
    delegate_to: server-B

  - name: copy the zip files
    fetch:
      src: "{{ item.path }}"
      dest: "/tmp/app/"
      flat: yes
    with_items: "{{ zip_files.files }}"
    register: zip_status
    delegate_to: server-B

使用 find 模块,它可以正确显示文件,但使用 fetch 模块时出错,它试图/tmp/app/在已经存在的情况下创建目录。完全许可到位。

fatal: [server-A]: FAILED! => {
    "msg": "Unable to create local directories(/tmp/app/): [Errno 13] Permission denied: '/tmp'"

答案1

Fetch 不支持目录或通配符。文档非常清楚该字符串将被解释为文件名,并且仅是文件名。您可以使其与单独的查找过程提供的文件列表结合使用。

也许是这样的:

- hosts: server-A
  become: yes
  tasks:
  - name: find the zip files
    find:
      paths: "/tmp/data"
      recurse: no
      patterns: "*.zip"
    register: zip_files
  - name: copy the zip files
    fetch:
      src: "{{ item.path }}"
      dest: "/tmp/app/"
      flat: yes
    with_items: "{{ zip_files.files }}"
    register: zip_status
    delegate_to: server-B

我不完全确定这是否会按照我们想要的 delegate_to 方式工作,但它至少应该让您指向正确的方向。

相关内容