Chef - Chef-Shell

Ecrire des livres de cuisine Chef est toujours difficile. Cela rend la tâche encore plus difficile en raison du long cycle de rétroaction consistant à les télécharger sur le serveur Chef, à provisionner une VM vagabonde, à vérifier comment ils ont échoué là-bas, à les rincer et à les répéter. Ce serait plus facile si nous pouvions essayer de tester des morceaux ou des recettes avant de faire tout ce gros travail à la fois.

Chef est livré avec Chef-Shell, qui est essentiellement une session Ruby interactive avec Chef. Dans le Chef-Shell, nous pouvons créer -

  • Attributes
  • Ecrire des recettes
  • L'initialisation de Chef s'exécute

Il est utilisé pour évaluer des parties de recettes à la volée, avant de les télécharger sur le serveur Chef et d'exécuter des livres de recettes complets sur le nœud.

Shell en cours d'exécution

Step 1 - Exécutez Chef-Shell en mode autonome.

[email protected]:~/chef-repo $ chef-shell 
loading configuration: none (standalone chef-shell session) 
Session type: standalone 
Loading...[2017-01-12T20:48:01+01:00] INFO: Run List is [] 
[2017-01-12T20:48:01+01:00] INFO: Run List expands to [] 
done. 
This is chef-shell, the Chef Shell. 
Chef Version: 11.0.0 
http://www.opscode.com/chef 
http://wiki.opscode.com/display/chef/Home 
run `help' for help, `exit' or ^D to quit. 
Ohai2u [email protected]!  
chef >

Step 2 - Passer en mode attribut dans Chef-Shell

  • chef > attributes_mode

Step 3 - Définition de la valeur d'attribut.

  • chef:attributes > set[:title] = "Chef Cookbook"

    • "Livre de cuisine du chef"

  • chef:attributes > quit

    • :attributes

  • chef >

Step 4 - Passez en mode recette.

  • chef > recipe_mode

Step 5 - Créez une ressource de fichier.

chef:recipe > file "/tmp/book.txt" do 
chef:recipe > content node.title 
chef:recipe ?> end  

=> <file[/tmp/book.txt] @name: "/tmp/book.txt" @noop: nil @ 
before: nil @params: {} @provider: Chef::Provider::File @allowed_ 
actions: [:nothing, :create, :delete, :touch, :create_if_missing] 
@action: "create" @updated: false @updated_by_last_action: false 
@supports: {} @ignore_failure: false @retries: 0 @retry_delay: 
2 @source_line: "(irb#1):1:in `irb_binding'" @elapsed_time: 0 @ 
resource_name: :file @path: "/tmp/book.txt" @backup: 5 @diff: nil 
@cookbook_name: nil @recipe_name: nil @content: "Chef Cookbook">   

chef:recipe >

Step 6 - Commencez l'exécution de Chef pour créer le fichier avec le contenu donné.

  • chef:recipe > run_chef

[2017-01-12T21:07:49+01:00] INFO: Processing file[/tmp/book.txt] 
action create ((irb#1) line 1) 
--- /var/folders/1r/_35fx24d0y5g08qs131c33nw0000gn/T/cheftempfile20121212- 
11348-dwp1zs 2012-12-12 21:07:49.000000000 
+0100 
+++ /var/folders/1r/_35fx24d0y5g08qs131c33nw0000gn/T/chefdiff20121212- 
11348-hdzcp1 2012-12-12 21:07:49.000000000 +0100 
@@ -0,0 +1 @@ 
+Chef Cookbook 
\ No newline at end of file 
[2017-01-12T21:07:49+01:00] INFO: entered create 
[2017-01-12T21:07:49+01:00] INFO: file[/tmp/book.txt] created file 
/tmp/book.txt

Comment ça fonctionne

  • Chef-Shell commence par une session Interactive Ruby (IRB) améliorée avec certaines fonctionnalités spécifiques.

  • Il propose des modes tels que attributes_mode et interactive_mode.

  • Il aide à écrire des commandes, qui sont écrites dans une recette ou un livre de cuisine.

  • Il exécute tout en mode interactif.

Nous pouvons exécuter Chef-Shell dans trois modes différents: Standalone mode, Client mode, et Solo mode.

  • Standalone mode- C'est le mode par défaut. Aucun livre de recettes n'est chargé et la liste d'exécution est vide.

  • Client mode - Ici, le chef-shell fait office de chef-client.

  • Solo mode - Ici, le chef-shell agit en tant que client chef-solo.