厨师包括食谱覆盖属性

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)


aar*_*the 5

我经常使用角色来覆盖属性.

假设我有两个食谱,一个用于我的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的所有内容.这也有控制两个烹饪书的执行顺序的额外好处.