diff options
-rw-r--r-- | README.rdoc | 22 | ||||
-rw-r--r-- | manifests/service.pp | 27 | ||||
-rw-r--r-- | templates/finish.erb | 3 |
3 files changed, 49 insertions, 3 deletions
diff --git a/README.rdoc b/README.rdoc new file mode 100644 index 0000000..559c3d2 --- /dev/null +++ b/README.rdoc @@ -0,0 +1,22 @@ += README +Author:: Markus Strauss (mailto:markus@itstrauss.eu) +Version:: 0.1, 2011-10-27 + +This is a very basic module to manage the runit[http://smarden.org/runit/] service supervisor. + +== Example Usage + + class { 'runit': } + + # define a environment variable, placed under /etc/sv/diaspora_worker/env/QUEUE + runit::env { 'QUEUE': service => 'diaspora_worker' } + + # define a service unter /etc/sv/diaspora_worker + runit::service { "diaspora_worker": + user => diaspora, # service user and group + group => diaspora, + rundir => '/var/rails/diaspora', # service run directory + command => 'bundle exec rake resque:work', # command to start the service + enable => true, # enabling the service by + # linking it to /etc/services/ + } diff --git a/manifests/service.pp b/manifests/service.pp index 54b10ad..85a7ec5 100644 --- a/manifests/service.pp +++ b/manifests/service.pp @@ -3,20 +3,32 @@ define runit::service ( $group = root, # the service's group name $enable = true, # shall the service be linked to /etc/service $ensure = present, # shall the service be present in /etc/sv - # either one of these three must be declared - it defines the content of the run script /etc/sv/$name/run + # start command - either one of these three must be declared - it defines the content of the run script /etc/sv/$name/run $command = undef, # the most simple way; just state command here - it may not daemonize itself, # but rather stay in the foreground; all output is logged automatically to $logdir/current # this uses a default template which provides logging $source = undef, # specify a source file on your puppet master $content = undef, # specify the content directly (mostly via 'template') + # finish command - defines the content of the finish script /etc/sv/$name/finish + $finish_command = '', + $finish_source = undef, + $finish_content = undef, # service directory - this is required if you use 'command' $rundir = undef, # logging stuff $logger = true, # shall we setup an logging service; if you use 'command' before, # all output from command will be logged automatically to $logdir/current - $logdir = "${rundir}/log", + $_logdir = undef, $timeout = 7 # service restart/stop timeouts (only relevant for 'enabled' services) ) { + + # using the following construct, because '$logdir = "${rundir}/log"' in the + # define statement produces compilation warnings + if $_logdir == undef { + $logdir = "${rundir}/log" + } else { + $logdir = $_logdir + } # FixMe: Validate parameters # fail("Only one of 'command', 'content', or 'source' parameters is allowed") @@ -57,8 +69,17 @@ define runit::service ( ensure => $ensure, mode => 755, ; + "${svbase}/finish": + content => $finish_content ? { + undef => template('runit/finish.erb'), + default => $finish_content, + }, + source => $finish_source, + ensure => $ensure, + mode => 755, + ; } - + # eventually enabling/disabling the service if $enable == true { debug( "Service ${name}: ${_ensure_enabled}" ) diff --git a/templates/finish.erb b/templates/finish.erb new file mode 100644 index 0000000..787a174 --- /dev/null +++ b/templates/finish.erb @@ -0,0 +1,3 @@ +#!/bin/bash +echo "Stopping <%= name %>" +<%= finish_command %> |