我爲廚師屬性中的服務生成配置。然而,在某些時候,我需要將屬性mash變成一個簡單的ruby哈希。這用於在廚師10中工作良好:廚師11:任何將屬性變成紅寶石散列的方法?
node.myapp.config.to_hash
但是,從廚師11開始,這是行不通的。只有屬性的頂層被轉換爲散列,然後嵌套值保留不可變的mash對象。修改它們會導致類似的錯誤:
Chef :: Exceptions :: ImmutableAttributeModification ---------------------------- --------------------當您沒有指定要設置的優先級別時,節點屬性是隻讀的。要 設置屬性利用代碼,比如`node.default [「鑰匙」] =「值」」
我已經嘗試了一堆的方式來解決這個問題,它不工作:
node.myapp.config.dup.to_hash
JSON.parse(node.myapp.config.to_json)
的JSON解析黑客攻擊,這似乎像它應該工作的偉大,在結果:
JSON::ParserError
unexpected token at '"#<Chef::Node::Attribute:0x000000020eee88>"'
是否有任何實際可靠的方式,總之包括每個食譜嵌套解析功能,屬性轉換爲簡單的,普通,去吧od老紅寶石哈希?
爲什麼需要哈希? –
我不需要它 - 我可以放棄任何我想要的時間!但嚴重的是,我正在構建一個配置文件出了很多不同的屬性,我需要修改它們,然後將它們寫入配置文件。將屬性轉換爲散列,對它們進行變異,然後使用散列是非常有用的。 –