Chef属性在数组哈希中设置变量

时间:2015-03-09 15:53:25

标签: ruby arrays variables hash chef

在食谱中,我的属性/ default.rb中包含以下内容:

default.ark.packages = [ 
  {
    'name' => 'optipng',
    'url' => 'http://squirrelyjim.cloudfront.net/heroes/optipng-0.7.5.tar.gz', 
    'version' => '0.7.5'
  },
  {
    'name' => 'imagemagick',
    'url' => 'http://squirrelyjim.cloudfront.net/heroes/ImageMagick-6.9.0-4.tar.gz',
    'version' => '6.9.0-4'
  },
  {
    'name' => 'jpegoptim',
    'url' => 'http://squirrelyjim.cloudfront.net/heroes/jpegoptim-1.4.1.tar.gz',
    'version' => '1.4.1'
  }
]

然后我使用ark资源调用这些值,如下所示:

node.ark.packages.each do |pkg|  
  ark pkg['name'] do
    url pkg['url']
    version pkg['version']
    action :install_with_make
    notifies :run, "execute[ldconfig]", :immediately
  end
end

这很好但我想以某种方式让版本在url的末尾自动调用,而不是两次输入。有没有办法在哈希中使用同一哈希中的另一个值更新哈希值,类似于:

http://squirrelyjim.cloudfront.net/heroes/optipng-#{version}.tar.gz

1 个答案:

答案 0 :(得分:1)

在循环内动态构建URL:

node.ark.packages.each do |pkg|  
  url = "http://squirrelyjim.cloudfront.net/heroes/#{pkg['name']}-#{pkg['version']}.tar.gz"

  ark pkg['name'] do
    url url
    version pkg['version']
    action :install_with_make
    notifies :run, "execute[ldconfig]", :immediately
  end
end