ansible的unarchive模块如何查找tar二进制文件?

时间:2018-05-05 19:41:42

标签: linux macos module ansible tar

我正在尝试执行一个有使用unarchive模块的任务的ansible playbook。因为我在OSX上执行此操作,所以我需要使用gnu-tar,而不是enter image description here以来通常随OSX提供的bsd tar

我使用gnu-tar安装了brew,并将此包的gnubin文件夹放在$PATH变量中的其他路径之前。但是,我的Playbook仍会在tar文件夹(原始/usr/bin的位置)中找到tar,而不是新安装的gnu-tar

我的问题是,unarchive模块如何查找tar二进制文件,以及最好的方法是覆盖此行为,以便它使用gnu-tar代替?

2 个答案:

答案 0 :(得分:1)

我找到了解决方案。

在我们继续之前,这是我的代码,用于确保brew安装的gnu-tar优先于OSX附带的bsd-tar

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

此代码最初位于我的~/.bash_profile文件中。

ansible查找tar二进制文件的方式与您期望的一样:$PATH变量,与任何其他进程一样。但是,运行游戏会创建交互式非登录shell 。正如here所述,{em>交互式非登录shell 加载~/.bashrc文件,而登录shell 加载~/.bash_profile

由于我的代码位于~/.bash_profile文件中,因此每当我运行游戏时它都不会执行。同样,这是因为运行游戏会创建一个交互式非登录shell 不会加载~/.bash_profile。因此,代码实际应该在~/.bashrc

是的,当我将代码移到~/.bashrc时,当我的任务开始使用已安装的gnu-tar时。我能够通过创建一个任务来将which tar注册到变量并将其打印到另一个debug任务中来确认这一点。

答案 1 :(得分:0)

从源代码看,tar看起来像dhcp-18--41:VO$ python Python 2.7.15 (default, May 1 2018, 16:44:14) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> 二进制文件,如果不是gtar

tar 因此,将brew安装的gnu tar别名为“gtar”或“tar”应解决问题