2013-03-04 13 views
12

Wenn Sie ein Rezept in ein anderes Rezept, wie Sie die Attribute außer Kraft setzen.Koch enthalten Rezepte überschreiben Attribute

Es sieht so aus, dass das Include-Rezept die Standardattribute verwendet und nicht die Attribute des Rezepts, wenn es zuvor in der run_list ausgeführt wurde.

Antwort

15

Wenn Sie ein Wrapper-Kochbuch erstellen, ist es üblich, Attribute zu überschreiben.

Angenommen, Sie haben my_web_server Kochbuch mit my_web_server/recipes/default.rb wie folgt aus:

include_recipe "apache2" 

Und Sie möchten Attribut außer Kraft setzen von apache2 Kochbuch default_site_enabled. Sie dann Ihre Datei my_web_server/attributes/default.rb sollte folgendermaßen aussehen:

override['apache']['default_site_enabled'] = true 

Und vergessen Sie nicht, Abhängigkeiten in my_web_server/metadata.rb wie angeben:

depends "apache2" 
+1

Funktioniert das nur für Chef-Server? Scheint nicht zu funktionieren auf Chef Solo, mit Chef 12.0.3. – Noz

+0

Vielen Dank dafür, brauchte einige ähnliche Informationen zu überschreiben Attribute auf dem Chef_nginx Kochbuch. – WhyAyala

5

oft ich Rollen verwenden für Überschreibung Attribute.

Angenommen, ich habe zwei Kochbücher, eins für meine sweet_rails_app, eins zum Installieren/Konfigurieren von Apache und Passagier, um meine App zu installieren.

In meinem sweet_rails_app_cookbook kann ich habe:

# coding: UTF-8 
# Cookbook Name:: sweet_rails_app 
# Recipe:: default 
include_recipe 'apache_passenger_cookbook::default' 
... # recipe code 

Alle Attribute in den beiden Kochbücher auf der Standardebene festgelegt in entweder Kochbuch.

Dann ist die Rolle alles, was ich zur run_list für den Knoten hinzufügen muss. Dies hat auch den zusätzlichen Vorteil, die Reihenfolge der Ausführung der beiden Kochbücher zu kontrollieren.

Verwandte Themen