通过从属性文件dynamic传递值创build厨师食谱

我创build了一个厨师食谱,其中提到了一个特定的rpm的安装。 这个rpm有一个版本号,需要从一个属性文件(它本身是dynamic创build的)dynamic加载。 这个厨师配方,然后需要加载到厨师服务器。

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

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

这是可以实现的吗? 如果是的话,我该怎么去实现它(对ruby没有任何意见)!

编辑:完全重写,由于向下投票,但没有更多的信息我不知道什么是我正在纠正,所以这里是工作代码,可以复制和粘贴。

假设属性文件的内容放置在/tmp/versions.properties中,如下所示:

 apache=2.4.7-1ubuntu4.8 php=5.4.3 sendmail=1.2.3 

厨师厨师书

 # Copy a file with versions cookbook_file '/tmp/versions.properties' do source 'versions.properties' mode '0644' end # Setvar node.default['version'] = "" # Block where we set the command ruby_block "set_app_id" do block do node.set['version'] = "apt-get install apache2=`grep -o 'apache=.*' /tmp/versions.properties | cut -f2- -d'='`" end action :create end # Do a lazy install execute "install lazy based" do command lazy {node[:version]} end 

作为一个奖励选项,如果你严格的工作* nix下面的作品没有懒惰:

 # Execute straight up execute "install lazy based" do command "apt-get install apache2=`grep -o 'apache=.*' /tmp/versions.properties | cut -f2- -d'='`" end 

我仍然使用前两个职位中链接的原始前提:

假设属性文件位于服务器(?)上,您可以使用[在本文中]描述的懒惰评估[1]

编辑:检查这[也是一个] [2]

[1]: https : //stackoverflow.com/questions/26238056/setting-chef-variable-via-a-ruby-block-not-being-executed 。 [2]: https : //stackoverflow.com/questions/20620724/how-to-lazily-evaluate-an-arbitrary-variable-with-chef