Я создал кулинарную книгу, используя:
chef generate cookbook demo
chef generate attribute default
chef generate resource package
recipes \ default.rb :
demo_package 'Demo'
resources \ package.rb :
property :resource_prop1, String
property :resource_prop2, String
default_action :install
load_current_value do
puts
puts "the current value before change for 'test_prop1': #{resource_prop1}"
puts "the current value before change for 'test_prop2': #{resource_prop2}"
resource_prop1 = node['demo_resource']['test_prop1']
resource_prop2 = node['demo_resource']['test_prop2']
puts "the current value after change for 'test_prop1': #{resource_prop1}"
puts "the current value after change for 'test_prop2': #{resource_prop2}"
end
action :install do
puts "the current value after load properties for 'test_prop1': #{new_resource.resource_prop1}"
puts "the current value after load properties for 'test_prop2': #{new_resource.resource_prop2}"
end
атрибуты \ default.rb :
default['demo_resource'] = {}
default['demo_resource']['test_prop1'] = 'test value 1'
default['demo_resource']['test_prop2'] = 'test value 2'
Я ожидал, что результат будет выглядеть следующим образом:
the current value before change for 'test_prop1':
the current value before change for 'test_prop2':
the current value after change for 'test_prop1': test value 1
the current value after change for 'test_prop2': test value 2
the current value after load properties for 'test_prop1': test value 1
the current value after load properties for 'test_prop2': test value 2
, но Я действительно получил:
the current value before change for 'test_prop1':
the current value before change for 'test_prop2':
the current value after change for 'test_prop1': test value 1
the current value after change for 'test_prop2': test value 2
the current value after load properties for 'test_prop1':
the current value after load properties for 'test_prop2':
Я пытаюсь найти правильный способ ссылки на свойства ресурса из блока действий. Что я делаю не так?
ОБНОВЛЕНИЕ
Я попытался изменить эту строку:
puts "the current value after load properties for 'test_prop1': #{new_resource.resource_prop1}"
в это:
puts "the current value after load properties for 'test_prop1': #{resource_prop1}"
но я получил эту ошибку:
NameError undefined local variable or method `resource_prop1' for #<#Class:0x0000000007b51178>:0x00000000084b3680> Did you mean? resources
ОБНОВЛЕНИЕ 2
Мне удалось обойти эту проблему, изменив Блок local_current_value выглядит следующим образом:
load_current_value do |package|
puts
puts "the current value before change for 'test_prop1': #{package.resource_prop1}"
puts "the current value before change for 'test_prop2': #{package.resource_prop2}"
package.resource_prop1 = node['demo_resource']['test_prop1']
package.resource_prop2 = node['demo_resource']['test_prop2']
puts "the current value after change for 'test_prop1': #{package.resource_prop1}"
puts "the current value after change for 'test_prop2': #{package.resource_prop2}"
end