Как выглядит разархивированный модуль ansible для бинарного файла tar? - PullRequest
0 голосов
/ 05 мая 2018

Я пытаюсь выполнить сборник заданий, использующий модуль unarchive. Поскольку я делаю это на OSX, мне нужно использовать gnu-tar вместо bsd tar, который обычно поставляется с OSX, поскольку BSD tar официально не поддерживается .

Я установил gnu-tar с помощью brew и поместил папку gnubin этого пакета перед другими путями в переменную $PATH. Тем не менее, моя книга воспроизведения по-прежнему ищет tar в папке /usr/bin (расположение оригинального tar) вместо недавно установленного gnu-tar.

У меня вопрос: как модуль unarchive ищет двоичный файл tar, и как мне было бы лучше переопределить это поведение, чтобы вместо него использовалось gnu-tar?

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Я нашел решение.

Прежде чем мы продолжим, это мой код, который гарантирует, что установленный brew gnu-tar имеет приоритет над bsd-tar, который поставляется с OSX:

# 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, как и любой другой процесс. Однако при запуске воспроизведения создается интерактивная оболочка без регистрации . Как объяснено здесь , файл ~/.bashrc загружается для интерактивных оболочек без регистрации , в то время как ~/.bash_profile загружается для оболочек входа .

Поскольку мой код находился в файле ~/.bash_profile, он никогда не запускается, когда я запускаю воспроизведение. Опять же, это потому, что при запуске игры создается интерактивная оболочка без регистрации , которая не загружает ~/.bash_profile. Следовательно, код на самом деле должен быть в ~/.bashrc.

Правда, момент, когда я переместил свой код в ~/.bashrc, был, когда моя задача начала использовать установленный gnu-tar. Я смог подтвердить это, создав задачу для регистрации which tar в переменной и напечатав ее в другой debug задаче.

0 голосов
/ 06 мая 2018

Исходный код выглядит так, будто 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» должен решить проблему

...