2

監視対象のサービスプロバイダーを作成しようとしています。私はRubyプログラマーではなく、これまでにこれらの1つを作成したこともありません。ドキュメントは、作成しようとしているプロバイダーの種類について、ひどいまたは見つけるのが難しいか、そうではありません。

このプロバイダーのソースは次のとおりです。

/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 

だから、私は何が間違っているのですか?また、そのプロバイダーで他にファンキーなものを見つけた場合は、私に知らせてください!

また、インターフェースを実際に説明しているドキュメント/ブログ投稿/何か、およびこれらのいずれかを適切に作成する方法を知っている場合は、共有してください。サービスプロバイダーは言うまでもなく、プロバイダーの作成に関連するものの多くを見つけるのに苦労しました。

4

1 に答える 1

3

問題は、への参照ですcommand(:service)

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

これは、「サービス」と呼ばれるプロバイダーで事前定義されたコマンドを検索するため、エラーが発生します。2 つの定義済みコマンドがあります。

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

したがって、restartcmd、startcmd、および stopcmd の参照は、command(:supervisorctl)開始/停止できるコマンドであると仮定して、に変更する必要があります。

上部のcommands行により、Puppet はプロバイダーがすべてホストで利用可能な場合にのみプロバイダーを使用します。次に、呼び出しはそれらへの完全なパスを取得し、サービスの開始/停止/再起動時にサービスプロバイダーが実行するcommand(:name)完全なコマンドと引数を返します。base

ドキュメントでは、commandsここで遭遇するようなヘルパー メソッドについて詳しく説明していません。カスタム タイププロバイダーの両方のページに加えて、Richard Crowley のExtending Puppet スライドを読むことをお勧めします。2012 年末には、Puppet Labs の 2 人の従業員による本も出版される予定です: Puppet Types and Providers .

また、プロバイダーがサービスプロバイダーを拡張していることにも遭遇しています。baseこれは正しいことですが、派生物が特定の方法で機能することを期待しています (*cmd メソッドなど)。新しい型とプロバイダーは、より単純になります。

于 2012-12-13T08:34:40.253 に答える