Search code examples
environment-variableschef-infrachef-recipe

How can you use a Chef recipe to set an environment variable?


How can you use a Chef recipe to set an environment variable?

I need to set an environment variable using a Chef recipe. Can you provide an example of how to accomplish this?


Solution

  • If you need an env var set strictly within the Chef process, you can use ENV['foo'] = 'bar' since it's a ruby process.

    If you need to set one for an execute provider, Chef exposes an environment hash:

    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
    

    If you're looking to set a persistent environment variable then you may want to have Chef edit /etc/profile.d/chef.sh, /etc/environment, a users' profile, etc.