ruby - 创建 puppet 包提供程序 - "No command service defined for provider"

标签 ruby puppet supervisord

我正在尝试为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 typesproviders页,加上理查德·克劳利的 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/

相关文章:

celery - 从 Supervisor 停止 Celery 工作时出现 WorkerLostError

ruby-on-rails - Ruby on Rails 中的 Jasper 报告

ruby-on-rails - Rails STI Controller

ruby-on-rails - 如何创建一个带有参数的 Rails 4 关注点

puppet - 无法找到我的 puppet 模块

installation - Puppet:无法加载此类文件 -- semantic_puppet

ruby - 从任务中访问 Rake 任务描述

windows - 通过 puppet 模块导入注册表文件的静默方式

php - 使用 Supervisor 或 pm2 保持 Laravel echo 服务器的事件

docker supervisord cron 工作不工作