创建一个puppet包提供者 - “没有为提供者定义命令服务”

时间:2012-12-13 02:43:03

标签: ruby puppet supervisord

我正在尝试为supervisord创建服务提供商。 我既不是Ruby程序员,也不是之前创建过其中的一个,而且文档要么很难找,要么难以找到我想要创建的提供程序。

此提供商的来源是:

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

当我运行puppet代理时,我在logstash服务上遇到此错误,我将其命名为“supervisor”作为提供者:

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

那么,我做错了什么?此外,如果您在该提供商中发现任何其他时髦的内容,请与我们联系!

此外,如果您知道任何文档/博客文章/实际描述界面的内容以及如何正确创建其中一项,请分享。我很难找到与创建提供商有关的任何事情,更不用说服务提供商了。

1 个答案:

答案 0 :(得分: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方法)。新类型和提供者可以更简单。