Sto generando una configurazione per il mio servizio in attributi chef. Tuttavia, a un certo punto, ho bisogno di trasformare l'attributo mash in un semplice hash rubino. Questo funzionava bene in Chef 10:chef 11: un modo per trasformare gli attributi in un hash rubino?
node.myapp.config.to_hash
Tuttavia, a partire da Chef 11, questo non funziona. Solo il livello principale dell'attributo viene convertito in un hash, con i valori nidificati che rimangono oggetti mash immutabili. modificandole porta a errori come questo:
Chef :: Eccezioni :: ImmutableAttributeModification ---------------------------- -------------------- Gli attributi dei nodi sono di sola lettura quando non si specifica il livello di precedenza da impostare. Per impostare un codice di utilizzo dell'attributo come `node.default [ "chiave"] = "valore"'
Ho provato un sacco di modi per aggirare questo problema che non funzionano:
node.myapp.config.dup.to_hash
JSON.parse(node.myapp.config.to_json)
jSON parsing hack, che sembra che dovrebbe grande lavoro, si traduce in:
JSON::ParserError
unexpected token at '"#<Chef::Node::Attribute:0x000000020eee88>"'
c'è un modo effettivo affidabile, a corto di tra cui una funzione di parsing annidata in ogni libro di cucina, per convertire gli attributi ad una semplice , ordinario, vai od un vecchio hash rubino?
Perché avete bisogno di hash? –
non ne ho bisogno - potrei smettere ogni volta che voglio! ma seriamente, sto costruendo un file di configurazione con molti attributi disparati, e ho bisogno di modificarli prima di scriverli nel file di configurazione. è molto utile convertire gli attributi in un hash, mutarli e quindi usare l'hash. –