Подтвердить что ты не робот

Как вы можете использовать рецепт шеф-повара для установки переменной окружения?

Как вы можете использовать рецепт шеф-повара для установки переменной среды?

Мне нужно установить переменную среды, используя рецепт шеф-повара. Можете ли вы привести пример того, как это сделать?

4b9b3361

Ответ 1

Если вам нужен env var, установленный строго в процессе Chef, вы можете использовать ENV['foo'] = 'bar ', поскольку это рубиновый процесс.

Если вам нужно установить один для выполнить поставщик, 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

Если вы хотите установить постоянную переменную среды, вы можете захотеть, чтобы Chef edit /etc/profile.d/chef.sh, /etc/environment, профиль пользователя и т.д.

Ответ 2

Если вы хотите установить его в системе с шеф-поваром, посмотрите magic_shell cookbook.

magic_shell_environment 'RAILS_ENV' do
  value 'production'
end

Ответ 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

Ответ 4

Способ сделать это отличается в Windows и Linux. Самый простой способ будет:

Windows

Используйте ресурс windows_env для создания системной переменной среды:

windows_env 'CHEF_LICENSE' do
  value 'accept'
end

Linux

Если он нужен только для запуска кулинарной книги и ее потомков, используйте ресурс Ruby ENV. Это НЕ будет постоянным:

ENV['CHEF_LICENSE'] = 'accept'

Если вам нужно, чтобы он был постоянным (и используйте bash):

Создайте скрипт в /etc/profile.d:

  1. Создайте шаблон скрипта (например, chef.sh.erb)
  2. Заполните шаблон скрипта:

    #!/bin/bash export CHEF_LICENSE='accept' # Needed for Chef Infra Client 15

  3. Поместите ресурс шаблона в свой рецепт (вы можете установить атрибуты и настройки владельца/группы, я хочу, чтобы этот пример был простым)

    template '/etc/profile.d/chef.sh' do source 'chef.sh.erb' end

Вот некоторые дополнительные ресурсы, чтобы прочитать о различных ресурсах, упомянутых здесь:

ресурс шаблона
ресурс windows_env