2012-12-13 53 views
2

我试图创建一个服务提供商supervisord“的提供者定义的无命令服务”。 我既不是Ruby的程序员也没有我所创建的其中之一前,该文档或者是可怕的或难以找到或不是那种提供商,我试图创造。创建一个傀儡包供应商 -

该提供源是在这里:

/lib/puppet/provider/service/supervisor/supervisor.rb

当我运行傀儡代理,我上logstash服务我命名“监督员”的提供商此错误:

err: /Service[logstash]/ensure: change from false to running failed: No command service defined for provider 

那么,我做错了什么?另外,如果您在该提供商中发现其他任何东西,请告诉我!另外,如果您知道任何文档/博客文章/无论是实际描述界面以及如何正确创建这些内容之一,请分享。我很难找到与创建提供者有关的任何东西,更不用说服务提供者。

回答

3

问题是对command(:service)的引用,例如,

def startcmd 
    [command(:service), "start", @resource[:name]] 
end 

这会在提供程序中寻找一个名为“service”的预定义命令,因此会出现错误。你有两个定义的命令:

commands :supervisord => "/usr/bin/supervisord", 
     :supervisorctl => "/usr/bin/supervisorctl" 

所以在restartcmd,startcmd和stopcmd你引用应更改为command(:supervisorctl) - 假设这是那会让你启动/停止命令。

顶部的commands行会导致Puppet只使用提供者(如果这些提供者在主机上都可用)。然后command(:name)呼叫越来越完整路径,对他们当它开始/停止/重新启动该服务您传回完整的命令,为base服务提供商运行参数。

该文档没有详细介绍您在此处遇到的帮助程序方法,如commands。我建议您阅读custom typesproviders页面,再加上Richard Crowley的Extending Puppet slides。 2012年底还有两本Puppet Labs员工的书:Puppet Types and Providers

您还遇到的问题是您的提供商正在扩展base服务提供商 - 这是正确的做法,但它期望衍生工具以特定方式工作(例如* cmd方法)。新的类型和提供者可以更简单。

+0

我几乎完全肯定这是什么导致它。我甚至没有注意到它仍然在那里。我以另一家提供商为基础,所以我一定是把这件事遗漏了。谢谢!看起来我应该把它改成命令(:supervisorctl),然后。 –