# $Id: supervise.pp 1250 2009-12-09 01:43:27Z monachus $
class global::supervise {
# This can be overridden in a client config
$service_dir = "/service"
# === Overview
# This sets up the daemontools environment according to our needs. We
# link from /service to directories in /etc/service.d.
#
# === Variables
# None
#
# === Usage
# To set up a default daemontools environment, simply call:
#
# daemontools { $fqdn: }
#
define supervise() {
# Install daemontools and keep it current
os::package { "daemontools":
ensure => latest,
}
# Don't enable svscan because we run it out of inittab
service { "svscan":
enable => false,
running => false,
}
# Make sure our directory is in place
file { $service:
ensure => directory,
require => Package["daemontools"],
}
# Make sure our target directory is in place
file { "/etc/service.d":
ensure => directory,
mode => 0644,
require => Package["daemontools"],
}
}
# === Overview
# This will create a link from <tt>/etc/service.d/something</tt> to
# <tt>/service/something</tt>. We force the user to specify the
# full path to +target+ in case it's not in <tt>/etc/service.d</tt>.
#
# Once this link is made, the service will come up, so call this
# after you call <tt>setup_env</tt> below.
#
# === Variables
# +target+:: Target for symlink []
#
# === Usage
# To create a link to a service "tinydns" use the following:
#
# link { "tinydns":
# target => "/etc/service.d/tinydns",
# }
#
define link( $target ) {
file { "service-${name}":
path => "${service}/${name}",
ensure => $target,
require => Service["svscan"],
}
}
# === Overview
# This will create a full daemontools directory from puppet sources. It pulls
# the source directory in its entirety from the specified source location.
#
# If the title has <tt>::</tt> in it, then those are broken out into <tt>/</tt>
# to designate a location.
#
# === Variables
# +user+:: Owner of the directory [+root+]
# +group+:: Group owner of the directory [<tt>$rootgroup</tt>]
# +log+:: If we're using multilog to write to <tt>/var/log/service</tt> [+false+]
# +svcdir+:: Target service directory [<tt>/etc/service.d</tt>]
#
# === Usage
# To set up an environment for "tinydns" with defaults:
#
# setup_env { "tinydns":
# log => true,
# user => "tinydns",
# }
#
# A more complicated example that gets its content from <tt>modules/arces/ldap/server/service.d</tt>
# and writes it out as <tt>/etc/service.d/slapd</tt>
#
# setup_env { "arces::ldap::server":
# name => "slapd",
# }
define setup_env( $user="root", $group=$rootgroup, log=false, $svcdir="/etc/service.d" ) {
# turn :: into /
$location = regsubst( $title, '::', '/' )
# set up our log destination
if( $log ) {
file { "/var/log/${name}":
ensure => directory,
owner => $user,
group => $group,
mode => 0640,
}
} else {
file { "/var/log/${name}":
ensure => absent,
}
}
# Bring over our service.d content and make sure it sticks
file { "svcdir_${name}":
path => "${svcdir}/${name}",
ensure => directory,
mode => 0640,
source => [
"puppet:///${client}/${location}/service.d.${hostname}",
"puppet:///${client}/${location}/service.d.${cluster}",
"puppet:///${client}/${location}/service.d",
"puppet:///global/${location}/service.d",
],
recurse => true,
force => true,
purge => true,
ignore => ["supervise"],
}
}
}