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