实际回答:我显然需要在使用资源块之前创建一个局部变量,如下所示:
我试图使用LWRP(与Chef 10)来创建我自己的部署资源,但它抛出了一个错误,我还没有能够在文档中找到任何示例。
我的资源文件看起来像这样:
actions :install
attribute :package_name, :kind_of => String, :name_attribute => true
attribute :app_name, :kind_of => String
attribute :cmd_prefix, :kind_of => String, :default => ''
attribute :deploy_tag, :kind_of => String
attribute :wsgi_stat_port, :kind_of => Fixnum
当我尝试使用此资源时,我得到以下错误:
NoMethodError
-------------
undefined method `deploy_tag' for nil:NilClass
Cookbook Trace:
---------------
/var/cache/chef/cookbooks/dpn_python_common/providers/app.rb:59:in `class_from_file'
/var/cache/chef/cookbooks/dpn_python_common/providers/app.rb:57:in `class_from_file'
,其中跟踪中引用的提供程序文件块如下所示:
git DEPLOY_PATH do
repository repo_url
reference @new_resource.deploy_tag
user 'root'
group 'root'
end
我试着打印出@new_resource.deploy_tag
,它包含了我所期望的值,所以我认为git资源只是不能从LWRP内正常工作,但我没能找到任何文档指出我应该如何调用这个东西。有什么建议吗?
实际回答:我显然需要在使用资源块之前创建一个局部变量,如下所示:
deploy_tag = @new_resource.deploy_tag
git DEPLOY_PATH do
repository repo_url
reference deploy_tag
user 'root'
group 'root'
end
资源上的块已经在资源对象上下文中计算过了。把它改成deploy_tag