2013-03-04 139 views
12

當您在另一個配方中包含配方時,您如何覆蓋屬性。廚師包括配方覆蓋屬性

它看起來包含的配方使用了默認屬性,而不是配方的屬性,因爲它先前在run_list中運行。

回答

15

當您創建包裝食譜時,通常會覆蓋屬性。

假設你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" 
+1

這是否只適用於廚師服務器? Chef solo使用Chef 12.0.3似乎不適合我。 – Noz 2014-12-19 17:39:57

+0

非常感謝您的支持,需要一些類似的信息來覆蓋chef_nginx食譜上的屬性。 – WhyAyala 2017-02-03 22:24:14

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 

兩個食譜設定在任食譜默認級別的所有屬性。

# 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的所有東西。這也有控制兩個食譜的執行順序的額外好處。