2012-12-13 52 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),然後。 –