Chef - Configurazione dinamica delle ricette

Gli attributi sono i componenti chiave per la configurazione dinamica dei libri di cucina. Gli attributi consentono agli autori di rendere configurabile il ricettario. Sovrascrivendo i valori predefiniti impostati nei libri di cucina, l'utente può inserire i propri valori.

Step 1 - Crea un file predefinito per gli attributi del libro di cucina e aggiungi un attributo predefinito.

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

Step 2 - Definisci l'attributo all'interno della ricetta.

[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 - Caricamento del ricettario modificato.

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

Step 4 - Esecuzione di Chef-Client del nodo definito.

[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...

Metodo di lavoro

Chef carica tutti gli attributi dal file degli attributi prima di eseguirli. Gli attributi vengono memorizzati con l'oggetto nodo. È possibile accedere a tutti gli attributi memorizzati con l'oggetto nodo all'interno delle ricette e recuperare i loro valori correnti.

Chef ha una struttura limitata a partire dal valore predefinito che è il più basso, quindi diventa normale (che è alias con il set) e quindi sostituisce. Il livello di attributo impostato nella ricetta ha la precedenza sullo stesso livello impostato in un file di attributi.

Sostituzione dell'attributo a livello di nodo e ambiente

Gli attributi definiti nei ruoli o nell'ambiente hanno la massima precedenza.

Step 1 - Crea un ruolo.

[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 - Carica il ruolo sul server Chef.

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

Step 3 - Assegna il ruolo a un nodo.

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

Step 4 - Esegui lo 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...