2015-12-08 2 views
1

Если у вас есть обертка поваренную книгу, которая перекрывает производный атрибуты, вам нужно использовать отложенную загрузку так:Может ли CHEF lazy загружать несколько атрибутов?

библиотека поваренной

default['foo'] = 42 
default['url'] = "http://example.com/#{foo}" 

Упаковочный поваренной

default['foo'] = 9000 
default['url'] = "http://example.com/#{foo}" 

some_resource 'derp' do 
    url node['url'] % { foo: node['foo'] } 
    action :do_stuff 
end 

Вышеуказанные работы.

Как вы используете ленивую загрузку для нескольких производных атрибутов?

Например, мне нужно вывести url прочь derp, который получен прочь foo

default['foo'] = 42 
default['derp'] = "bar-#{foo}" 
default['url'] = "http://example.com/#{derp}" 

some_resource 'derp' do 
    url node['url'] % { foo: node['foo'], derp: node['derp'] } #Guessing this is the right syntax 
    action :do_stuff 
end 

Однако это дает ошибку

 KeyError 
    -------- 
    key{node['url']} not found 

Этот пример значительно упрощен, полный код изложенные здесь: https://github.com/SimpleFinance/chef-zookeeper/issues/151

Обновление

Для справки, вопрос был решен здесь: https://github.com/SimpleFinance/chef-zookeeper/commit/6750ea8c11a6dd7ef1c0f76ac8c61b71a172fb80

ответ

1

Как я уже объяснял вам раньше, это работает как Sprintf в любом нормальном C на основе языка. Магии нет. Вы также используете #{} в строке вместо %{}, поэтому ничего из этого не получится.

Пожалуйста, следуйте примеры, я дал вам:

default['foo'] = 42 
default['derp'] = "bar-%{foo}" 
default['url'] = "http://example.com/%{derp}" 

some_resource 'derp' do 
    derp = node['derp'] % {foo: node['foo']} 
    url node['url'] % { foo: node['foo'], derp: derp } 
end