2014-11-25 49 views
1

我正在尋找爲我們在食譜中使用的一些常用功能創建LWRP的選項。有沒有辦法傳遞一個節點屬性並在LWRP中更新它?傳遞和更新廚師節點屬性

第二個選項是創建庫函數。如果調用者將節點屬性傳遞給庫函數,如何在函數中設置新值?

任何指向這些的指針都非常感謝。

回答

1

真的需要更多的細節來回答很肯定。

如果你只是閱讀和設置屬性

那麼你要使用的庫函數,而不是資源/供應商。您不必「傳遞」任何內容,因爲node對象在庫和LWRP中都可用。您可以像使用node['path']['to']['attribute']一樣對屬性進行訪問,並將它們設置爲與node.default['path']['to']['attribute'](或.normal.override等)中的配方相同。如果你想變得很花哨,並讓方法變化,你可以做這樣的事情。

*未經測試的代碼(需要一個路徑的屬性,並設置該屬性的塊的返回值,傳遞屬性的當前值成塊)

def check_and_set(*attr_path, &check) 
    current, parent = node 
    leaf = nil 
    current = attr_path.reduce do |current, branch| 
    current[branch] 
    parent = current 
    leaf = branch 
    value = check.yield(current) 
    parent[leaf] = value 
end 

如果你正在做的事情與價值

如果你不只是閱讀一個設置,那麼你可能需要一個LWRP。上述所有內容仍然適用。 node對象仍然可用,您可以閱讀和寫入,就像在配方中一樣。

+1

此外,您可能在加載庫時發現'node'不是您所期望的數據。將節點對象傳遞給庫函數總是一個更好的做法,以便在調用時獲得'node',而不是在編譯時,或者在任何cookbooks甚至可以加載覆蓋節點值之前。 – Martin 2014-11-28 16:33:54

+0

謝謝Tejay&Martin。 – 2014-12-01 21:51:01