Ruby 为包装好的烹饪书添加提供者或扩展LWRP
(很抱歉,我只能发布两个以上的链接。) 我正在尝试添加一个提供者到一个cookbook,该cookbook封装了另一个包含LWRP的cookbooks 包装好的食谱是poise Python supervisor: [github.com/pose/supervisor.git][1] 我正在使用Berkself指示Chef导入它:Ruby 为包装好的烹饪书添加提供者或扩展LWRP,ruby,import,chef-infra,lwrp,Ruby,Import,Chef Infra,Lwrp,(很抱歉,我只能发布两个以上的链接。) 我正在尝试添加一个提供者到一个cookbook,该cookbook封装了另一个包含LWRP的cookbooks 包装好的食谱是poise Python supervisor: [github.com/pose/supervisor.git][1] 我正在使用Berkself指示Chef导入它: source "...api.berkshelf.com" source '....<my chef/berkshelf server>:26200'
source "...api.berkshelf.com"
source '....<my chef/berkshelf server>:26200'
cookbook 'supervisor', github: "poise/supervisor"
metadata
…我希望通过“新”操作向其中一个supervisors资源添加一个提供者
以下是“导入的”提供程序:
[github.com/pose/supervisor/blob/master/providers/service.rb][1]
我希望添加另一个名为action“reload”的提供程序,它最终将调用supervisorctl REREREAD
我试过很多例子,但都不走运:
来自gitHub:chef_extend_lwrp
我试过docs.chef.io lwrp\u自定义\u提供者\u ruby
和neethack.com/2013/10/understand-chef-lwrp-heavy-version/
并试图模仿Seth Vargo的答案和例子:
github.com/opscodecookbooks/jenkins/blob/8a2fae71cd994704b09924e9a14b70b9093963a3/libraries/credentials_password.rb
以及:
github.com/pose/supervisor/blob/master/providers/service.rb
github.com/pose/supervisor.git
但Chef似乎没有正确导入代码:
ERROR: undefined method `action' for Chef::Resource::SupervisorServices:Class
当我以以下方式写入库导入时:
(我的启用服务已定义,但我已将其从本示例中删除)
def为什么受支持?
真的
结束
班主任
类资源::MySupervisorService
我的食谱名字是:“我的导师”,我的图书馆文件是“service.rb”
我也尝试过stackoverflow的许多答案,但我无法将其发布在这里,因为我缺乏声誉积分:(
我看过很多赛斯·瓦戈的参考资料,我希望他能看到我的问题;)好吧,玩了一会儿(听起来很有趣),我明白这里出了什么问题 引用文件: 首先加载库,以确保所有语言扩展和 所有资源都可以使用Ruby类。接下来,属性是 加载,然后是轻量级资源,然后是所有定义 (以确保定义中的任何伪资源 可用)
cookbook/libraries
下的文件在lwrp类构建之前加载,这就是为什么您最终会得到一个未知的方法,当my_supervisor中的库被编译时,SupervisorService类还没有加载,所以您最终会得到一个简单的对象,它不知道actions方法
我能想到的最好的解决方法是管理配方中的案例,根据您的操作调用执行资源或lwrp
如果您真的认为这应该是主管操作的一部分,请克隆cookbook repo,添加操作并提出请求。我也尝试过这些引用,但没有成功。我一定错过了什么…为什么不提出一个请求来增加功能呢?coderanger保留着那本食谱,并且对写得很好的拉取请求反应非常迅速。我刚刚和他谈过,可能是:)干杯。谢谢你的快速回复!!那么,你是在告诉我在我的库代码中使用此代码吗?你可以尝试一下,我不确定它是否会起作用,但不会造成太大的伤害。谢谢!我现在正在尝试,将公布结果。你真的帮了大忙:)@Ketzi我回顾了这一切,很抱歉可能不是你想要的答案是的。谢谢你。这个结论对我来说确实很重要。我现在有一个后续问题,我们必须在另一个范围内参与;)干杯
ERROR: undefined method `action' for Chef::Resource::SupervisorServices:Class
def whyrun_supported?
true
end
class Chef
class Resource::MyupervisorService < Resource::SupervisorService
provides :my_supervisor_service
actions :reload
@resource_name = :my_supervisor_service
end
end
class Chef
class Provider::MyupervisorService < Provider::SupervisorService
action :reload do
converge_by("Enabling #{ new_resource }") do
my_enable_service
end
end
end
end
Chef::Platform.set(
resource: :my_supervisor_service,
provider: Chef::Provider::MyupervisorService
)