如何在LWRP的行动中使用Chef DSL

时间:2016-02-23 07:59:04

标签: ruby chef lwrp

我有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中声明的资源的参数?

1 个答案:

答案 0 :(得分:0)

那应该是new_resource.vu_name,即没有@。使用at符号,它是一个局部变量查找,而不是方法调用。 Chef会自动提升方法调用,这样即使在cookbook_file内部你也能得到正确的东西,但它不能通过实例变量查找来实现。