无法通过 macOS 中的 ansible 解压缩模块提取 tar 文件



我写了一个剧本,下载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存档模块来解决这个问题。

我通过以下步骤解决了这个问题

  1. 通过自制软件安装 gtar。 brew install gnu-tar
  2. .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"

最新更新