Я положил учетные данные в ведро s3, и я использую блок ruby, чтобы захватить их. Затем я хочу установить переменную среды, чтобы при запуске процесса запуска он использовал эту переменную. Однако блок ruby работает после того, как атрибуты установлены, поэтому я подумал, что использование lazy
было бы уместным, но мне непонятно, как установить env
с помощью lazy
.Как можно лениво установить переменную среды, используя env в Chef?
Будет ли что-то вроде:
ruby_block "get-credentials" do
block do
Chef::Log.info 'Getting sdk.'
require 'aws-sdk'
Chef::Log.info 'Getting making aws s3 instance.'
s3 = AWS::S3.new
Chef::Log.info 'Getting credentials from s3.'
bar = s3.buckets['bucket-name'].objects['bar'].read
Chef::Log.info 'Got bar with length #{bar.length}'
node.set['foo']['bar'] = bar
end
action :run
end
env lazy BAR=node.set['foo']['bar']
service 'foo' do
provider Chef::Provider::Service::Upstart
action [ :enable, :start ]
end
Я не уверен. Я все еще просматриваю документацию и экспериментирую, но, возможно, кто-то знает. Оборот вокруг тестирования различных вариантов занимает очень много времени.
Почему нет 'env BAR = bar' внутри блока –