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. Напротив, передача его в ресурс выполнения сделает его доступным только для этой одной команды, выполняемой ресурсом.