厨师食谱中的属性优先权

Vai*_*hav 6 cookbook chef-infra

我试图通过从如何写可重复使用的厨师食谱,江南风格中获取灵感来实现包装食谱.我希望在没有经理应用程序的情况下在我的节点上安装tomcat 7.我用以下attributes/default.rb文件创建了一个包装器食谱:

default["tomcat"]["base_version"] = 7
default["tomcat"]["deploy_manager_apps"] = false
Run Code Online (Sandbox Code Playgroud)

提供的默认属性tomcat/attributes/default.rb是:

default["tomcat"]["base_version"] = 6
#other attributes
default["tomcat"]["deploy_manager_apps"] = true
default["tomcat"]["user"] = "tomcat#{node["tomcat"]["base_version"]}
Run Code Online (Sandbox Code Playgroud)

我希望在所有属性中覆盖这些值.但是,诸如["tomcat"]["user"]未被覆盖的属性.以上仍具有的价值tomcat6node["tomcat"]["user"].

我是否必须覆盖所有引用的属性["tomcat"]["base_version"]}"?如果我attributes/default.rb在tomcat cookbook之前加载了default.rb这个就行了.

我正在使用Berkshelf,Vagrant和Chef solo进行开发.在metadata.rb我的食谱中,我已经提到了depends "tomcat".

我的自定义食谱位于https://github.com/vaibhavguptaIITD/hcentive-ops/tree/master/hc-tomcat,tomcat社区食谱位于https://github.com/opscode-cookbooks/tomcat.

Mic*_*etz 9

这是由于在Chef运行期间如何/何时评估ruby代码.在典型的Chef运行中,首先按照run_list指示的依赖关系顺序评估属性文件,如下所述:Chef 11 In-Depth:Attributes Changes.

Chef检测对tomcatcookbook 的依赖性并首先加载/评估它的属性.因此default["tomcat"]["user"] = "tomcat#{node["tomcat"]["base_version"]}设置为tomcat6因为当时的值为node["tomcat"]["base_version"]6.

稍后,Chef会评估您的包装器食谱并将该node["tomcat"]["base_version"]属性正确设置为7,但从node["tomcat"]["user"]不重新评估.

因此,node["tomcat"]["user"]如果您想要更改它的值,您需要在包装器食谱中设置值.