Я создал LWRP с помощью chefdk, строго следуя документации и нескольким сообщениям в блоге.
ресурс
actions :install
default_action :install
provides :foo
attribute :name, :kind_of => String, :name_attribute => true
поставщик
provides :foo
def whyrun_supported?
true
end
use_inline_resources
action :install do
converge_by("install: #{@new_resource}") do
execute "installation of: #{@new_resource.name}" do
command "foo install #{@new_resource.name}"
end
end
end
def load_current_resource
@current_resource = Chef::Resource::Foo.new @new_resource.name
@current_resource.name = @new_resource.name
end
При использовании этого LWRP в поваренной книге я получаю следующую ошибку:
undefined method `name=' for Chef::Resource::Foo
Единственный способ исправить это — добавить attr_accessor :name
к определению ресурса. Но я никогда не рассматривал это как требование в какой-либо документации. Из документации я предположил, что Chef позаботился о настройке attr_accessor
для любых атрибутов во время компиляции ресурса/поставщика. Может ли кто-нибудь подтвердить то, что я нашел, или объяснить, что на самом деле происходит?
Спасибо.