如何使用Chef配方设置环境变量?

Bra*_*don 35 environment-variables chef-infra chef-recipe

如何使用Chef配方设置环境变量?

我需要使用Chef配方设置环境变量.你能提供一个如何实现这个目标的例子吗?

jod*_*ell 28

如果你需要在Chef过程中严格设置一个env var,你可以使用ENV['foo'] = 'bar'因为它是一个ruby过程.

如果需要为执行提供程序设置一个,Chef会公开环境哈希:

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
Run Code Online (Sandbox Code Playgroud)

如果您要设置持久性环境变量,那么您可能希望拥有Chef编辑/etc/profile.d/chef.sh,/etc/environment用户配置文件等.


set*_*rgo 14

如果您想在使用Chef 的系统上进行设置,请查看magic_shell cookbook.

magic_shell_environment 'RAILS_ENV' do
  value 'production'
end
Run Code Online (Sandbox Code Playgroud)

  • magic_shell_environment'PATH'做值'$ PATH:无论结束 (2认同)

小智 5

如果您想在 中的系统级别设置它/etc/environment,您可以直接按照以下示例进行设置,而无需添加额外的配方(这为 Java 添加了两个 env 变量):

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
Run Code Online (Sandbox Code Playgroud)