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

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

我创建了一个 chef 配方,其中提到了特定 rpm 的安装。此 rpm 有一个版本号,需要从属性文件(本身是动态创建的)动态加载。然后需要将此 chef 配方加载到 chef 服务器中。

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

这里v91-2是需要通过从属性文件中读取来动态输入到配方中的值。

这可以实现吗?如果可以,我该如何实现它?(对 ruby​​ 一无所知)!

答案1

编辑:由于投票反对而完全重写,但没有更多信息,我不确定我到底在纠正什么,所以这里是可以复制和粘贴的有效代码。

假设属性文件的内容放在 /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

相关内容