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

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

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

3 ответа

Решение

Если вам нужен 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 /etc/profile.d/chef.sh, /etc/environmentпрофиль пользователя и т. д.

Если вы хотите установить его в системе с помощью Chef, ознакомьтесь с поваренной книгой magic_shell.

magic_shell_environment 'RAILS_ENV' do
  value 'production'
end

Если вы хотите установить его на системном уровне в /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

В Windows и Linux это делается по-разному. Самый простой способ:

Windows

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

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

Для Linux лучший способ сделать это - использовать

ENV['Var'] = 'Value'

Когда вы используете эту команду, каждый подпроцесс, запускаемый по рецепту, будет использовать это значение ENV. Вы можете проверить это, используя ресурс bash и повторив значение Var.

Другие вопросы по тегам