Chef - Variable d'environnement

La variable d'environnement est un moyen clé pour que la recette de Chef s'exécute avec succès sur n'importe quel nœud particulier. Il existe plusieurs façons de le faire, soit en les configurant manuellement, soit en utilisant un script Shell. Les définir via une recette est ce que nous devons effectuer ici.

Pour ce faire, nous avons besoin d'un livre de recettes ici, nous utiliserions test_cookbook et une liste d'exécution contenant test_cookbook.

Définition de la variable d'environnement à l'aide de la recette du chef

Step 1 - Mettez à jour la recette par défaut du livre de recettes avec une variable d'environnement.

[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 - Téléchargez le livre de recettes mis à jour sur le serveur.

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

Step 3 - Exécution du client Chef pour créer un fichier temporaire.

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

Validation de la variable

[email protected]:~$ cat /tmp/message 
Hello from Chef

Méthode de travail

Ruby expose la variable d'environnement actuelle via ENV –a hash pour lire et modifier la variable d'environnement.

Exécuter la ressource

Nous pouvons utiliser la ressource d'exécution pour faire la même chose dans la recette par défaut du livre de recettes Chef.

[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- La définition d'une variable d'environnement à l'aide d'ENV rendra cette variable disponible pendant toute l'exécution de Chef. En revanche, le transmettre à la ressource d'exécution ne le rendra disponible que pour cette commande exécutée par la ressource.