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.