2015-11-23 58 views
0

在配方nginx中,我使用了service資源。如何編寫資源集合依賴關係

service 'nginx' do 
    supports status: true, restart: true, reload: true 
    action [:enable, :start] 
end 

而在另一個配方foonotifies :reload, 'service[nginx]'使用。

當我運行這兩個食譜或只有nginx,它工作正常。 但是,當只有foo處於run_list,它失敗,錯誤service[nginx] cannot be found in the resource collection.

時,我想只有foo運行目前我使用這個命令。

knife solo cook my_server --override-runlist "nginx,foo` 

我加depends 'nginx'foo/metadate.rb,但它並沒有解決問題。

如何指定這樣的依賴關係?

回答

4

您需要元數據中的dependsfoo/recipes/default.rb頂部的include_recipe 'nginx'。你不能只運行recipe[foo::default],因爲它存在硬性服務資源。

這將是一個很好的例子,說明爲什麼在您編寫複雜代碼時,重寫運行列表有點難以使用,而且有種破壞。另一個選項會更復雜一些,在foo配方中檢查資源是否存在於集合中,並創建一個存根(如果沒有),但這超出了我想描述的範圍如果你不知道廚師的內部裝備超級好。

+0

我認爲在資源集合測試後定義一個'action:nothing'服務資源的方法在這個答案中會很好,它可以幫助未來的讀者解決同樣的問題。 (反正無論如何,但給我的觀點) – Tensibai

+1

@Tensibai幾個問題,沒有什麼行動是不夠的。其次,根據上下文查詢資源集合是棘手的。第三,任何這樣的解決方案都會非常脆弱,有人試圖複製SO可能最終會比幫助更糟糕。 – coderanger