2016-02-12 1 views
1

Я положил учетные данные в ведро 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 

Я не уверен. Я все еще просматриваю документацию и экспериментирую, но, возможно, кто-то знает. Оборот вокруг тестирования различных вариантов занимает очень много времени.

+0

Почему нет 'env BAR = bar' внутри блока –

ответ

3

Ресурс env работает только на Windows, он не имеет ничего общего с Linux. Если вы хотите определить переменные среды для службы выскочки, она должна войти в конфигурацию выскочки, так как среда в шеф-поваре не влияет на вещи, порожденные выскочкой.

+0

Да, документация меня сбила с толку. Строка об использовании 'env' в upstart была в шаблоне выскочки, а не в файле ruby ​​recipe! Это сработало. Спасибо! –

Смежные вопросы