Chef - Chef-Shell

Kochbücher zu schreiben ist immer schwer. Dies macht es aufgrund des langen Feedback-Zyklus noch schwieriger, sie auf den Chef-Server hochzuladen, eine vagabundierende VM bereitzustellen, zu überprüfen, wie sie dort fehlgeschlagen sind, zu spülen und zu wiederholen. Es wäre einfacher, wenn wir versuchen könnten, einige Stücke oder Rezepte zu testen, bevor wir all dieses schwere Heben auf einmal machen.

Chef kommt mit Chef-Shell, was im Wesentlichen eine interaktive Ruby-Sitzung mit Chef ist. In der Chef-Shell können wir erstellen -

  • Attributes
  • Rezepte schreiben
  • Chef wird initialisiert

Es wird verwendet, um Teile von Rezepten im laufenden Betrieb auszuwerten, bevor sie auf den Chef-Server hochgeladen und vollständige Kochbücher auf dem Knoten ausgeführt werden.

Shell ausführen

Step 1 - Führen Sie Chef-Shell im Standalone-Modus aus.

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 - Wechseln Sie in der Chef-Shell in den Attributmodus

  • chef > attributes_mode

Step 3 - Attributwert einstellen.

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

    • "Kochbuch"

  • chef:attributes > quit

    • :attributes

  • chef >

Step 4 - Wechseln Sie in den Rezeptmodus.

  • chef > recipe_mode

Step 5 - Erstellen Sie eine Dateiressource.

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 - Starten Sie den Chef-Lauf, um die Datei mit dem angegebenen Inhalt zu erstellen.

  • 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

Wie es funktioniert

  • Chef-Shell beginnt mit einer IRB-Sitzung (Interactive Ruby), die um einige spezifische Funktionen erweitert wurde.

  • Es bietet Modi wie Attribute_Mode und Interactive_Mode.

  • Es hilft beim Schreiben von Befehlen, die in ein Rezept oder Kochbuch geschrieben sind.

  • Es läuft alles in einem interaktiven Modus.

Wir können Chef-Shell in drei verschiedenen Modi ausführen: Standalone mode, Client mode, und Solo mode.

  • Standalone mode- Dies ist der Standardmodus. Es werden keine Kochbücher geladen und die Ausführungsliste ist leer.

  • Client mode - Hier fungiert die Chef-Shell als Chef-Kunde.

  • Solo mode - Hier fungiert die Chef-Shell als Chef-Solo-Kunde.