Szef kuchni - zmienna środowiskowa

Zmienna środowiskowa to kluczowy sposób na pomyślne uruchomienie przepisu Chefa na dowolnym węźle. Można to zrobić na wiele sposobów, albo ręcznie, albo przy użyciu skryptu powłoki. Musimy tutaj wykonać ustawienie ich za pomocą przepisu.

Aby to zrobić, musimy mieć tutaj książkę kucharską, użylibyśmy test_cookbook i listy uruchomień, która zawiera test_cookbook.

Ustawianie zmiennej środowiskowej za pomocą przepisu szefa kuchni

Step 1 - Zaktualizuj domyślny przepis książki kucharskiej za pomocą zmiennej środowiskowej.

vipin@laptop:~/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 - Prześlij zaktualizowaną książkę kucharską na serwer.

vipin@laptop:~/chef-repo $ knife cookbook upload test_cookbook 
Uploading my_cookbook [0.1.0]

Step 3 - Uruchomienie klienta Chef w celu utworzenia pliku tymczasowego.

user@server:~$ 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...

Walidacja zmiennej

user@server:~$ cat /tmp/message 
Hello from Chef

Metoda pracy

Ruby ujawnia bieżącą zmienną środowiskową za pośrednictwem ENV –a hash, aby odczytać i zmodyfikować zmienną środowiskową.

Wykonaj zasób

Możemy użyć zasobu execute, aby zrobić to samo w domyślnej recepturze kucharza książki kucharskiej.

mma@laptop:~/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- Ustawienie zmiennej środowiskowej za pomocą ENV spowoduje, że zmienna będzie dostępna podczas całego przebiegu programu Chef. W przeciwieństwie do tego, przekazanie go do zasobu execute spowoduje, że będzie on dostępny tylko dla tego jednego polecenia wykonywanego przez zasób.