2012-12-13 1 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 행은 퍼핏이 호스트에서 사용할 수있는 경우에만 퍼핏을 사용하게됩니다. 그러면 command(:name) 호출에 전체 경로가 전달되고 서비스를 시작/중지/다시 시작할 때 base 서비스 공급자에 대한 전체 명령과 인수가 실행됩니다.

도우미는 여기에오고있는 commands과 같은 도우미 메서드에 대해서는 자세히 설명하지 않습니다. custom typesproviders 페이지를 모두 읽으면서 Richard Crowley의 Extending Puppet slides 페이지를 읽어 보시기 바랍니다. 두 명의 인형극 직원 인 2012 년 말에 Puppet Types and Providers 명의 직원에게 책이 제공 될 예정입니다.

당신은 또한 공급자가 base 서비스 제공 업체를 확장하고 있다는 점을 알고 있습니다. 이는 옳은 일이지만 파생 상품이 특정 방식으로 작동 할 것으로 기대합니다 (예 : * cmd 메소드). 새로운 유형과 공급자는 더 간단 할 수 있습니다.

+0

저는 이것이 이것이 그 원인이라고 확신합니다. 나는 그것이 아직 거기에 있다는 것을 알아 차리지 못했다. 나는 다른 공급자를 기초로 사용하고 있었기 때문에 우연히 그 물건을 놓아 뒀을 것입니다. 감사! 그렇다면 명령 (: supervisorctl)을 변경해야합니다. –