Chef - Chef-Shell

Scrivere libri di cucina per Chef è sempre difficile. Rende ancora più difficile a causa del lungo ciclo di feedback di caricarli sul server Chef, eseguire il provisioning di una VM vagabonda, controllare come hanno fallito lì, risciacquare e ripetere. Sarebbe più facile se potessimo provare a testare alcuni pezzi o ricette prima di fare tutto questo lavoro pesante in una volta.

Chef viene fornito con Chef-Shell, che è essenzialmente una sessione Ruby interattiva con Chef. In Chef-Shell, possiamo creare -

  • Attributes
  • Scrivi ricette
  • L'inizializzazione di Chef viene eseguita

Viene utilizzato per valutare parti di ricette al volo, prima di caricarle sul server Chef ed eseguire libri di cucina completi sul nodo.

Esecuzione di Shell

Step 1 - Esegui Chef-Shell in modalità standalone.

mma@laptop:~/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 mma@laptop!  
chef >

Step 2 - Passa alla modalità attributi in Chef-Shell

  • chef > attributes_mode

Step 3 - Impostazione del valore dell'attributo.

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

    • "Chef Cookbook"

  • chef:attributes > quit

    • :attributes

  • chef >

Step 4 - Passa alla modalità ricetta.

  • chef > recipe_mode

Step 5 - Crea una risorsa file.

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 - Comincia la corsa di Chef per creare il file con il contenuto dato.

  • 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

Come funziona

  • Chef-Shell inizia con una sessione Interactive Ruby (IRB) migliorata con alcune caratteristiche specifiche.

  • Offre modalità come attributes_mode e interactive_mode.

  • Aiuta a scrivere i comandi, che vengono scritti all'interno di una ricetta o di un libro di cucina.

  • Funziona tutto in una modalità interattiva.

Possiamo eseguire Chef-Shell in tre diverse modalità: Standalone mode, Client mode, e Solo mode.

  • Standalone mode- È la modalità predefinita. Nessun libro di cucina viene caricato e l'elenco di esecuzione è vuoto.

  • Client mode - Qui, lo chef-shell funge da chef-cliente.

  • Solo mode - Qui, lo chef-shell funge da cliente chef-solista.