繁体   English   中英

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

[英]How does ansible's unarchive module look for the tar binary?

我正在尝试执行一个ansible剧本,该剧本具有使用unarchive模块的任务。 因为我是在OSX上执行此操作,所以我需要它使用gnu-tar而不是OSX通常随附的bsd tar ,因为BSD tar没有得到官方支持

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

我的问题是,非unarchive模块如何查找tar二进制文件,而对我来说,重写此行为以便使其利用gnu-tar的最佳方式是什么?

我找到了解决方案。

在继续之前,这是我的代码,用于确保酿造安装的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 正如解释这里~/.bashrc文件被加载交互式非登录炮弹 ,而~/.bash_profile被加载的登录外壳

由于我的代码位于~/.bash_profile文件中,因此无论我何时运行播放,它都不会执行。 同样,这是因为运行播放会创建一个交互式非登录外壳 ,该外壳 不会加载~/.bash_profile 因此,代码实际上应该在~/.bashrc

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

从源代码看来,tar正在寻找gtar二进制文件,如果不是,则在寻找tar

# Prefer gtar (GNU tar) as it supports the compression options -zjJ self.cmd_path = self.module.get_bin_path('gtar', None) if not self.cmd_path: # Fallback to tar self.cmd_path = self.module.get_bin_path('tar')因此,将您的brew安装的gnu tar别名为“ gtar”或“ tar”应该可以解决此问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM