I have LWRP which should create cookbook_file
inside its create
action
resource_name :vuy
property :vu_name, String, name_property :true
actions :create
action :create do
log "vuy:@new_resource.vu_name-#{@new_resource.vu_name}"
cookbook_file "c:/temp/test.xml" do
source "#{@new_resource.vu_name}"
end
end
And test recipe
vuy 'text.txt'
chef-client
execution fails with error NoMethodError: undefined method 'vu_name' for nil:NilClass
When I remove cookbook_file
from create
method, log correctly shows: INFO: vu:@new_resource.vu_name-text.txt
In next step, I replaced
source "#{@new_resource.vu_name}"
with same value as specified in test recipe
source "text.txt"
and file was fetched.
To me, it looks that cookbook_file
inner ruby block does not get copy of new_resource
and it becomes nil
.
How to use properties of LWRP as arguments of resources declared inside action?
That should be
new_resource.vu_name
, i.e. without the@
. With the at sign it's a local variable lookup, without it is a method call. Chef automatically promotes the method call so that even inside thecookbook_file
you get the right thing, but it cannot do this with an instance variable lookup.