当您在另一个配方中包含一个配方时,您如何覆盖属性。
看起来包含配方使用了默认属性,而不是之前在 run_list 中运行的配方的属性。
当您在另一个配方中包含一个配方时,您如何覆盖属性。
看起来包含配方使用了默认属性,而不是之前在 run_list 中运行的配方的属性。
创建包装说明书时,通常会覆盖属性。
假设,你有这样的 my_web_server 食谱my_web_server/recipes/default.rb
:
include_recipe "apache2"
并且您想覆盖 apache2 食谱中的属性 default_site_enabled。然后您的文件my_web_server/attributes/default.rb
应如下所示:
override['apache']['default_site_enabled'] = true
并且不要忘记指定依赖my_web_server/metadata.rb
项:
depends "apache2"
我经常使用角色来覆盖属性。
假设我有两本食谱,一本用于我的 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 的全部内容。这还有一个额外的好处,那就是控制两个食谱的执行顺序。