В определенных условиях невозможно поставить сервер под полный контроль 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-преобразованные значения в качестве своего содержимого и записывает его на диск.