Chef - Variabile d'ambiente
La variabile d'ambiente è un modo chiave per far funzionare correttamente la ricetta di Chef su un nodo particolare. Esistono diversi modi per farlo, configurandoli manualmente o utilizzando uno script Shell. L'impostazione tramite ricetta è ciò che dobbiamo eseguire qui.
Per fare questo, abbiamo bisogno di un libro di cucina qui useremmo test_cookbook e un elenco di esecuzione che contiene test_cookbook.
Impostazione della variabile d'ambiente usando la ricetta dello chef
Step 1 - Aggiorna la ricetta predefinita del ricettario con una variabile d'ambiente.
[email protected]:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb
ENV['MESSAGE'] = 'Testing environment variable update with chef !'
execute 'print value of environment variable $MESSAGE' do
command 'echo $MESSAGE > /tmp/message'
end
Step 2 - Carica il ricettario aggiornato sul server.
[email protected]:~/chef-repo $ knife cookbook upload test_cookbook
Uploading my_cookbook [0.1.0]
Step 3 - Esecuzione del client Chef per creare un file temporaneo.
[email protected]:~$ sudo chef-client
...TRUNCATED OUTPUT...
[2013-01-25T15:01:57+00:00] INFO: Processing execute[print
value of environment variable $MESSAGE] action run
(my_cookbook::default line 11)
[2013-01-25T15:01:57+00:00] INFO: execute[print value of
environment variable $MESSAGE] ran successfully
...TRUNCATED OUTPUT...
Convalida della variabile
[email protected]:~$ cat /tmp/message
Hello from Chef
Metodo di lavoro
Ruby espone la variabile d'ambiente corrente tramite ENV –a hash per leggere e modificare la variabile d'ambiente.
Esegui risorsa
Possiamo usare la risorsa di esecuzione per fare lo stesso all'interno della ricetta predefinita dello chef del ricettario.
[email protected]:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb
execute 'print value of environment variable $MESSAGE' do
command 'echo $MESSAGE > /tmp/message'
environment 'MESSAGE' => 'Hello from the execute resource'
end
Note- L'impostazione di una variabile d'ambiente utilizzando ENV renderà quella variabile disponibile durante l'intera esecuzione dello Chef. Al contrario, passarlo alla risorsa di esecuzione lo renderà disponibile solo per quel comando eseguito dalla risorsa.