2011-06-08 138 views
33

如何使用廚師食譜來設置環境變量?如何使用廚師食譜來設置環境變量?

我需要使用Chef recipe來設置一個環境變量。你能提供一個如何完成這個的例子嗎?

+2

你想設置的環境變量的上下文是什麼? – 2011-07-12 02:31:29

+0

你可以延長你的問題嗎?它似乎已被回答,除非您分享更多信息或給我們一些反饋。 – Till 2011-11-03 19:19:57

回答

26

如果您需要在Chef過程中嚴格執行env var集合,您可以使用ENV['foo'] = 'bar',因爲這是一個紅寶石進程。

如果您需要設置一個用於execute provider,廚師暴露的環境中的散列:

execute 'Bootstrap the database' do 
    cwd "#{app_dir}/current" 
    command "#{env_cmd} rake db:drop db:create db:schema:load RAILS_ENV=#{rails_env}" 
    environment 'HOME' => "/home/#{app_user}" 
    user app_user 
    action :run 
    not_if %[psql -U postgres -c "\\l" | grep #{db_name}] 
end 

如果你正在尋找設置一個持久的環境變量,那麼你可能需要有廚師編輯/etc/profile.d/chef.sh/etc/environment,用戶的個人資料等。

+1

能否請你解釋一下如何通過廚師永久設置一個環境變量 – Prats 2014-04-08 10:49:57

+1

@Prats - 檢查'magic_shell'食譜 - http://community.opscode.com/cookbooks/magic_shell – 2014-05-08 18:13:40

14

如果您想將其設置在系統與廚師,結帳magic_shell cookbook

magic_shell_environment 'RAILS_ENV' do 
    value 'production' 
end 
+1

只是爲其他使用谷歌搜索的人提供的一個提示 - magic_shell_environment很棒,只有一個問題。任何使用系統(「/ new/process/to/call」)從ruby腳本調用的命令都不會從/etc/profile.d/*自動提取 – matt 2013-04-25 16:15:35

+0

@matt您可以強制執行交互式登錄和/或者在Ruby腳本中找到'/ etc/profile'。 – sethvargo 2013-04-28 17:21:28

+0

謝謝,@sethvargo。要更新一個環境變量,比如'$ PATH',我應該如何使用'magic_shell'食譜? – 2014-03-24 18:29:27

3

如果你想在/etc/environment系統級設置,您可以因此直接按照下面的例子做不添加額外的配方(這增加了兩個ENV變量的Java):

sys_env_file = Chef::Util::FileEdit.new('/etc/environment') 
{ 
    'JAVA_HOME' => '/usr/lib/jvm/java-1.7.0-openjdk-amd64', 
    'LD_LIBRARY_PATH' => '/usr/lib/jvm/java-1.7.0-openjdk-amd64/lib' 
}.each do |name, val| 
    sys_env_file.insert_line_if_no_match /^#{name}\=/, "#{name}=\"#{val}\"" 
    sys_env_file.write_file 
end