# $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"], } } }
