2016-02-12 54 views
1

我把證書放入s3存儲桶中,我使用紅寶石塊來抓取它們。然後我想設置一個環境變量,當新貴啓動一個進程時,它使用這個變量。然而,紅寶石塊運行後屬性設置,所以我認爲使用lazy將是適當的,但我不清楚如何設置env使用lazy如何在廚師中使用env懶惰地設置環境變量?

難道是這樣的:

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'的一行是一個暴發戶的模板,而不是ruby的配方文件!這工作。謝謝! –