我试图通过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
答案 0 :(得分:1)
script module的free-form
参数需要
本地脚本文件的路径,后跟可选参数。
所以ansible 192.168.1.2 -m script -a "https://gist.githubusercontent.com/Tadly/0e65d30f279a34c33e9b/raw/pacaur_install.sh"
应该不起作用。如果您在Ansible控制主机上下载脚本并将自由格式参数设置为脚本的本地路径,它应该可以工作。
答案 1 :(得分:0)
正如评论中所述,问题在于切换用户时sudo
清理PATH
(有关详细信息,请参阅this ServerFault question)。
将本地PATH
导出到我建议的主机的ad-hoc命令似乎有点hacky但是它有效(它使用--extra-vars
ansible
命令与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
。