Учебники

Chef — Переменная среды

Переменная окружения — это ключевой способ успешного запуска рецепта Chef на любом конкретном узле. Есть несколько способов сделать это, либо настроить их вручную, либо с помощью сценария оболочки. Установка их через рецепт — вот что нам нужно сделать здесь.

Для этого нам нужна кулинарная книга, мы бы использовали test_cookbook и список запуска, который содержит test_cookbook.

Настройка переменной среды с использованием рецепта Chef

Шаг 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

Шаг 2 — Загрузите обновленную кулинарную книгу на сервер.

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

Шаг 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 хеш для чтения и изменения переменной среды.

Выполнить ресурс

Мы можем использовать ресурс выполнения, чтобы сделать то же самое в рецепте поваренной книги по умолчанию.

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 

Примечание. Установка переменной среды с помощью ENV сделает эту переменную доступной в течение всего цикла Chef. Напротив, передача его ресурсу execute сделает его доступным только для той команды, которая выполняется ресурсом.