Chefkoch - Plattformübergreifend für Kochbücher

Plattformübergreifende Kochbücher sind solche Kochbücher, die eine zugrunde liegende Umgebung annehmen, in der sie ausgeführt werden sollen. Chef bietet eine Vielzahl von Funktionen, die beim Schreiben plattformübergreifender Kochbücher helfen, die auf jedem Betriebssystem ausgeführt werden können, auf dem es bereitgestellt werden soll. Dies hilft einem Entwickler, ein vollständig funktionsfähiges Kochbuch zu schreiben.

Dazu benötigen wir ein Kochbuch. In unserem Fall handelt es sich um test_cookbook und eine Ausführungsliste mit der Kochbuchdefinition.

Arbeitsmethode

Das Abrufen der Plattformdetails der Knoten und das Ausführen der bedingten Logik in unserem Kochbuch hängt von der Plattform ab. In unserem Fall werden wir es für Ubuntu testen.

Step 1 - Protokollieren Sie eine Nachricht, wenn der Knoten Ubuntu ist.

vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb 
Log.info("Running on ubuntu") if node.platform['ubuntu']

Step 2 - Laden Sie das Kochbuch auf den Chef-Server hoch.

vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb 
Uploading my_cookbook [0.1.0] 
Uploaded 1 cookbook.

Step 3 - Führen Sie den Chef-Client auf dem Knoten aus.

user@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-03-03T20:07:39+00:00] INFO: Running on Ubuntu 
...TRUNCATED OUTPUT...

Wenn Sie nicht an einer bestimmten Plattform interessiert sind, sondern nur wissen müssen, welche deklarative verwendet wird, kann alternativ die folgende Anweisung verwendet werden.

Log.info("Running on a debian derivative") if 
platform_family?('debian')

Wenn Sie das geänderte Kochbuch hochladen und den Chef-Client auf dem Ubuntu-Knoten ausführen, wird das folgende Ergebnis angezeigt.

[2013-03-03T20:16:14+00:00] INFO: Running on a debian 
derivative

Workflow von Skripten

Im obigen Befehl erkennt Ohai den aktuellen Status des Betriebssystems des Knotens und speichert ihn als Plattformattribut mit dem Knotenobjekt.

node['platform']

Oder Sie können die Syntax des Methodenstils verwenden -

node.platform

Plattformspezifische Werte festlegen

Um plattformspezifische Werte festzulegen, bietet chef praktische Methoden value_for_platform und value_for_platform_family an. Sie können verwendet werden, um komplexe case-Anweisungen zu vermeiden und stattdessen einen einfachen Hash zu verwenden.

Beispiel Kochbuch

execute "start-runsvdir" do 
   command value_for_platform( 
      "debian" => { "default" => "runsvdir-start" }, 
      "ubuntu" => { "default" => "start runsvdir" }, 
      "gentoo" => { "default" => "/etc/init.d/runit-start start" } 
   ) 
   action :nothing 
end

Im obigen Beispiel ist der Befehl wie definiert betriebssystemspezifisch.

  • Für Debian funktioniert "runningvdir-start"
  • Für Ubuntu funktioniert "start runsvdir"
  • Für Gentoo funktioniert "/etc/init.d/runit-start"