Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 为包装好的烹饪书添加提供者或扩展LWRP_Ruby_Import_Chef Infra_Lwrp - Fatal编程技术网

Ruby 为包装好的烹饪书添加提供者或扩展LWRP

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'

(很抱歉,我只能发布两个以上的链接。) 我正在尝试添加一个提供者到一个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'

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
)