2016-09-30 337 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'模塊顯然更好。 –