2015-06-22 42 views
10

caso Uso: La squadra DevOps lanciato un nodo di qualche tempo fa, e la mia squadra vorrebbe sapere qual è la versione (s) di uno/molti libro di cucina (s) in uso nel run_list. Il nostro team DevOps è antincendio quindi vorremmo trovare un modo per essere autosufficienti.Come interrogare le versioni dei libri di cucina su un nodo?

Comandi provato: knife cookbook show COOKBOOK dare tutte le versioni possibili, ma non specifica quale viene utilizzato.

knife node show NODE mostra tutti i libri di cucina, ma non ci sono informazioni sulla versione allegata.

Domanda: C'è un comando (qualcosa di simile a knife search, ohai) per interrogare il cuoco-server per le versioni distribuite sul nodo?

+0

Problema comune che non mi ha causato alcun dolore. Vedi anche http://stackoverflow.com/questions/31012767/is-there-a--to-use-knife-search-node-or-knife-show-node-that-will-tell-yo/31016001# 31016001 –

risposta

7

Se è possibile ssh nella casella, è possibile cercare sotto /var/chef/cache/cookbooks/<cookbook name>/metadata.json per trovare la versione.

Inoltre, è possibile accedervi durante una corsa di chef guardando @run_context.cookbook_collection, ma probabilmente non aiuta.

Generalmente la versione del libro di cucina è definita dall'ambiente, ma dal momento che gli ambienti cambiano nel tempo, non ci si può davvero fidare che sia lo stesso set che è stato usato quando questo nodo converge (specialmente se è passato un po 'di tempo).

L'opzione di gran lunga più sicura sarà quella di guardare il cache dello chef.

+0

L'unica limitazione: accesso root necessario :('-rw ------- 1 root root 590 lug 20 22:00 metadata.rb' –

+0

Se si dispone di [jshon] (http://kmkeen.com/ jshon /), può fare 'find/var/chef/cache/cookbooks -type f -name 'metadata.json' -exec bash -c" cat {} | jshon -e nome -u -p -e versione -u | paste -s -d = "\; | sort' –

+0

L'ho trovato in' metadata.rb', non in JSON. Forse questa è una cosa di Chef 11, però? – phyzome

0

Mi viene in mente una soluzione in due passaggi.

Passaggio 1: nodo del coltello mostra <% nome-nodo%>. L'output dovrebbe includere l'ambiente in uso sul nodo.

Passaggio 2: ambiente lama mostra <% nome-ambiente%>. Questo output dovrebbe dettagliare tutti i libri di cucina distribuiti sul nodo con le loro versioni

+2

Questo ti nasconderà tutti i libri di cucina che sono inclusi come dipendenze – StephenKing

+1

Gli ambienti funzionano solo se hai impostato in modo esplicito i vincoli del libro di cucina –

4

Nella nostra organizzazione usiamo un libro di cucina di base per impostare un attributo sul nodo con le versioni del libro di cucina.

run_context.cookbook_collection.each do |key, cookbook| 
    node.set['base_cookbook']['cookbook_versions'][cookbook.name] = cookbook.version 
end 

Poi possiamo interrogare le versioni utilizzate da un nodo con

knife node show <node-name> -a base_cookbook.cookbook_versions 
+0

Solo per completezza mi chiedo: la versione attuale di questa risposta manterrebbe libri di cucina che non sono più in esecuzione? –

+0

Si scopre che c'è un libro di cucina nel supermercato che implementa questa stessa tecnica: https://supermarket.chef.io/cookbooks/cookbook_versions –

+2

Credo che ora puoi farlo direttamente senza il libro di cucina 'run_context'. Forse costruito nello chef 12. 'nodo del coltello mostra -un libri di cucina funziona per me. – Beel

0

io sono sicuro di una via via il coltello, ma è possibile accedere al tuo Chef gestito a https://manage.chef.io e passare ai nodi sezione per la tua organizzazione. Fare clic sul nome del nodo in questione e in basso a destra, sotto Run List, fare clic sul collegamento Expand All. Questo ti mostrerà le versioni del libro di cucina in cui ogni ricetta viene eseguita.

+0

Questo mostrerà le ricette e le ricette annidate sotto i ruoli, ma non si espanderà per mostrare le dipendenze. –

0

È venuto attraverso questo post e ha finito per elaborare un comando grep per fare questo.

sudo grep -o -e '\"version\"\:\"[a-zA-Z0-9.]*\"' -e '\"version\"\: \"[a-zA-Z0-9.]*\"' /var/chef/cache/cookbooks/*/metadata.json 
0

Se stai usando ohai (probabilmente sono), si può fare qualcosa di simile:

knife search -i 'cookbooks:your-cookbook' -a cookbooks.your-cookbook.version 

Questo vi darà output che mostra il nome dell'host e la versione libro di cucina:

1 items found 

server.name.example: 
    cookbooks.cs-redis.version: 0.3.2