2015-06-22 6 views
10

Nutzungs Fall: Das DevOps Team startete irgendwann einen Knoten vor, und mein Team würde gerne wissen, was ist die Version (en) von einem/mehrere Kochbuch (s) in dem run_list verwendet wird. Unser DevOps-Team ist Brandbekämpfung, also möchten wir einen Weg finden, um autark zu sein.Wie kann man Kochbuchversionen auf einem Knoten abfragen?

Befehle versucht: knife cookbook show COOKBOOK alle möglichen Versionen geben, aber nicht angibt, welche verwendet wird.

zeigt alle Kochbücher, aber es sind keine Versionsinformationen beigefügt.

Frage: Gibt es einen Befehl (etwas Ähnliches wie knife search, ohai) den Koch-Server für die Versionen auf dem Knoten bereitgestellt abzufragen?

+0

Häufiges Problem, das mir kein Ende des Schmerzes verursacht hat. Siehe auch http://stackoverflow.com/questions/31012767/is-there-a-way-to-use-knife-search-node-or-knife-show-node-that-will-tell-yo/31016001# 31016001 –

Antwort

7

Wenn Sie ssh in die Box können Sie unter /var/chef/cache/cookbooks/<cookbook name>/metadata.json nach der Version suchen.

Auch können Sie es während eines Chefs laufen, indem Sie @run_context.cookbook_collection betrachten, aber das hilft wahrscheinlich nicht. Die Cookbook-Version wird im Allgemeinen durch die Umgebung definiert, aber da sich Umgebungen im Laufe der Zeit ändern, können Sie nicht wirklich darauf vertrauen, dass dieselbe Menge verwendet wird, wenn dieser Knoten zuletzt konvergiert hat (besonders wenn es eine Weile her ist). Page 17

Bei weitem Ihre sicherste Option wird sein, den Chef-Cache zu betrachten.

+0

Die einzige Einschränkung: Root-Zugriff benötigt :('-rw ------- 1 root root 590 Jul 20 22:00 metadata.rb' –

+0

Wenn Sie [jshon] haben (http://kmkeen.com/ jshon /), kann 'find/var/chef/cache/cookbooks -type f -name 'metadata.json' -exec bash -c" cat {} | jshon -e name -u -p -e version -u | einfügen -s -d =“\; |.?. sort' –

+0

fand ich es unter' metadata.rb', nicht JSON Vielleicht 11, das ist ein Chef Sache, obwohl – phyzome

0

Ich kann eine Zwei-Schritte-Lösung vorstellen.

Schritt 1: Messerknoten zeigen <% Knoten-Name%>. Die Ausgabe sollte die Umgebung enthalten, die auf dem Knoten verwendet wird.

Schritt 2: Messerumgebung anzeigen <% environment-name%>. Diese Ausgabe sollte alle Kochbücher detailliert beschreiben, die auf dem Knoten mit ihren Versionen implementiert sind.

+2

Dies verstecken Sie alle Kochbücher, die als Abhängigkeiten enthalten sind – StephenKing

+1

Umgebungen funktionieren nur, wenn Sie explizit Einschränkungen des Kochbuchs festgelegt haben –

4

In unserer Organisation verwenden wir ein Basis-Kochbuch, um ein Attribut auf dem Knoten mit den Kochbuchversionen zu setzen.

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

Dann können wir die Versionen durch einen Knoten mit

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

Nur der Vollständigkeit halber frage ich mich: Würde die aktuelle Version dieser Antwort Kochbücher behalten, die nicht länger in der Laufliste sind? –

+0

Es stellt sich heraus, dass es im Supermarkt ein Kochbuch gibt, das die gleiche Technik implementiert: https://supermarket.chef.io/cookbooks/cookbook_versions –

+2

Ich glaube, dass du dies jetzt direkt ohne das 'run_context' Basiskochbuch machen kannst. Vielleicht eingebaut in Koch 12. 'Messer Knoten zeigen -a Kochbücher' funktioniert für mich. – Beel

0

unsicher Ich bin über Messer eine Art und Weise verwendeten abfragen, aber Sie können den Knoten bei https://manage.chef.io und navigieren Sie in Ihren Managed Chef einloggen Abschnitt für Ihre Organisation. Klicken Sie auf den fraglichen Knotennamen, und klicken Sie rechts unten unter Run List auf den Link . Das zeigt Ihnen die Versionen des Kochbuchs, in denen jedes Rezept ausgeführt wird.

+0

Dies zeigt Rezepte und Rezepte, die unter Rollen verschachtelt sind, wird aber nicht erweitert, um Abhängigkeiten anzuzeigen. –

0

Wir sind über diesen Beitrag gelandet und haben einen grep-Befehl ausgearbeitet, um dies zu tun.

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

Wenn Sie mit ohai (Sie wahrscheinlich sind), können Sie etwas tun:

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

Dies wird Ihnen Ausgabe geben, die den Hostnamen und das Kochbuch Version zeigt:

1 items found 

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