Chef - переменная среды
Переменная среды - это ключевой способ успешно запустить рецепт Chef на любом конкретном узле. Есть несколько способов сделать это: настроить их вручную или с помощью сценария оболочки. Установка их по рецепту - вот что нам нужно сделать здесь.
Для этого нам нужно иметь здесь кулинарную книгу, мы бы использовали test_cookbook и список выполнения, который содержит test_cookbook.
Установка переменной среды с помощью рецепта Chef
Step 1 - Обновите рецепт кулинарной книги по умолчанию с помощью переменной среды.
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 - Загрузите обновленную кулинарную книгу на сервер.
vipin@laptop:~/chef-repo $ knife cookbook upload test_cookbook
Uploading my_cookbook [0.1.0]
Step 3 - Запуск клиента Chef для создания временного файла.
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...
Проверка переменной
user@server:~$ cat /tmp/message
Hello from Chef
Метод работы
Ruby предоставляет текущую переменную среды через ENV –a хэш для чтения и изменения переменной среды.
Выполнить ресурс
Мы можем использовать ресурс execute, чтобы сделать то же самое внутри рецепта Chef по умолчанию в кулинарной книге.
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- Установка переменной среды с помощью ENV сделает эту переменную доступной в течение всего запуска Chef. Напротив, передача его в ресурс выполнения сделает его доступным только для этой одной команды, выполняемой ресурсом.