Шеф-повар - динамическая настройка рецептов
Атрибуты - это ключевые компоненты для динамической настройки кулинарных книг. Атрибуты позволяют авторам настраивать кулинарную книгу. Отменяя значения по умолчанию, установленные в кулинарных книгах, пользователь может вводить свои собственные значения.
Step 1 - Создайте файл по умолчанию для атрибутов поваренной книги и добавьте к нему атрибут по умолчанию.
vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/attributes/default.rb
default['my_cookbook']['message'] = 'hello world!'
Step 2 - Определите атрибут внутри рецепта.
vipin@laptop:~/chef-repo $ subl cookbooks/<Cookbook Name>/recipes/default.rb
message = node['my_cookbook']['message']
Chef::Log.info("** Saying what I was told to say: #{message}")
Step 3 - Загрузка измененной кулинарной книги.
vipin@laptop:~/chef-repo $ knife cookbook upload my_cookbook
Uploading my_cookbook [0.1.0]
Step 4 - Запуск Chef-Client определенного узла.
user@server:~$ sudo chef-client
...TRUNCATED OUTPUT...
[2013-01-13T20:48:21+00:00] INFO: ** Saying what I was told to
say: hello world!
...TRUNCATED OUTPUT...
Метод работы
Chef загружает все атрибуты из файла атрибутов перед их выполнением. Атрибуты хранятся вместе с объектом узла. Можно получить доступ ко всем атрибутам, хранящимся в объекте узла в рецептах, и получить их текущие значения.
Chef имеет ограниченную структуру, начиная с самой низкой по умолчанию, затем идет нормальная (которая имеет псевдоним с набором), а затем отменяет. Уровень атрибута, установленный в рецепте, имеет приоритет над уровнем, установленным в файле атрибутов.
Переопределение атрибута на уровне узла и среды
Атрибут, определенный в ролях или среде, имеет наивысший приоритет.
Step 1 - Создайте роль.
vipin@laptop:~/chef-repo $ subl roles/german_hosts.rb
name "german_hosts"
description "This Role contains hosts, which should print out
their messages in German"
run_list "recipe[my_cookbook]"
default_attributes "my_cookbook" => { "message" => "Hallo Welt!" }
Step 2 - Загрузите роль на сервер Chef.
vipin@laptop:~/chef-repo $ knife role from file german_hosts.rb
Updated Role german_hosts!
Step 3 - Назначьте роль узлу.
vipin@laptop:~/chef-repo $ knife node edit server
"run_list": [
"role[german_hosts]"
]
Saving updated run_list on node server
Step 4 - Запустите Chef-Client.
user@server:~$ sudo chef-client
...TRUNCATED OUTPUT...
[2013-01-13T20:49:49+00:00] INFO: ** Saying what I was told to
say: Hallo Welt!
...TRUNCATED OUTPUT...