2015-03-09 2 views
0

В поваренной книге я следующий в моих атрибутов/default.rb:Chef Атрибут установить переменную в хэш-массива

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' 
    } 
] 

Я тогда называть эти значения с помощью ковчега ресурса следующим образом:

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

Динамически построить 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 
+0

, что прекрасно работает, спасибо , – PurrBiscuit

Смежные вопросы