2016-09-30 338 views
0

我试图通过Ansible使用脚本来安装pacaur:Ansible shell命令`pod2man`没有找到

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失踪。这似乎是一个有道理的道路的问题。

直接使用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

这是否需要以特别的方式完成(在这种情况下,解决这个问题的最快方式就是手动进行ssh和安装),或者在编写剧本时还可以吗?您是否尝试过使用['command'](https://docs.ansible.com/ansible/command_module.html)或['shell'](https://docs.ansible.com/ansible/shell_module.html#shell )而不是?如何运行一个脚本,首先回显'PATH'? –

+0

更可能sudo的PATH。 pacaur_install.sh通过sudo调用pacman。看来,pod2man不在sudo的PATH中。您需要调整安装脚本以在sudo调用中设置PATH或调整sudoers中的PATH。 – sborsky

+0

@XiongChiamiov我需要理智的原因是,实际上我需要在几台机器上安装:)。然而,我发布了脚本的结果,回应了'PATH' @ sborsky这似乎是原因。 [this](http://serverfault.com/questions/734560/ansible-become-user-not-picking-up-path-correctly)问题似乎有关。即使正常的SSH我得到正确的'路径'。 – SolidSnake

回答

0

正如评论中所报道的那样,问题在于,当切换用户sudo时,要清理PATH(详情请参阅this ServerFault question)。

的临时命令导出本地PATH给我提出的主机似乎有点哈克,但它的工作原理(它使用ansible命令的--extra-vars选项加上神社的可变注射)

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

1

script modulefree-form参数期望

路径本地脚本文件,然后可选参数。

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

+0

你说得对。我贴错了错误的命令。现在我编辑了问题主体。对不起,谢谢。 – SolidSnake

+0

你是否检查过脚本是可执行的? –

+0

也'脚本'是比正确的模块。 'shell'模块显然更好。 –