Как вы можете использовать рецепт Chef для установки переменной среды?
Мне нужно установить переменную среды, используя рецепт Chef. Можете ли вы привести пример того, как это сделать?
Как вы можете использовать рецепт Chef для установки переменной среды?
Мне нужно установить переменную среды, используя рецепт Chef. Можете ли вы привести пример того, как это сделать?
Если вам нужен env var, установленный строго внутри процесса Chef, вы можете использовать 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
Если вы хотите установить постоянную переменную среды, возможно, вы захотите, чтобы Chef редактировал /etc/profile.d/chef.sh
, /etc/environment
, профиль пользователя и т. д.
magic_shell
кулинарной книгой — community.opscode.com/cookbooks/magic_shell
- person Kevin Meredith; 08.05.2014
Если вы хотите установить его в системе с помощью Chef, ознакомьтесь с поваренной книгой magic_shell а>.
magic_shell_environment 'RAILS_ENV' do
value 'production'
end
/etc/profile
в сценарии Ruby.
- person sethvargo; 28.04.2013
$PATH
, как мне использовать поваренную книгу magic_shell
?
- person Kevin Meredith; 24.03.2014
source
файл профиля во время выполнения рецепта. execute 'source /etc/profile'
определенно не работает, так как source
недоступен в оболочке ruby, и в любом случае он работает во вспомогательной оболочке.
- person Cristian Vrabie; 09.02.2016
Если вы хотите установить его на системном уровне в /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 для создания системной переменной среды:
windows_env 'CHEF_LICENSE' do
value 'accept'
end
Линукс
Если вам это нужно только для запуска поваренной книги и ее дочерних элементов, используйте ресурс Ruby ENV. Это НЕ будет постоянным:
ENV['CHEF_LICENSE'] = 'accept'
Если вам нужно, чтобы он был постоянным (и используйте bash):
Создайте скрипт в /etc/profile.d:
Заполните шаблон сценария:
#!/bin/bash
export CHEF_LICENSE='accept' # Needed for Chef Infra Client 15
Поместите ресурс шаблона в свой рецепт (вы можете установить атрибуты и настройки владельца/группы, я хотел, чтобы этот пример был простым)
template '/etc/profile.d/chef.sh' do
source 'chef.sh.erb'
end
Вот некоторые дополнительные ресурсы, чтобы прочитать о различных ресурсах, упомянутых здесь:
ресурс шаблона
ресурс windows_env
Для Linux лучший способ сделать это — использовать
ENV['Var'] = 'Value'
Когда вы используете эту команду, каждый подпроцесс, запускаемый рецептом, будет использовать это значение ENV. Вы можете проверить это, используя ресурс bash и повторив значение Var.