2014-03-05 95 views
5

我可以覆盖我的食谱\角色中的默认属性,但是我无法获取依赖于该属性的任何其他属性也进行更新。覆盖厨师的默认属性和从属属性

作为一个例子,对于phantomjs食谱我想安装1.9.7而不是默认的1.9.2。 (我知道这种变化现在已经致力于食谱回购)

我可以覆盖与版本:

node.set [ 'phantomjs'] [ '版本'] =“1.9。 7"

但在phantomjs默认属性存在使用与此字符串替换生成用于下载的基本URL依赖属性:

默认['phantomjs'] ['basename'] = “phantomjs - #{node ['phantomjs'] ['version']} - linux - #{node ['kernel'] ['machine']}”

是否有方法来设置版本属性,以便在评估这些相关属性之前执行更改?或者一种强制重新评估的方式?

这是我以前遇到过的一个问题,过去我只是重写所有依赖的东西..但这不是一个很好的方法。

我正在使用最新的厨师(刚刚在流浪汉下使用11.8.2进行了测试,但最新的厨师11.10.4在其他地方进行了测试)并使用了厨师独奏和厨师服务器。

谢谢。

+0

设置它在一个属性文件,而不是配方 – sethvargo

+2

谢谢sethvargo ..我也尝试覆盖在我的食谱属性文件中的值..我试过默认和覆盖,我也尝试include_attributes为食谱的属性我试图推翻。仍然没有影响依赖属性。 – BlueSkies

+0

Hrm。这似乎是一个错误,但肯定是在厨师11中修复的... – sethvargo

回答

1

您需要将自己的食谱(覆盖此属性)移到运行列表的上方。在编译时执行的字符串插值(foo-"#{whatever}")(加载属性文件时),chef-client按运行列表的顺序加载它们。

或者您可以选择手动覆盖所有相关属性,但这是通向地狱的道路。

+0

我有我的更高运行列表,但仍然需要手动更新所有属性。 – Seperman