Ansible - 如何在复制到远程之前在本地主机中压缩文件

Ansible - How to zip files in localhost before copying to remote

我正在尝试将大量文件(以 100 个为单位)复制到我的远程服务器。然而,使用 'copy' 命令这个任务需要相当长的时间。搜索了一下,我明白 'synchronize' 很适合这个。不幸的是,我当前的远程服务器没有 'rsync',因此我也无法使用 'synchronize' 选项。

作为解决方法,我想将文件夹压缩到 ansible 主机中,然后使用 'unarchive' 模块将其传输到远程服务器。

- name: Archive the folder
  shell: zip <dest-zip-path> <path-to-folder>
  delegate_to: localhost

但是,执行此操作时出现以下错误: "module_stderr": "sudo: a password is required\n"

有没有更简单的方法在传输之前在 ansible 主机上本地压缩文件夹?

您可能在游戏中使用了 become: true。这也适用于委托给本地主机时。但它需要在您的本地计算机上输入密码。

由于您可能不需要它,只需将 become: false 应用于此特定任务即可。否则,您将必须在本地主机上配置权限升级或提供 become_password.

此外,您应该考虑使用 archive module 而不是使用 shell。

根据 Zeitounator 发布的解决方案,这是我用来解决问题的 Ansible 代码:

- name: Archive the files
  archive:
    path: <path-to-folder>
    dest: <dest-zip-path>
    format: zip
  delegate_to: localhost
  become: false