Koch 11: irgendeiner Weise zu drehen, Attribute in ein ruby-hash?

Ich bin generieren eine config für meinen Dienst in der chef-Attribute. Aber irgendwann muss ich wiederum das Attribut Maische in ein einfaches ruby-hash. Diese verwendet, um gut funktionieren in Koch 10:

node.myapp.config.to_hash

Jedoch, beginnend mit Koch 11, das funktioniert nicht. Nur die top-Ebene der Attribut-Konvertierung in einen hash, dann mit verschachtelten verbleibenden Werte unveränderlich mash-Objekte. Sie zu ändern, führt zu Fehlern wie diesem:

Koch::Exceptions::ImmutableAttributeModification
------------------------------------------------ Knoten-Attribute sind schreibgeschützt, wenn Sie nicht angeben, welche Priorität zu setzen. Zu
legen Sie ein Attribut verwenden, code wie `Knoten.default["key"] = "Wert"'

Habe ich versucht, ein paar Möglichkeiten, um dieses Problem, die nicht arbeiten:

node.myapp.config.dup.to_hash
JSON.parse(node.myapp.config.to_json)

Json-parsing-hack, die scheint, wie es sollte Super funktionieren, Ergebnisse, in:

JSON::ParserError
unexpected token at '"#<Chef::Node::Attribute:0x000000020eee88>"'

Ist es, die tatsächliche zuverlässige Möglichkeit, kurz darunter eine nested-parsing-Funktion in jedem Kochbuch, konvertieren von Attributen zu einer einfachen, normalen, guten alten ruby-hash?

  • Warum brauchen Sie die hash?
  • ich brauche es nicht-ich könnte jeder Zeit aufhören ich will!!! aber im ernst, ich Baue eine config-Datei aus vielen unterschiedlichen Parametern, und ich brauche zu ändern, bevor Sie zu schreiben in der config-Datei. es ist wirklich hilfreich zum konvertieren der Attribute in einer hash, mutieren Sie, und verwenden Sie dann den hash.
Schreibe einen Kommentar