Как вы можете использовать рецепт 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:
- Создайте шаблонный сценарий (например, chef.sh.erb)
Заполните шаблон скрипта:
#!/bin/bash export CHEF_LICENSE='accept' # Needed for Chef Infra Client 15
Поместите ресурс шаблона в свой рецепт (вы можете установить атрибуты и настройки владельца / группы, я хотел, чтобы этот пример был простым)
template '/etc/profile.d/chef.sh' do source 'chef.sh.erb' end
Вот несколько дополнительных ресурсов, чтобы прочитать о различных ресурсах, упомянутых здесь:
Для Linux лучший способ сделать это - использовать
ENV['Var'] = 'Value'
Когда вы используете эту команду, каждый подпроцесс, запускаемый по рецепту, будет использовать это значение ENV. Вы можете проверить это, используя ресурс bash и повторив значение Var.