我写了几本LWRP烹饪书来安装和管理一些服务(Monit和Omnicheck)。它们提供的功能之一是您提供将与模板或cookbook_file资源一起使用的文件。
我发现当我调用其中任何一种资源时,我必须提供“cookbook new_resource.cookbook”,让它查看给定文件的调用食谱而不是LWRP的食谱。
这一切都很好,直到显然调用嵌套为止。在这种情况下,如果您使用Omnicheck LWRP设置新实例并选择通过Monit运行它,它将通过Monit LWRP为您更新Monit。这适用于作为LWRP烹饪书的一部分创建的默认Omnicheck作业,但是当我尝试从另一本食谱创建新的Omnicheck作业时,Monit LWRP正在窒息并抱怨无法找到模板资源的文件
问题是有问题的模板文件是在Omnicheck食谱中,但是Monit LWRP中的new_resource.cookbook正在评估顶级食谱而不是Omnicheck食谱。
所以路径如下:
申请 - > Omnicheck - > monit的
在Monit LWRP的这个例子中,new_resource.cookbook值是“application”而不是“Omnicheck”。
由于看起来new_resource.cookbook不是我需要/想要的,我如何确定LWRP来电者的食谱?
相关错误类似于:
[2014-08-21T00:46:15+00:00] ERROR: my_omnicheck_service[chef] (application::default line 30) had an error: Chef::Exceptions::FileNotFound: template[/some/path/omnicheck/etc/stage/chef.conf] (/var/chef/cache/cookbooks/my_omnicheck/providers/service.rb line 10) had an error: Chef::Exceptions::FileNotFound: Cookbook 'application' (0.1.5) does not contain a file at any of these locations:
templates/centos-5.8/omnicheck.erb
templates/centos/omnicheck.erb
templates/default/omnicheck.erb
答案 0 :(得分:0)
我不是很喜欢这个,我希望有人知道更好的解决问题的方法,但我发现我可以查询new_resource.source_line以获取我之后的信息:
callingCookbook = new_resource.cookbook_name
if (new_resource.source_line =~ /\/cookbooks\/([^\/]+)\//) then
callingCookbook = $1
end
然后我可以使用callCookbook,我之前使用的是new_resource.cookbook_name。