我正在尝试为supervisord创建服务提供者。 我既不是 Ruby 程序员,也没有创建过其中之一,而且文档要么很糟糕,要么很难找到,要么不是关于我试图创建的那种 Provider。
该提供程序的来源在这里:
/lib/puppet/provider/service/supervisor/supervisor.rb
当我运行 puppet 代理时,我在名为“supervisor”作为提供程序的 Logstash 服务上收到此错误:
err: /Service[logstash]/ensure: change from false to running failed: No command service defined for provider
那么,我做错了什么?另外,如果您在该提供商中发现任何其他奇怪的内容,请告诉我!
此外,如果您知道任何实际描述界面的文档/博客文章/任何内容以及如何正确创建其中之一,请分享。我很难找到与创建提供程序相关的任何内容,更不用说服务提供程序了。
最佳答案
问题是对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 types和 providers页,加上理查德·克劳利的 Extending Puppet slides 。还有一本书将于 2012 年底由两名 Puppet Labs 员工出版:Puppet Types and Providers .
您还遇到的问题是您的提供商正在扩展base
服务提供商 - 这是正确的做法,但它期望衍生品以特定方式工作(例如 *cmd方法)。新类型和提供者可以更简单。
关于ruby - 创建 puppet 包提供程序 - "No command service defined for provider",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13852109/