我写了一个剧本,下载tar文件并将其解压缩到Mac中的某个目录.但是当我运行剧本时,它失败并显示以下错误
"msg": "找不到 \"/Users/harmeet/.ansible/tmp/ansible-tmp-1549339698.75-251687957122076/config.tar9IXAUQ.gz\" 的处理程序。确保安装了提取文件所需的命令。命令 \"/usr/bin/tar\" 被检测为 tar 类型 bsd。需要 GNU tar。命令 \"/usr/bin/unzip\" 无法处理存档。
行动手册代码
-name: Download the tar for sample config
unarchive:
src: http://someremoteurl/config.tar.gz
dest: /Users/{{ansible_user}}/.myfolder/
remote_src: yes
creates: /Users/{{ansible_user}}/.myfolder/config
如果在远程服务器上使用zip fie,例如 http://someremoteurl/config.zip 则此任务有效,但对于tar文件,它将失败。
在审查此问题后,我还在.bash_src
中安装了 gnu tar,例如 gtar
和更新的路径
实际上在macOS上,它寻找基于GNU的tar存档模块,这在Mac上找不到。因此,如果您在 ansible 中使用适用于 mac 的 zip 模块,它将起作用,但为此我们可能需要更改剧本文件,它可能会产生问题,因为我同时使用 mac 和 Linux 的单个剧本。我使用基于GNU的tar存档模块来解决这个问题。
我通过以下步骤解决了这个问题
- 通过自制软件安装 gtar。
brew install gnu-tar
- 在
.bashsrc
文件中设置 gtar 的路径,否则将无法使用 gtar 进行解压缩。通常.bashsrc
存在于$HOME
路径上。如果不存在,则创建它。
export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH" export MANPATH="/usr/local/opt/gnu-tar/libexec/gnuman:$MANPATH">
谢谢
如果你的默认 shell 是 zsh
,那么你应该把以下内容放在~/.zshenv
export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"
您可以通过以下方式检查它是否正常工作:
ansible the-hostname -m command -a "which tar"