Newer
Older
# Manage a service using daemontools.
#
# Example using a file resource for the run script:
#
# base::daemontools::supervise { 'postfix-k5':
# ensure => present,
# source => 'puppet:///modules/s_mailman/service/postfix-k5/run',
# }
#
# Example using a template for the run script and enabling logging:
#
# base::daemontools::supervise { 'signal':
# ensure => present,
# content => template('base/s_ldap/signal-run.erb'),
# logging => '/var/log/signal',
# logging_mode => '0755',
# }
$ensure = 'present',
$source = undef,
$content = undef,
$logging = '',
$logging_mode = '0750'
$svcdir = "/service/${name}"
$run = "/service/${name}/run"
if ($source == undef) and ($content == undef) and ($ensure == 'present') {
fail('source or content required')
}
if ($source != undef) and ($content != undef) {
fail('Specify source or content but not both')
}
case $ensure {
# Stop the service. We have to first move the service directory aside so
# that svscan doesn't just restart it, then stop the service and the
# supervise process, and finally delete the directory.
absent: {
exec { "remove ${svcdir}":
command => "mv ${svcdir} /service/.${name} && svc -dx /service/.${name} && (if [ -d /service/.${name}/log ] ; then svc -dx /service/.${name}/log ; fi) && rm -rf /service/.${name}",
onlyif => "[ -d ${svcdir} ]",
}
}
# Create the service.
present: {
include base::daemontools
file { $svcdir:
ensure => directory,
mode => $logging ? { '' => '0755', default => '01755' }
}
file { $run:
source => $source,
content => $content,
mode => '0755',
notify => Exec["svc -u ${svcdir}"],
}
# Configure logging if desired.
if $logging != '' {
file {
"${svcdir}/log":
ensure => directory,
mode => 755;
$logging:
ensure => directory,
mode => $logging_mode;
"$svcdir/log/run":
content => template('base/daemontools/log-run.erb'),
mode => '0755';
# Catch all other ensure options.
default: {
fail("Invalid ensure value: ${ensure}")
}
# Start the service.
exec { "svc -u ${svcdir}":
command => "svc -u ${svcdir}",
refreshonly => true,
}
}