我正在使用下载,安装,配置SDK的厨师社区食谱。 (我们称之为blah-sdk)。你只需要include_recipe'blah-sdk'和viola,它已经安装了。它有一个属性指定它将安装的blah-sdk的版本。这个版本属性反过来被用来形成相应的'download_url'属性的值。理论上,我应该能够将版本属性的值设置为食谱中的其他内容,其中包括blah-sdk。但有一个问题。在我的覆盖版本属性之前,download_url属性被设置(使用在blah-sdk食谱中指定的默认版本)。所以错误的url被用来检索默认版本,而不是我想要的版本。我也可以在我的食谱中设置download_url,但这打破了'blah-sdk'食谱的封装。在开始工作之前,我最终可能会用一些长长的属性进行实验性的捶打。有一个更好的方法。它是什么?厨师的属性解析
食谱/嗒嗒-SDK /属性/ default.rb:
default['blah']['version'] = '24.4'
default['blah']['download_url'] = "http://dl.company.com/blah/blah-sdk_r#{node['blah']['version']}-linux.tgz"
食谱/嗒嗒-SDK /食谱/ default.rb:
...
print("blah version: #{node['blah']['version']}")
print("blah download_url: #{node['blah']['download_url']}")
...
食谱/ my_cookbook /属性/默认值。 RB:
normal['blah']['version'] = '24.4.1'
(。我一直在使用默认情况下,force_default,覆盖和force_override也试过没有什么区别)
食谱/ my_cookbook /食谱/ default.rb
...
include_recipe 'blah-sdk'
...
输出:
==>默认:嗒嗒版本:24.4.1
==>默认:嗒嗒DOWNLOAD_URL :http://dl.company.com/blah/blah-sdk_r24.4-linux.tgz
代码演示问题和coderanger的建议的解决方案(如果你可以修复第三方食谱): https://github.com/marc-swingler/stackoverflow_question
不是最好的解决方案,但由于加载属性的顺序,将版本放到角色或环境中也可以。 https://christinemdraper.wordpress.com/2014/10/06/avoiding-the-possible-pitfalls-of-derived-attributes/
使用普通优先级属性是包装食谱并覆盖了源食谱默认值。看例子:http://stackoverflow.com/questions/28775225/how-to-use-chef-to-update-alternatives-for-java-using-execute/28775684#28775684 –
试过。我也试过了force_default,override和force_override。同样的结果。 download_url属性使用blah-sdk cookbook中定义的版本属性来解析,而不是在我的包装器中定义的版本属性。 (顺便说一下,我编辑了这个问题来反映你的建议,希望能让它更清楚一点。) –