2015-12-20 34 views
-1

我在我的食譜中有一個自定義資源,它覆蓋了一個節點屬性。當我在相同配方的後面的資源部分中使用該節點屬性時,它將使用cookbook屬性文件中設置的默認屬性,而不是在自定義配方資源中設置的值。在chef-client運行後,節點上的屬性值顯示預期的重寫值。什麼導致配方不使用overriden屬性?廚師食譜資源中的node.override屬性被設置但未被使用

回答

1

我假設你正在試圖重寫node['something']['content']和你的食譜是這樣的:

my_resource 'a name' do 
    action :run 
end 

file '/tmp/file' do 
    content node['something']['content'] 
end 

在您的自定義資源的:run動作定義的代碼是在收斂時間,而在文件中使用的屬性node['something']['content']執行資源在編譯時被讀取。

作爲參考,一個廚師的客戶端運行可以被描述爲:

  • 庫加載
  • 屬性編譯(這是你的屬性的默認值設置)
  • 食譜彙編(本是您的my_resource和文件資源使用其參數構建的位置)
  • 資源收斂(這是執行:run操作代碼的位置,以及您的屬性被覆蓋的位置)。
  • 報告(這是您的覆蓋屬性值發送到廚師服務器)。
+0

這解釋了我看到的行爲完美 - 謝謝!我所做的是包含邏輯來覆蓋配方中的節點屬性而不是資源,並將該配方包含在需要新值的默認配方中,這看起來效果更好。 – rmulay