Chef infra 在自定义食谱中找不到LWRP
我正在构建一个cookbook,它安装我的节点js文件,然后为它们设置initd脚本。不幸的是,我不能调用烹饪书中的非默认LWRPChef infra 在自定义食谱中找不到LWRP,chef-infra,cookbook,Chef Infra,Cookbook,我正在构建一个cookbook,它安装我的节点js文件,然后为它们设置initd脚本。不幸的是,我不能调用烹饪书中的非默认LWRP blah@blah:~/chef-repo/cookbooks/blah-deploy$ ls resources/ default.rb blahNodeAsService.rb blah@blah:~/chef-repo/cookbooks/blah-deploy$ cat resources/blahNodeAsService.rb actions :i
blah@blah:~/chef-repo/cookbooks/blah-deploy$ ls resources/
default.rb blahNodeAsService.rb
blah@blah:~/chef-repo/cookbooks/blah-deploy$ cat resources/blahNodeAsService.rb
actions :install
default_action :install if defined?(default_action)
attribute :script, :kind_of => String, :required => true
attribute :directory, :kind_of => String, :required => true
attribute :resource_name, :kind_of => String, :required => true
blah@blah:~/chef-repo/cookbooks/blah-deploy$ cat providers/blahNodeAsService.rb
use_inline_resources
action :install do
converge_by("Installing.") do
resp = setUpService
@new_resource.updated_by_last_action(resp)
end
end
def load_current_resource
@current_resource = Chef::Resource::BlahNodeAsService.new(@new_resource.name)
@current_resource.directory(@new_resource.directory)
@current_resource.script(@new_resource.script)
@current_resource.resource_name(@new_resource.resource_name)
end
def setUpService
end
以下是来自chef客户端运行的错误:
26>> blah_node_as_service 'setting up pricing service' do
27: directory '/var/blah/blah-pricing/'
28: script 'pricing-http-server-cluster.js'
29: resource_name 'blah-pricing'
30: end
31:
Running handlers:
[2015-06-05T14:57:40-04:00] ERROR: Running exception handlers
Running handlers complete
[2015-06-05T14:57:40-04:00] ERROR: Exception handlers complete
[2015-06-05T14:57:40-04:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
Chef Client failed. 0 resources updated in 1.961443247 seconds
[2015-06-05T14:57:40-04:00] ERROR: No resource or method named `frt_node_as_service' for `Chef::Recipe "default"'
[2015-06-05T14:57:40-04:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
以下是食谱中的关键文件
blah@blah:~/chef-repo/cookbooks/blah-deploy$ ls resources/
default.rb blahNodeAsService.rb
blah@blah:~/chef-repo/cookbooks/blah-deploy$ cat resources/blahNodeAsService.rb
actions :install
default_action :install if defined?(default_action)
attribute :script, :kind_of => String, :required => true
attribute :directory, :kind_of => String, :required => true
attribute :resource_name, :kind_of => String, :required => true
blah@blah:~/chef-repo/cookbooks/blah-deploy$ cat providers/blahNodeAsService.rb
use_inline_resources
action :install do
converge_by("Installing.") do
resp = setUpService
@new_resource.updated_by_last_action(resp)
end
end
def load_current_resource
@current_resource = Chef::Resource::BlahNodeAsService.new(@new_resource.name)
@current_resource.directory(@new_resource.directory)
@current_resource.script(@new_resource.script)
@current_resource.resource_name(@new_resource.resource_name)
end
def setUpService
end
cookbook已经包含在服务的cookbook中,该cookbook中的默认LWRP(default.rb)工作正常。这是找不到的第二个LWRP
谢谢事实证明,您通过使用cookbook名称和LWRP资源名称的组合来引用LWRP:
<cookbook-name>_<resource-name>
因此,看起来我应该给它起个更好的名字,但它至少可以工作。您可以将资源作为HWRP输入,并使用LWRP输入提供程序。这允许您绕过自动的cookbook名称前缀,并且仍然具有LWRP提供者的优点。来自《定制厨师》这本好书的例子:+感谢您的确认,它帮助我了解了下一个问题,即为什么它不起作用!