Method #1
If you need an env var set strictly within the Chef process, you can use ENV['foo'] = 'bar' since it's a ruby process.
Method #2
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
Chef Tutorials: How to set environment variable in Chef recipe | |
Method #1 | |
If you need an env var set strictly within the Chef process, you can use ENV['foo'] = 'bar' since it's a ruby process. | |
Method #2 | |
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 | |
Method #3 | |
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. | |
Method #4 | |
If you want to set it on the system with Chef, checkout the magic_shell cookbook.magic_shell_environment is fantastic, with one gotcha. Any command invoked with system("/new/process/to/call") from a ruby script will not pull from /etc/profile.d/* automatically. | |
magic_shell_environment 'RAILS_ENV' do | |
value 'production' | |
end | |
Method #5 | |
If you want to set it at the system level in /etc/environment, you can do so directly per the following example without adding an additional recipe (this adds two env variables for 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 | |
Method #6 - in Windows | |
windows_env 'CHEF_LICENSE' do | |
value 'accept' | |
end |
I’m a DevOps/SRE/DevSecOps/Cloud Expert passionate about sharing knowledge and experiences. I am working at Cotocus. I blog tech insights at DevOps School, travel stories at Holiday Landmark, stock market tips at Stocks Mantra, health and fitness guidance at My Medic Plus, product reviews at I reviewed , and SEO strategies at Wizbrand.
Please find my social handles as below;
Rajesh Kumar Personal Website
Rajesh Kumar at YOUTUBE
Rajesh Kumar at INSTAGRAM
Rajesh Kumar at X
Rajesh Kumar at FACEBOOK
Rajesh Kumar at LINKEDIN
Rajesh Kumar at PINTEREST
Rajesh Kumar at QUORA
Rajesh Kumar at WIZBRAND