找不到 Ansible shell 命令`pod2man`

Ansible shell command `pod2man` not found

我正在尝试通过 Ansible 使用脚本安装 pacaur:

curl -s https://gist.githubusercontent.com/Tadly/0e65d30f279a34c33e9b/raw/pacaur_install.sh | bash

使用ansible命令

ansible 192.168.1.2 -m shell -a "curl -s https://gist.githubusercontent.com/Tadly/0e65d30f279a34c33e9b/raw/pacaur_install.sh | bash" 

但我 pacman 抱怨 pod2man 不见了。看来是ansible命令的PATH有问题。

运行机器上直接使用ssh的命令可以正常运行


这是输出:ansible -m all shell -a 'echo $PATH'

localhost | SUCCESS | rc=0 >>
/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl

192.168.1.2| SUCCESS | rc=0 >>
/usr/bin:/bin:/usr/sbin:/sbin

script modulefree-form参数期望

path to the local script file followed by optional arguments.

所以 ansible 192.168.1.2 -m script -a "https://gist.githubusercontent.com/Tadly/0e65d30f279a34c33e9b/raw/pacaur_install.sh" 应该行不通。如果您在 Ansible 控制主机上下载脚本并将自由格式参数设置为脚本的本地路径,它应该可以工作。

如评论中所述,问题是切换用户时 sudo 会清理 PATH(有关详细信息,请参阅 this ServerFault question)。

将本地 PATH 导出到我建议的主机的临时命令似乎有点老套,但它有效(它使用 ansible 命令的 --extra-vars 选项以及Jinja 的变量注入)

ansible all -m shell -a "export PATH={{path}}; curl -s https://gist.githubusercontent.com/Tadly/0e65d30f279a34c33e9b/raw/pacaur_install.sh | bash" -e path=$PATH

您也可以使用 {{ lookup('env', 'PATH') }} 转发 PATH