Chefレシピを使用して環境変数を設定するにはどうすればよいですか?
Chefレシピを使用して環境変数を設定する必要があります。これを達成する方法の例を提供できますか?
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に編集させることができます。
Chefでシステムに設定する場合は、 magic_Shellクックブック をチェックアウトします。
magic_Shell_environment 'Rails_ENV' do
value 'production'
end
/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
これを行う方法は、WindowsとLinuxで異なります。最も簡単な方法は次のとおりです。
Windows
Windows_envリソースを使用して、システム環境変数を作成します。
windows_env 'CHEF_LICENSE' do
value 'accept'
end
Linux
クックブックの実行とその子にのみ必要な場合は、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
ここで参照されているさまざまなリソースについて読むための追加リソースがあります。
Linuxの場合、そのための最良の方法は、
ENV['Var'] = 'Value'
このコマンドを使用すると、レシピによってスピンされるすべてのサブプロセスがこのENV値を使用します。 bashリソースを使用してVarの値をエコーすることで確認できます。