Атрибуты являются ключевыми компонентами для динамической настройки кулинарных книг. Атрибуты позволяют авторам сделать поваренную книгу настраиваемой. Переопределив значения по умолчанию, установленные в кулинарных книгах, пользователь может ввести свои собственные значения.
Шаг 1 — Создайте файл по умолчанию для атрибутов поваренной книги и добавьте в него атрибут по умолчанию.
vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/attributes/default.rb default['my_cookbook']['message'] = 'hello world!'
Шаг 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}")
Шаг 3 — Загрузка измененной поваренной книги.
vipin@laptop:~/chef-repo $ knife cookbook upload my_cookbook Uploading my_cookbook [0.1.0]
Шаг 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 имеет ограниченную структуру, начиная с значения по умолчанию, являющегося самым низким, затем становится нормальным (который связан с набором) и затем переопределяет. Уровень атрибута, установленный в рецепте, имеет приоритет над тем же уровнем, установленным в файле атрибута.
Переопределение атрибута на уровне узла и среды
Атрибут, определенный в ролях или среде, имеет наивысший приоритет.
Шаг 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!" }
Шаг 2 — Загрузите роль на сервер Chef.
vipin@laptop:~/chef-repo $ knife role from file german_hosts.rb Updated Role german_hosts!
Шаг 3 — Назначьте роль узлу.
vipin@laptop:~/chef-repo $ knife node edit server "run_list": [ "role[german_hosts]" ] Saving updated run_list on node server
Шаг 4 — Запустите Chef-Client.