Mar*_*ler 0 attributes cookbook chef-infra
我正在使用下载,安装和配置SDK的厨师社区食谱.(我们称之为blah-sdk.)你只需要包括'blah-sdk'和中提琴,然后安装它.它有一个属性,指定它将安装的blah-sdk的版本.该版本属性又用于形成相应的"download_url"属性的值.从理论上讲,我应该能够将版本属性的值设置为cookbook中包含blah-sdk的其他内容.但有一个问题.在我的覆盖版本属性之前,将设置download_url属性(使用blah-sdk cookbook中指定的默认版本).所以错误的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"
Run Code Online (Sandbox Code Playgroud)
食谱/等等-SDK /食谱/ default.rb:
...
print("blah version: #{node['blah']['version']}")
print("blah download_url: #{node['blah']['download_url']}")
...
Run Code Online (Sandbox Code Playgroud)
食谱/ my_cookbook /属性/ default.rb:
normal['blah']['version'] = '24.4.1'
Run Code Online (Sandbox Code Playgroud)
(我也尝试过使用default,force_default,override和force_override.没有区别.)
食谱/ my_cookbook /食谱/ default.rb
...
include_recipe 'blah-sdk'
...
Run Code Online (Sandbox Code Playgroud)
输出:
==>默认值:blah version:24.4.1
==>默认值:blah 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/