我們面臨的問題是環境變量。對於用戶A,JAVA_HOME
設置爲1.5,對於root,則設置爲1.7。當我手動登錄&檢查兩個A &根中的版本時,它反映的是相同的。對於sudo用戶,Ansible env變量不同
當我通過ansible與須藤設置爲true(sudo_user=root
)用戶A SSH,我預計Java版本是1.7,但它回來爲1.5,這是用戶A的版本
任何想法爲什麼事情在手動登錄&可靠登錄之間行爲不同?
我們面臨的問題是環境變量。對於用戶A,JAVA_HOME
設置爲1.5,對於root,則設置爲1.7。當我手動登錄&檢查兩個A &根中的版本時,它反映的是相同的。對於sudo用戶,Ansible env變量不同
當我通過ansible與須藤設置爲true(sudo_user=root
)用戶A SSH,我預計Java版本是1.7,但它回來爲1.5,這是用戶A的版本
任何想法爲什麼事情在手動登錄&可靠登錄之間行爲不同?
有兩件事情,在這裏是很重要的:
sudo env
不會爲root提供正確的環境變量。我最好的猜測是你沒有正確設置環境變量。有關如何讀取環境變量並將其設置在正確的位置,請參閱this答案。
根據您的系統配置,當Ansible通過sudo升級其權限時,環境將被'消毒',從而爲您提供一組最小的env變量。您的/etc/sudoers
文件可能具有設置env_reset
。
您有幾個選項。
在sudoers文件中,您可以刪除env_reset
或者您可以爲要保留的每個變量添加env_keep MY_VAR
條目。
在Ansible中,您可以明確設置所需的環境變量。這樣做,在一個特定的任務看起來是這樣的:
- hosts: all
tasks:
- cmd: echo $MY_ENV
become: true
environment:
MY_ENV: "foo"
你可以閱讀更多關於他們的文檔的Setting the Environment部分設置環境Ansible。
如果不知道你需要什麼,我會強烈建議在你的Ansible代碼中設置變量並單獨保留sudoers文件,除非你真的需要這些值保存在env的Ansible範圍之外。這有助於避免用戶使用不一致的sudo環境。
你是如何檢查環境變量的? – ydaetskcoR
我使用env命令。同時檢查java -version會給我一個不同的版本,以及我在.bashrc中爲用戶顯式設置的版本。我嘗試設置.bash_profile –
也許它必須對sudo env vars進行一些操作。見[這裏](http://stackoverflow.com/questions/8633461/how-to-keep-environment-variables-when-using-sudo) – user2599522