Переменная окружения — это ключевой способ успешного запуска рецепта 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 сделает его доступным только для той команды, которая выполняется ресурсом.