我正在为厨师属性中的服务生成配置。但是,在某些时候,我需要将属性 mash 转换为简单的 ruby 哈希。这曾经在 Chef 10 中运行良好:
node.myapp.config.to_hash
但是,从 Chef 11 开始,这不起作用。只有顶级属性被转换为哈希,然后嵌套值保留不可变的 mash 对象。修改它们会导致如下错误:
Chef::Exceptions::ImmutableAttributeModification -------------------------------------------------------- ----- 当您不指定要设置的优先级时,节点属性是只读的。要设置属性,请使用类似 `node.default["key"] = "value"' 的代码
我尝试了很多方法来解决这个问题,但这些方法不起作用:
node.myapp.config.dup.to_hash
JSON.parse(node.myapp.config.to_json)
json 解析 hack 看起来应该很好用,结果是:
JSON::ParserError
unexpected token at '"#<Chef::Node::Attribute:0x000000020eee88>"'
除了在每本食谱中包含嵌套解析函数之外,是否有任何实际可靠的方法将属性转换为简单、普通、良好的旧 ruby 哈希?