Учебники

Chef — скрипты для пакетов данных

В определенных условиях невозможно поставить сервер под полный контроль Chef. В таких случаях может потребоваться доступ к значениям в пакетах данных Chef из сценариев. Для этого необходимо сохранить значения пакета данных в файле JSON и позволить добавленному сценарию получить доступ к этим значениям.

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

Метод работы

Шаг 1 — Создайте пакет данных.

vipin@laptop:~/chef-repo $ mkdir data_bags/servers 
vipin@laptop:~/chef-repo $ knife data bag create servers 
Created data_bag[servers] 

Шаг 2 — Создайте элемент пакета данных.

vipin@laptop:~/chef-repo $ subl data_bags/servers/Storage.json { 
   "id": "storage", 
   "host": "10.0.0.12" 
} 

Шаг 3 — Обновите элемент пакета данных.

vipin@laptop:~/chef-repo $ subl data_bags/servers/Storage.json { 
   "id": "storage", 
   "host": "10.0.0.12" 
} 

Использование в кулинарной книге

Шаг 1 — Необходимо создать файл JSON, содержащий значения пакета данных, используя указанную выше поваренную книгу, чтобы внешние сценарии могли получить доступ к этим значениям.

vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb 
file "/etc/backup_config.json" do 
   owner "root"
   group "root" 
   mode 0644 
   content data_bag_item('servers', 'backup')['host'].to_json 
end

Шаг 2 — Загрузите test_cookbook на сервер Chef.

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-03-14T20:30:33+00:00] INFO: Processing 
file[/etc/backup_config.json] action create 
(my_cookbook::default line 9) 
[2013-03-14T20:30:34+00:00] INFO: entered create 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] owner changed to 0 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] group changed to 0 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] mode changed to 644 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] created file 
/etc/backup_config.json 
...TRUNCATED OUTPUT... 

Шаг 4 — Проверка содержимого сгенерированного файла JSON.

user@server:~$ cat /etc/backup_config.json 
"10.0.0.12" 

Рабочий процесс сценариев

В приведенной выше команде файловый ресурс, который мы использовали для создания файла JSON в каталоге / etc, определяется в поваренной книге по умолчанию. Он получает содержимое файла непосредственно из пакета данных, используя метод data_bag_item. Мы получаем доступ к значениям хоста из элемента пакета данных и преобразуем его в JSON. Файловый ресурс использует JSON-преобразованные значения в качестве своего содержимого и записывает его на диск.