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.