web-dev-qa-db-fra.com

Comment interroger les versions de livre de recettes sur un nœud?

Cas d'utilisation: L'équipe de DevOps a lancé un nœud il y a quelque temps. Mon équipe aimerait savoir quelle est la version d'un ou plusieurs livres de recettes utilisés dans la liste d'exécution. Notre équipe DevOps se bat contre les incendies et nous aimerions trouver un moyen de nous suffire à nous-mêmes.

Commandes essayées: knife cookbook show COOKBOOK donne toutes les versions possibles, mais ne spécifie pas celle qui est utilisée.

knife node show NODE affiche tous les livres de recettes, mais aucune information sur la version n’est jointe.

Question: Existe-t-il une commande (similaire à knife search, ohai) pour interroger le chef-serveur sur les versions déployées sur le nœud?

14
digit plumber

Si vous pouvez ssh dans la boîte, vous pouvez regarder sous /var/chef/cache/cookbooks/<cookbook name>/metadata.json pour trouver la version. 

En outre, vous pouvez y accéder pendant un tour de chef en consultant @run_context.cookbook_collection, mais cela n’aide probablement pas.

Généralement, la version du livre de recettes est définie par l'environnement, mais comme les environnements changent au fil du temps, vous ne pouvez pas vraiment vous fier au même ensemble que celui utilisé lors de la dernière convergence de ce nœud (surtout si cela fait longtemps). 

De loin, votre option la plus sûre sera de regarder la cache du chef.

11
Tejay Cardon

Dans notre organisation, nous utilisons un livre de recettes de base pour définir un attribut sur le nœud avec les versions du livre de recettes.

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

Ensuite, nous pouvons interroger les versions utilisées par un noeud avec

knife node show <node-name> -a base_cookbook.cookbook_versions
5
Matt Cole

Si vous utilisez ohai (vous l’êtes probablement), vous pouvez faire quelque chose comme ceci:

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

Cela vous donnera une sortie qui montre le nom d'hôte et la version du livre de recettes:

1 items found

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

J'utilise ceci (et versions de) pour les clients Windows

Invoke-Command -ComputerName $nodename -ScriptBlock { gci "c:\chef\cache\cookbooks\*\metadata.rb"  | % { select-string $_ -pattern '^version.*$' } | % { $_.Path.replace('\metadata.rb','') } } -Credential $creds
0
Craig Roberts

Je suis tombé sur ce post et j'ai fini par élaborer une commande grep pour le faire.

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

Je ne sais pas comment utiliser un couteau, mais vous pouvez vous connecter à votre chef géré à l’adresse https://manage.chef.io et accéder à la section des nœuds de votre organisation. Cliquez sur le nom du noeud en question et, en bas à droite, sous Run List, cliquez sur le lien Expand All. Cela vous montrera les versions du livre de recettes pour chaque recette.

0
Derek

Je peux penser à une solution en deux étapes. 

Étape 1: Le noeud couteau affiche <% nom-noeud%>. La sortie doit inclure l'environnement utilisé sur le nœud.

Étape 2: l’environnement de couteau affiche <% nom-environnement%>. Cette sortie doit détailler tous les livres de recettes déployés sur le nœud avec leurs versions.

0
Arif Akram Khan