Chefkoch - Rezepte dynamisch konfigurieren

Attribute sind die Schlüsselkomponenten für die dynamische Konfiguration von Kochbüchern. Mithilfe von Attributen können die Autoren das Kochbuch konfigurierbar machen. Durch Überschreiben der in Kochbüchern festgelegten Standardwerte kann der Benutzer seine eigenen Werte einfügen.

Step 1 - Erstellen Sie eine Standarddatei für Kochbuchattribute und fügen Sie ihr ein Standardattribut hinzu.

vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/attributes/default.rb 
default['my_cookbook']['message'] = 'hello world!'

Step 2 - Definieren Sie das Attribut im Rezept.

vipin@laptop:~/chef-repo $ subl cookbooks/<Cookbook Name>/recipes/default.rb 
message = node['my_cookbook']['message'] 
Chef::Log.info("** Saying what I was told to say: #{message}")

Step 3 - Hochladen des geänderten Kochbuchs.

vipin@laptop:~/chef-repo $ knife cookbook upload my_cookbook 
Uploading my_cookbook [0.1.0]

Step 4 - Chef-Client des definierten Knotens ausführen.

user@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-01-13T20:48:21+00:00] INFO: ** Saying what I was told to 
say: hello world! 
...TRUNCATED OUTPUT...

Arbeitsmethode

Chef lädt alle Attribute aus der Attributdatei, bevor sie ausgeführt werden. Die Attribute werden mit dem Knotenobjekt gespeichert. Man kann auf alle Attribute zugreifen, die mit dem Knotenobjekt in Rezepten gespeichert sind, und ihre aktuellen Werte abrufen.

Chefkoch hat eine eingeschränkte Struktur, beginnend mit der niedrigsten Standardeinstellung, wird dann normal (was mit dem Satz verbunden ist) und überschreibt dann. Die im Rezept festgelegte Attributebene hat Vorrang vor derselben in einer Attributdatei festgelegten Ebene.

Überschreiben des Attributs auf Knoten- und Umgebungsebene

In Rollen oder Umgebungen definierte Attribute haben die höchste Priorität.

Step 1 - Erstellen Sie eine Rolle.

vipin@laptop:~/chef-repo $ subl roles/german_hosts.rb 
name "german_hosts" 
description "This Role contains hosts, which should print out 
their messages in German" 
run_list "recipe[my_cookbook]" 
default_attributes "my_cookbook" => { "message" => "Hallo Welt!" }

Step 2 - Laden Sie die Rolle auf den Chef-Server hoch.

vipin@laptop:~/chef-repo $ knife role from file german_hosts.rb 
Updated Role german_hosts!

Step 3 - Weisen Sie die Rolle einem Knoten zu.

vipin@laptop:~/chef-repo $ knife node edit server 
"run_list": [ 
   "role[german_hosts]" 
] 
Saving updated run_list on node server

Step 4 - Führen Sie den Chef-Client aus.

user@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-01-13T20:49:49+00:00] INFO: ** Saying what I was told to 
say: Hallo Welt! 
...TRUNCATED OUTPUT...