1
我正在尋找爲我們在食譜中使用的一些常用功能創建LWRP的選項。有沒有辦法傳遞一個節點屬性並在LWRP中更新它?傳遞和更新廚師節點屬性
第二個選項是創建庫函數。如果調用者將節點屬性傳遞給庫函數,如何在函數中設置新值?
任何指向這些的指針都非常感謝。
我正在尋找爲我們在食譜中使用的一些常用功能創建LWRP的選項。有沒有辦法傳遞一個節點屬性並在LWRP中更新它?傳遞和更新廚師節點屬性
第二個選項是創建庫函數。如果調用者將節點屬性傳遞給庫函數,如何在函數中設置新值?
任何指向這些的指針都非常感謝。
真的需要更多的細節來回答很肯定。
那麼你要使用的庫函數,而不是資源/供應商。您不必「傳遞」任何內容,因爲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
對象仍然可用,您可以閱讀和寫入,就像在配方中一樣。
此外,您可能在加載庫時發現'node'不是您所期望的數據。將節點對象傳遞給庫函數總是一個更好的做法,以便在調用時獲得'node',而不是在編譯時,或者在任何cookbooks甚至可以加載覆蓋節點值之前。 – Martin 2014-11-28 16:33:54
謝謝Tejay&Martin。 – 2014-12-01 21:51:01