Шеф-повар включает атрибуты переопределения рецептов
Когда вы включаете рецепт в другой рецепт, как вам переопределить атрибуты.
Похоже, что рецепт include использовал атрибуты по умолчанию, а не атрибуты рецепта, когда он был запущен ранее в run_list.
Ответы
Ответ 1
Когда вы создаете кучную книгу-оболочку, обычно переопределять атрибуты.
Предположим, у вас есть кулинарная книга my_web_server с my_web_server/recipes/default.rb
следующим образом:
include_recipe "apache2"
И вы хотите переопределить атрибут default_site_enabled из cookbook apache2.
Тогда ваш файл my_web_server/attributes/default.rb
должен выглядеть так:
override['apache']['default_site_enabled'] = true
И не забудьте указать зависимости в my_web_server/metadata.rb
как:
depends "apache2"
Ответ 2
Я часто использую роли для переопределения атрибутов.
Скажем, у меня есть две кулинарные книги, одна для моей sweet_rails_app, одна для установки/настройки apache и пассажира для установки моего приложения поверх.
В моем sweet_rails_app_cookbook у меня может быть:
# coding: UTF-8
# Cookbook Name:: sweet_rails_app
# Recipe:: default
include_recipe 'apache_passenger_cookbook::default'
... # recipe code
Все атрибуты в обеих кулинарных книжках, установленные на уровне по умолчанию в любой из кулинарных книг.
# coding: UTF-8
name 'sweet_rails_app'
description 'Deploys Sweet Rails App'
run_list "recipe[sweet_rails_app_cookbook]"
base_dir = '/opt/sweet_rails_app'
override_attributes(
sweet_rails_app: {
base_dir: base_dir,
... # more override attributes
},
apache_passenger: {
document_root: base_dir
}
)
Затем роль - это все, что мне нужно добавить в run_list для node. Это также добавляет бонуса к контролю порядка выполнения двух кулинарных книг.