2014-07-17 (Thu)
daemontoolsなserviceをハンドリングするための Chef::Provider::Service::Daemontools を書いてみました
Chefでdaemontools配下のサービスをハンドリングするときは、コミュニティクックブックの daemontools を使ってる人が多いと思います。
- https://supermarket.getchef.com/cookbooks/daemontools
- https://github.com/opscode-cookbooks/daemontools
こんな感じで。
daemontools_service "tinydns-internal" do directory "/etc/djbdns/tinydns-internal" template false action [:enable,:start] end
notification も送れます。
template '...' do ... notifies :restart, 'daemontools_service[tinydns-internal]' end
自分もこれを使おうと思ったのですが、いくつか不満点がありました
- serviceとdaemontools_serviceの両対応のレシピを書く場合、
- service と daemontools_service とでほぼ同じ記述をしないといけない
- notifies を送る側でも service か daemontools_service か意識しないといけない
- action :stop で svc -p (SIGSTOP) している
- なんで svc -d (SIGTERM) じゃないんでしょうか。。。
- サービスのハンドリングだけしたいので、daemontools のインストールとかは別に要らない
- 依存で ucspi-tcp もインストールされるが使ってないので要らない
- RedHat系だと "daemontools" という名前のパッケージを入れようとするが、(内部のyum reposにある)"daemontools-toaster" を入れたい
- attribute によるパッケージ名の変更はできない
- run ファイルの生成機能は別に要らない(あっても使わなければいいだけだけど)
ので、service リソース (http://docs.opscode.com/resource_service.html) の provider として指定可能な Chef::Provider::Service::Daemontools を書いてみました。
パスの通った適切な階層 (どこか/chef/provider/service/daemontools.rb) に置けばこんな感じで使えます。(gem化してgem installした方がいいんでしょうかね?)
require 'chef/provider/service/daemontools' template '...' do ... notifies :restart, 'service[oreno-daemon]' end service 'oreno-daemon' do provider Chef::Provider::Service::Daemontools service_dir '/service' directory '/usr/oreno/daemon/oreno-daemon' supports :restart => true, :reload => true action [:enable, :start] end
- provider: 「provider Chef::Provider::Service::Daemontools」は必須です
- service_dir: svscanが監視しているディレクトリです。この下にsymlinkが作られます。デフォルトは /service です
- directory: symlinkが指すrunファイル等があるディレクトリです。デフォルトは /usr/oreno/daemon/#{service_name} です
notifies でも既存の service と同じように 「service[oreno-daemon]」 と指定できるのがミソです。
Special thanks!
daemontools.rb を書くにあたり、ルビーカの低い自分を @niku4i さんと @sonots さんに助けていただきました! あざっっっっっっっっっっっっっす!!!
2003 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 05 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 12 |
2012 | 01 | 02 | 03 | 06 | 08 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 05 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 12 |
2012 | 01 | 02 | 03 | 06 | 08 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 |