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.