# $Id$ class puppet ($ensure="present", $norunifloggedin=false, $daemonize=true, $run_hour="*/1", $run_minute="10" ){ $puppet_service = $kernel ? { "Darwin" => "org.macports.puppet", "FreeBSD" => "puppetd", default => "puppet" } $factpath="/var/lib/puppet/lib/facter" case $kernel { "Linux": { $puppetpkgs = ["puppet","puppet-common"] Package { provider => "apt" } #Package["puppet-common"]{ before => Package["puppet"] } } default: { $puppetpkgs = "puppet" } } $puppet_linuxversion_real = $PUPPET_VERSION_LINUX ? { "" => "latest", default => $PUPPET_VERSION_LINUX, } # case $kernel { # "Linux": { # exec{"apt-get install -y puppet=$PUPPET_VERSION_LINUX puppet-common=${PUPPET_VERSION_LINUX}": # onlyif => "apt-show-versions -a puppet |tail -1 |grep -q upgradeable", # } # } # default: { package{$puppetpkgs: ensure => $ensure ? { "present" => $kernel ? { "Linux" => $puppet_linuxversion_real, default => $ensure, } }, notify => Service["${puppet_service}"], } # } # } package{["facter"]: ensure => "${ensure}", } service { "${puppet_service}": hasstatus => true, enable => "${daemonize}", ensure => "${daemonize}", } $cron_real = $daemonize ? { false => "present", true => "absent", default => $ensure, } notice("${fqdn} PUPPET-CRON: cron_real: ${cron_real}, daemonize: ${daemonize}, running: ${service_running}") cron { puppetrun: command => "/usr/local/sbin/puppetd_run.sh", user => root, minute => $run_minute, hour => $run_hour, ensure => "${cron_real}", } $maxsleep = 6400 file{"/usr/local/sbin/puppetd_run.sh": content => template("puppet/puppetd_run.sh.erb"), mode => 0700, alias => "puppetd_run.sh", ensure => "${ensure}", } case $kernel { "Darwin": { file{"/Library/LaunchDaemons/org.macports.puppet.plist": source => "puppet:///modules/puppet/org.macports.puppet.plist", before => Service["${puppet_service}"], } file{"/opt/local/lib/ruby/site_ruby/1.8/puppet/provider/package/appdmg.rb": ensure => "absent", } } "Linux": { replace {"enable_puppet": file => "/etc/default/puppet", pattern => "START=no", replacement => "START=yes", before => Service["${puppet_service}"], } monit::process{"puppet": start => "/etc/init.d/puppet start", stop => "/etc/init.d/puppet stop", pidfile => "/var/run/puppet/agent.pid", additional => "if totalmem > 400 Mb for 10 cycles then RESTART", ensure => $daemonize ? { "true" => "present", default => "absent", }, } } } $puppet_user = $operatingsystem ? { "Darwin" => $adm, default => "puppet", } $puppet_group = $operatingsystem ? { "Darwin" => "wheel", default => "puppet", } #"FreeBSD" => "/usr/local/etc/puppet/puppet.conf", $puppetconf = $operatingsystem ? { default => "/etc/puppet/puppet.conf", } file{$puppetconf: content => template("puppet/puppet.conf.erb"), mode => 0644, owner => $puppet_user, ensure => "${ensure}", # require => [ Package["puppet"] ], } #add facter variable to custom facts. file{"/etc/profile.d/puppet.sh": content => "export FACTERLIB=\"${factpath}\"\n", ensure => $ensure, } } @@puppet::puppetmaster::privatedir{ $fqdn : l_fqdn => generate('/usr/bin/env', 'perl', '-e', '$_=shift;tr/[A-Z]/[a-z]/;print $_',"$fqdn") } class puppet::puppet-dashboard ($ensure="present") { package{["libjson-ruby","puppet-dashboard"]: ensure => $ensure, require => Apt::Repository["puppet-dashboard"], } apt::repository{"puppet-dashboard": key => "8347A27F", repository => "deb http://apt.puppetlabs.com/ubuntu lucid main\ndeb-src http://apt.puppetlabs.com/ubuntu lucid main\n", ensure => $ensure, } cron {"purge-reports": command => "cd /usr/share/puppet-dashboard && rake RAILS_ENV=production reports:prune upto=14 unit=day", user => "www-data", hour => "23", minute => "2", monthday => "*/14", ensure => $ensure, } cron {"purge-optimizedb": command => "cd /usr/share/puppet-dashboard && rake RAILS_ENV=production db:raw:optimize", user => "www-data", hour => "23", minute => "20", monthday => "*/10", ensure => $ensure, } } class puppet::puppetmaster ($ensure="present") { class{"activemq": ensure => $ensure } package{"libnet-arp-perl": ensure => $ensure } Ganglia::Gmetric::Cron { source => "puppet/ganglia", ensure => "${ensure}", } ganglia::gmetric::cron{"puppetmaster.rb": runwhen => "5", } ganglia::gmetric::cron{"puppetmaster_compiletime.rb": runwhen => "60", } service{"stompserver": ensure => false, enable => false, before => Class["activemq"], } service{"puppetqd": ensure => running, pattern => "puppet queue queue", enable => true, } ### remove disk reports from time to time tidy{"${puppet_vardir}/reports": age => "1d", recurse => true, backup => false, } # create [private] directories file { $puppet_privdir: ensure => directory } Puppet::Puppetmaster::Privatedir <<| |>> } import "defines/*.pp"