2013-08-23 115 views
16

我使用vagrant與puppet爲開發環境設置虛擬機。我想簡單地在.pp文件中設置一些環境變量。爲Ubuntu 64位使用虛擬盒子和流浪基座盒。使用Puppet設置環境變量

我目前有這個。

$bar = 'bar' 

class foobar { 
    exec { 'foobar': 
    command => "export Foo=${bar}", 
    } 
} 

但配置時出現錯誤:無法找到命令「導出」。

這似乎應該是很簡單的我缺少某種要求或路徑,exec類?我注意到在文檔中有一個環境選項來設置環境變量,我應該使用它嗎?

回答

3

你可以嘗試:以acomplish這個

class foobar { 
    exec { 'foobar' : 
    command => "/bin/bash -c \"export Foo=${bar}\"", 
    } 
} 
+0

感謝您的答覆,我實際上找到了解決方案。雖然它消除了關於命令未找到的錯誤,但不幸的是,它不會產生預期的結果。當我進入虛擬機時,環境變量Foo沒有設置。 – bgrantdev

+3

這是一個noop。它修改了專門爲這個'exec'資源分支的shell的環境。這個shell然後立即終止。出口沒有效果。 –

15

簡單的方法就是把你的ENV在/ etc /環境乏,這可以確保它們可用於一切(或幾乎一切)。

事情是這樣的:

class example($somevar) { 
    file { "/etc/environment": 
     content => inline_template("SOMEVAR=${somevar}") 
    } 
} 

原因有參數化的類是這樣你就可以從hiera自動變量查找(http://docs.puppetlabs.com/hiera/1/puppet.html#automatic-parameter-lookup)目標吧...如果你在/ etc /環境堅持的東西,通常情況下,如果你真的使其具體環境最好。

注:我只在Ubuntu

+0

我喜歡簡單和簡潔的修復,比我不喜歡這會污染我的'/ etc/environment'。謝謝。 – 7yl4r

17

測試這個,如果你只需要在木偶運行中可用的變量,什麼不妥:

Exec { environment => [ "foo=$bar" ] } 

+1

exec語句不會在登錄到服務器時導出變量。 – ptierno

+6

我知道 - 那就是爲什麼我說'如果你只需要傀儡運行中可用的變量'。這個問題沒有說明需要在用戶shell中設置變量 – John

4

我得到它周圍也使用/etc/profile.d中的方式:

$bar = 'bar' 
file { "/etc/profile.d/my_test.sh": 
    content => "export Foo=${bar}", 
    mode => 755 
} 

這將確保每次你登錄(如SSH),變量$ MYVAR被出口到您的環境。通過木偶和登錄(前Ssh本地主機)申請後,回聲$美元將返回吧

0

我知道這是一個老問題,但我能夠設置PS1提示值,並將其添加到我的.bashrc這樣的文件:

$PS1 = '\[\e[0;31m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \$ ' 

和一個類中:

exec {"vagrant-prompt": 
    unless => "grep -F 'export PS1=\"${PS1}\"' ${HOME_DIR}/.bashrc", 
    command => "echo 'export PS1=\"${PS1}\"' >> ${HOME_DIR}/.bashrc", 
    user => "${APP_USER}", 
} 

-F使得grep它把它解釋爲固定字符串。否則它不會找到它並繼續添加到.bashrc文件。