web-dev-qa-db-ja.com

Chefレシピを使用して環境変数を設定するにはどうすればよいですか?

Chefレシピを使用して環境変数を設定するにはどうすればよいですか?

Chefレシピを使用して環境変数を設定する必要があります。これを達成する方法の例を提供できますか?

35
Brandon

Chefプロセス内で厳密に設定されたenv varが必要な場合は、Rubyプロセスであるため、_ENV['foo'] = 'bar_ 'を使用できます。

execute provider に設定する必要がある場合、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
_

永続的な環境変数を設定する場合は、_/etc/profile.d/chef.sh_、_/etc/environment_、ユーザーのプロファイルなどをChefに編集させることができます。

28
jodell

Chefでシステムに設定する場合は、 magic_Shellクックブック をチェックアウトします。

magic_Shell_environment 'Rails_ENV' do
  value 'production'
end
14
sethvargo

/etc/environmentのシステムレベルで設定する場合は、追加のレシピを追加せずに、次の例に従って直接設定できます(これにより、Javaに2つのenv変数が追加されます)。

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
Kent Mewhort

これを行う方法は、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 resource

2
Taegost

Linuxの場合、そのための最良の方法は、

ENV['Var'] = 'Value'

このコマンドを使用すると、レシピによってスピンされるすべてのサブプロセスがこのENV値を使用します。 bashリソースを使用してVarの値をエコーすることで確認できます。

0
Sourav Biswas