2015-06-10 34 views
0

我想在配方中檢查resource_collection的內容,以查看在節點運行期間是否調用了特定的LWRP。但由於編譯負荷邏輯和菜譜名稱排序等等。這是很難做這樣的事情:等到Chefs編譯階段結束之前運行代碼塊?

if run_context.resource_collection.any?{|r| r.resource_name.to_s == 'my_lwrp_resource'} 

    template "/tmp/example.rb" do 
     source  "test.erb" 
     action  :nothing 
    end.run_action(:create) 

end 

因爲之前所有的資源都被添加到resource_collection此代碼的運行。

有什麼辦法推遲運行此代碼,直到編譯階段結束,以確保resource_collection已完全填充並且查詢將正確地查找資源?

感謝

回答

1

可以定義將匯聚過程中執行的ruby_block資源。您將無法訪問DSL中的配方DSL,使用DSL定義模板資源,但在紅寶石中定義模板資源同樣簡單:

ruby_block 'run_my_template_resource' do 
    action :create 
    block do 
    r = Chef::Resource::Template.new('template_name', run_context) 
    r.path  '/path/to/write.to' 
    r.source  'source.erb' 
    r.cookbook 'cookbook-name' 
    r.owner  'root' 
    r.group  'root' 
    r.mode  00600 
    r.variables my: 'variables' 
    r.run_action :create 
    end 
end 
相關問題