通过从属性文件动态传递值来创建厨师配方

时间:2015-07-06 19:54:16

标签: ruby chef chef-recipe chef-solo chefspec

我创建了一个厨师食谱,其中包含了安装的特定rpm。此rpm的版本号需要从属性文件(动态创建)动态加载。然后需要将这个厨师食谱装入厨师服务器。

remote_file "Core_feature.rpm" do
path   "#{src_loc}core_feature_v91-2.noarch.rpm"

在这里,v91-2是需要通过读取属性文件动态进入配方的值。

这可以实现吗?如果是的话,我该如何继续实施呢。(对红宝石一无所知)!

1 个答案:

答案 0 :(得分:0)

您有几个选择。在我看来,最好的是使用json文件而不是属性文件。然后,您可以使用chef-client调用上的normal标志来读取节点上normal属性中的json文件。主要的警告是,knife node attribute set ...属性从一个厨师跑到下一个,所以你需要确保每个厨师都重新设置它们。

或者,您可以让jenkins使用刀直接在节点上设置属性。您需要moment.js properties = IO.read('/path/to/properties/file') # parse properties and set node attributes like this node.default[:something] = <your value> 。或者您可以在环境或角色上设置它,如果这些是可行的选项,但它们将涉及从服务器中提取环境或角色,修改它,然后再将其推回。

另一种选择是使用ruby将属性文件作为attribute / xxxx.rb文件的一部分进行读取。然后,您可以在任何先前级别设置节点属性。

属性/ default.rb

sort