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
我正在尝试将大量文件(以 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