Как вы можете использовать рецепт Chef для установки переменной среды? - PullRequest
35 голосов
/ 09 июня 2011

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

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

Ответы [ 4 ]

27 голосов
/ 18 октября 2011

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

Если вам нужно установить один для исполнителя execute , 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, профиль пользователя и т. Д..

14 голосов
/ 17 февраля 2013

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

magic_shell_environment 'RAILS_ENV' do
  value 'production'
end
4 голосов
/ 27 апреля 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
1 голос
/ 14 мая 2019

Способ сделать это отличается в 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

...