2014-12-12 16 views
9

Ho creato un libro di cucina con attributi. Poi ho provato a boostrap un codice per nodo e passare attributi aggiuntivi in ​​addidition e/o sovrascrivere i valori predefiniti. È possibile stampare un albero di attributi per vedere quali attributi sono caricati, che sono sovrascritti?Come gli attributi print o debug chef?

+0

La lettura dei documenti è troppo difficile? inizia [qui] (https://learn.chef.io/fundamentals-series/) e prova a cercare [qui] (http://docs.chef.io) prima di chiedere. Se desideri parlare, guarda il canale #Cheff IRC su irc.freenode.net. In breve, mostra di aver provato da solo prima di inviare spam a StasckOverflow – Tensibai

+4

@Tensibai La domanda è corretta, Cherry sta tentando di risolvere un bootstrap da chef. I link che dai sono elementari troverei difficile trovare la risposta se fossi un principiante nello chef. Questo non è un nuovo utente di SO, quindi se non ti piace la domanda semplicemente downvotalo per favore. –

+0

4 domande sullo stesso argomento è piuttosto spam IMO – Tensibai

risposta

5

È possibile utilizzare node.debug_value per mostrare un singolo attributo. Questo stamperà il valore per quell'attributo ad ogni livello. Tuttavia, farlo a ogni livello per ogni attributo è più difficile (non sono sicuro di come farlo). Inoltre, a causa dell'enorme volume di attributi di ohai, non sono sicuro che vorresti farlo.

Se il tuo chef sta terminando correttamente, puoi fare un knife node show -l <nodename> (che è un minuscolo L). Questo ti mostrerà il valore effettivo, ma fornisce un volume enorme di dati e non ti dice quali valori sono predefiniti, normali, sostituiti, ecc.

+2

Per espandere la risposta @ Tejay con qualche esempio - Per 'nodo ['minecraft'] ['proprietà'] ' usa il nodo '.debug_value ('minecraft', 'properties') ' Vedi questo per maggiori dettagli - http://jtimberman.housepub.org/blog/2014/09/02/chef-node-dot-debug-value/ – keen

9

Per ottenere l'intero albero di attributi (all'interno di uno chef convergente , al contrario di via coltello dal server di chef - che è inutile, per esempio, un ambiente solo ...) in una forma utile:

Siete alla ricerca di node.to_hash - vedi http://www.rubydoc.info/gems/chef/Chef%2FNode%3Ato_hash

poche altre opzioni anche lì - http://www.rubydoc.info/gems/chef/Chef/Node

per ottenere un bel registro stampato è possibile utilizzare lo jso dello chef n librerie abbastanza stampante:

output="#{Chef::JSONCompat.to_json_pretty(node.to_hash)}" 
log output 

o scrivere un file locale al cliente:

output="#{Chef::JSONCompat.to_json_pretty(node.to_hash)}" 
file '/tmp/node.json' do 
    content output 
end 

notare che questo è il nodo convergente, in modo da non ottenere il default/sostituzione/etc livelli voi può ottenere con node.debug_value - ma se non conosci effettivamente il nome/percorso dell'attributo, o se hai bisogno di ricorrere a un numero di attributi, questo potrebbe essere tuo amico.

Si otterrà un risultato enorme che assomiglia (altamente trimed!)

{ 
    "chef_type": "node", 
    "name": "node.example.com", 
    "chef_environment": "_default", 
    "build-essential": { 
    "compile_time": false 
    }, 
    "homebrew": { 
    "owner": null, 
    "auto-update": true, 
    ... 
    }, 
    "recipe": [ 
    "example" 
    ], 
    "run_list": [ 
    "recipe[example]" 
    ] 
} 

Grazie a this answer per il puntatore di stampa piuttosto

2

fork la risposta @keen, questo produce un più umano uscita leggibile in formato YAML.

output = node.to_yaml 
file '/var/node.yaml' do 
    content output 
end 
Problemi correlati