我有LWRP,应该在cookbook_file
操作
create
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
测试食谱
vuy 'text.txt'
chef-client
执行失败,错误为NoMethodError: undefined method 'vu_name' for nil:NilClass
当我从cookbook_file
方法中删除create
时,正确显示日志:INFO: vu:@new_resource.vu_name-text.txt
在下一步中,我替换了
source "#{@new_resource.vu_name}"
具有与测试配方中指定的值相同的值
source "text.txt"
并提取了文件。
对我来说,cookbook_file
内部红宝石块看起来没有得到new_resource
的副本,它变成了nil
。
如何使用LWRP的属性作为在action中声明的资源的参数?
答案 0 :(得分:0)
那应该是new_resource.vu_name
,即没有@
。使用at符号,它是一个局部变量查找,而不是方法调用。 Chef会自动提升方法调用,这样即使在cookbook_file
内部你也能得到正确的东西,但它不能通过实例变量查找来实现。