2015-12-18 30 views
3

我們面臨的問題是環境變量。對於用戶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的版本

任何想法爲什麼事情在手動登錄&可靠登錄之間行爲不同?

+0

你是如何檢查環境變量的? – ydaetskcoR

+0

我使用env命令。同時檢查java -version會給我一個不同的版本,以及我在.bashrc中爲用戶顯式設置的版本。我嘗試設置.bash_profile –

+0

也許它必須對sudo env vars進行一些操作。見[這裏](http://stackoverflow.com/questions/8633461/how-to-keep-environment-variables-when-using-sudo) – user2599522

回答

0

有兩件事情,在這裏是很重要的:

  • 你是如何檢查root的環境變量? sudo env不會爲root提供正確的環境變量。
  • 你如何設置root的環境變量?

我最好的猜測是你沒有正確設置環境變量。有關如何讀取環境變量並將其設置在正確的位置,請參閱this答案。

1

根據您的系統配置,當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環境。