无法通过 macOS 中的 ansible 取消归档模块提取 tar 文件?

Tec*_*ain 6 macos zip tar ansible

我编写了一个剧本,它下载 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
Run Code Online (Sandbox Code Playgroud)

如果在远程服务器上使用 zip 文件,例如http://someremoteurl/config.zip,则此任务可以工作,但对于 tar 文件则失败。

我还安装了 gnu tar 例如&在查看此问题gtar后更新了路径.bash_src

Tec*_*ain 9

实际上,在 macOS 上,它会查找基于 GNU 的 tar 存档模块,而在 mac 上找不到该模块。因此,如果您在 ansible 中使用适用于 mac 的 zip 模块,它会起作用,但为此我们可能需要更改 playbook 文件,并且它可能会产生问题,因为我在 mac 和 linux 上使用单个 playbook。我使用基于 GNU 的 tar 存档模块来解决这个问题。

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

  1. 通过自制软件安装 gtar。brew install gnu-tar
  2. 设置.bashsrc文件中 gtar 的路径,否则将无法使用 gtar 进行解压。通常.bashsrc存在于$HOME路径中。如果不存在则创建它。

导出 PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH" 导出 MANPATH="/usr/local/opt/gnu-tar/libexec/gnuman:$MANPATH"

谢谢