Chef - Configuration dynamique des recettes

Les attributs sont les composants clés de la configuration dynamique des livres de recettes. Les attributs permettent aux auteurs de rendre le livre de recettes configurable. En remplaçant les valeurs par défaut définies dans les livres de recettes, l'utilisateur peut injecter ses propres valeurs.

Step 1 - Créez un fichier par défaut pour les attributs du livre de recettes et ajoutez-y un attribut par défaut.

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

Step 2 - Définissez l'attribut dans la recette.

[email protected]:~/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 - Téléchargement du livre de cuisine modifié.

[email protected]:~/chef-repo $ knife cookbook upload my_cookbook 
Uploading my_cookbook [0.1.0]

Step 4 - Exécution de Chef-Client du nœud défini.

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

Méthode de travail

Chef charge tous les attributs du fichier d'attributs avant de les exécuter. Les attributs sont stockés avec l'objet noeud. On peut accéder à tous les attributs stockés avec l'objet nœud dans les recettes et récupérer leurs valeurs actuelles.

Chef a une structure restreinte à partir de la valeur par défaut la plus basse, puis revient à la normale (qui est aliasée avec l'ensemble), puis remplace. Le niveau d'attribut défini dans la recette a la priorité sur le même niveau défini dans un fichier d'attributs.

Remplacer l'attribut au niveau du nœud et de l'environnement

L'attribut défini dans les rôles ou l'environnement a la priorité la plus élevée.

Step 1 - Créez un rôle.

[email protected]:~/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 - Téléchargez le rôle sur le serveur Chef.

[email protected]:~/chef-repo $ knife role from file german_hosts.rb 
Updated Role german_hosts!

Step 3 - Attribuez le rôle à un nœud.

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

Step 4 - Exécutez le Chef-Client.

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