Фон
Я пытаюсь понять, как правильно работать с атрибутами среды в рецептах. Примечание: я понимаю, что мой подход не может быть лучшей практикой шеф-повара; однако моя цель - понять поток данных здесь, а не обязательно использовать мой подход в производственном приложении.
Некоторые детали:
- Я использую Vagrant и Chef - в частности, провайдер
chef-zero
(поэтому я должен использовать файлы ruby для своей среды, а не JSON из-за ограничения шеф-повара). - Вот моя структура каталогов:
├── environments
├── vm.rb
├── roles
├── base.json
├── cookbooks
├── init
├── recipes
├── default.rb
├── Vagrantfile
Вот мои файлы
Среда: vm.rb
name "vm"
description "Configuration file for the Kukla Demo VM"
default_attributes(
custom_demo: {
title: 'My demo title',
description: 'My demo description'
))
Роль: base.json
{
"name": "base",
"description": "Base VM configuration",
"chef_type": "role",
"json_class": "Chef::Role",
"default_attributes": {},
"override_attributes": {},
"run_list": ["recipe[init::default]"]
}
Рецепт: default.rb
#
# Cookbook:: init
# Recipe:: default
#
# Copyright:: 2020, The Authors, All Rights Reserved.
print 'I am here!'
print node[:custom_demo]
Шеф-повар в Vagrantfile
...
chef.nodes_path = 'nodes/'
chef.environments_path = 'environments/'
chef.roles_path = 'roles/'
chef.cookbooks_path = 'cookbooks/'
# Roles
chef.add_role "base"
...
Ожидаемое поведение
Когда я запускаю провайдера, я ожидаю увидеть custom_demo
га sh, напечатанные в журнале запуска шеф-повара. Что-то вроде:
...
==> Machine: Synchronizing Cookbooks:
==> Machine: [2020-02-07T20:37:15+00:00] INFO: Storing updated cookbooks/init/recipes/default.rb in the cache.
==> Machine:
==> Machine: - init (0.1.0)
==> Machine: Installing Cookbook Gems:
==> Machine: Compiling Cookbooks...
==> Machine: I am here! custom_demo => { :title => 'My demo title', :description => 'My demo description' }
==> Machine: Converging 0 resources
==> Machine: [2020-02-07T20:37:15+00:00] INFO: Chef Infra Client Run complete in 0.118042019 seconds
...
Фактическое поведение
Вместо этого я получаю:
...
==> Machine: Synchronizing Cookbooks:
==> Machine: [2020-02-07T20:37:15+00:00] INFO: Storing updated cookbooks/init/recipes/default.rb in the cache.
==> Machine:
==> Machine: - init (0.1.0)
==> Machine: Installing Cookbook Gems:
==> Machine: Compiling Cookbooks...
==> Machine: I am here!
==> Machine: Converging 0 resources
==> Machine: [2020-02-07T20:37:15+00:00] INFO: Chef Infra Client Run complete in 0.118042019 seconds
...
Мой вопрос (ы):
На основе результата У меня остались следующие вопросы:
- Правильно ли мое понимание атрибутов среды (и, следовательно), мои ожидания?
- Если нет, то чего мне не хватает? Могут ли атрибуты среды использоваться таким образом?
- Как правильно отлаживать, использует ли среда повар или нет?
- Как правильно ссылаться на атрибуты среды в рецепт, чтобы я достиг ожидаемого результата?