nei*_*ill 13 attributes overriding include chef-infra
在其他配方中包含配方时,如何覆盖属性.
它看起来包含配方使用默认属性而不是先前在run_list中运行的配方属性.
小智 19
在创建包装器手册时,通常会覆盖属性.
假设你有这样的my_web_server食谱my_web_server/recipes/default.rb:
include_recipe "apache2"
Run Code Online (Sandbox Code Playgroud)
并且您想要从apache2 cookbook覆盖属性default_site_enabled.然后你的文件my_web_server/attributes/default.rb应该是这样的:
override['apache']['default_site_enabled'] = true
Run Code Online (Sandbox Code Playgroud)
并且不要忘记在以下内容中指定依赖项my_web_server/metadata.rb:
depends "apache2"
Run Code Online (Sandbox Code Playgroud)
我经常使用角色来覆盖属性.
假设我有两个食谱,一个用于我的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
Run Code Online (Sandbox Code Playgroud)
两个cookbook中的所有属性都在cookbook中设置为默认级别.
# 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 Code Online (Sandbox Code Playgroud)
然后,角色就是我需要添加到节点的run_list的所有内容.这也有控制两个烹饪书的执行顺序的额外好处.