Chef

时间:2015-11-15 01:59:12

标签: attributes chef cookbook

我使用下载,安装,配置SDK的厨师社区食谱。 (让我们称之为blah-sdk。)你只需要包括#recipe' 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"

食谱/嗒嗒-SDK /食谱/ default.rb:

...
print("blah version: #{node['blah']['version']}")
print("blah download_url: #{node['blah']['download_url']}")
...

食谱/ my_cookbook /属性/ default.rb:

normal['blah']['version'] = '24.4.1'

(我还尝试过使用default,force_default,override和force_override。没有任何区别。)

食谱/ my_cookbook /食谱/ default.rb

...
include_recipe 'blah-sdk'
...

输出:

  

==>默认值: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/

1 个答案:

答案 0 :(得分:5)

有关此问题的概述,请参阅https://coderanger.net/derived-attributes/。没有好的解决方案不涉及修改上游菜谱。最简单的解决方案是在包装器中复制派生属性。