diff options
-rw-r--r-- | README | 51 | ||||
-rw-r--r-- | files/master/config.ru | 30 | ||||
-rw-r--r-- | files/master/lastruncheck | 323 | ||||
-rw-r--r-- | files/master/puppet.conf | 9 | ||||
-rw-r--r-- | manifests/base.pp | 8 | ||||
-rw-r--r-- | manifests/centos.pp | 6 | ||||
-rw-r--r-- | manifests/cron.pp | 11 | ||||
-rw-r--r-- | manifests/puppetmaster/base.pp | 11 | ||||
-rw-r--r-- | manifests/puppetmaster/centos.pp | 6 | ||||
-rw-r--r-- | manifests/puppetmaster/cleanup_reports.pp | 6 | ||||
-rw-r--r-- | manifests/puppetmaster/cleanup_reports/disable.pp | 2 | ||||
-rw-r--r-- | manifests/puppetmaster/linux.pp | 2 | ||||
-rw-r--r-- | manifests/puppetmaster/package.pp | 14 | ||||
-rw-r--r-- | manifests/puppetmaster/package/base.pp | 6 | ||||
-rw-r--r-- | manifests/puppetmaster/package/debian.pp | 15 |
15 files changed, 217 insertions, 283 deletions
@@ -1,16 +1,28 @@ Puppet-Module for configuring Puppet itself, both the master and the clients ============================================================================ -Use a seperate local module called "site-puppet", where you place your customized +Use a seperate local module called "site_puppet", where you place your customized files, under: - site-puppet/files/master/fileserver.conf - site-puppet/files/master/puppet.conf + site_puppet/files/master/fileserver.conf + site_puppet/files/master/puppet.conf Usage ===== -The module currently looks for values on different variables to adjust -configuration of the master. +The module currently looks for different variable values to adjust configuration +of the master. + +Installing a specific versions +------------------------------ + +If you need to install a different version of puppet, other than the most recent, +you can set the following variable: + +$puppet_ensure_version = '2.7.18-1~bpo60+1' + +You can also specify a different facter version by setting the following variable: + +$facter_ensure_version = '1.6.9-2~bpo60+2' Run puppet by cron: ------------------- @@ -49,6 +61,24 @@ mode, you can set $puppetmaster_mode either to: In both cases you have to setup the appropriate frontends (apache vhost configuration/nginx vhost configuration) on your own. +If you need to install a specific version of puppetmaster, you can specify the +version to be installed by doing the following: + +$puppetmaster_ensure_version = '2.7.18-1~bpo60+1' + +NOTE: You will need the apt module in order to specify the puppetmaster version. +Also, this functionality is only implemented for Debian and derived distributions. + +This is the apparent minimum manifest for installing puppetmaster: + + import 'common' + + include apt + include concat::setup + $puppetmaster_mode = 'passenger' + include puppet::puppetmaster + + Munin ----- @@ -68,6 +98,9 @@ values: * 'X', where X is the amount of days you want to keep reports for * false, to disable reports cleanup +If your reports are in a different place than the default, you can set +$puppetmaster_reports_dir to adjust their location. + Check last run: --------------- @@ -92,7 +125,7 @@ $puppet_storeconfig_password to the puppet database password, and then set $puppetmaster_storeconfigs = true to enable stored configs. Then you will need to either put in your node definition, or in -site-puppet/manifests/init.pp puppet::puppetmaster::hasdb to setup the database +site_puppet/manifests/init.pp puppet::puppetmaster::hasdb to setup the database with the right parameters. This will setup your storeconfigs database, adding to the database the correct user, the correct grant permissions, and also setup a munin graph, if you have $use_munin = true @@ -112,14 +145,14 @@ node puppetmaster { $use_munin = true $puppetmaster_mode = 'passenger' $puppet_crontime = "0,12 * * * *" - include site-puppet::master + include site_puppet::master include puppet::cron include puppet::puppetmaster ... -in your site-puppet/manifests/master.pp you could include something like: +in your site_puppet/manifests/master.pp you could include something like: -class site-puppet::master { +class site_puppet::master { ... puppet::puppetmaster::hasdb { "puppet": dbname => 'puppetmaster', diff --git a/files/master/config.ru b/files/master/config.ru index cec2a34..b0fd250 100644 --- a/files/master/config.ru +++ b/files/master/config.ru @@ -4,26 +4,28 @@ # if puppet is not in your RUBYLIB: # $:.unshift('/opt/puppet/lib') -$0 = "puppetmasterd" -require 'puppet' - -# logs to file instead of syslog -#Puppet::Util::Log.newdestination("/var/log/puppet/puppetmasterd.log") +$0 = "master" # if you want debugging: -#ARGV << "--debug" +# ARGV << "--debug" ARGV << "--rack" -# in some setups puppetmasterd doesn't seem to read the puppet.conf -# config at startup, then you need to pass these options: -ARGV << "--vardir" << "/var/lib/puppet" -ARGV << "--ssldir" << "/var/lib/puppet/ssl" -# if you use puppet-dashboard: -#ARGV << "--reports" << "puppet_dashboard" +# NOTE: it's unfortunate that we have to use the "CommandLine" class +# here to launch the app, but it contains some initialization logic +# (such as triggering the parsing of the config file) that is very +# important. We should do something less nasty here when we've +# gotten our API and settings initialization logic cleaned up. +# +# Also note that the "$0 = master" line up near the top here is +# the magic that allows the CommandLine class to know that it's +# supposed to be running master. +# +# --cprice 2012-05-22 -require 'puppet/application/puppetmasterd' +require 'puppet/util/command_line' # we're usually running inside a Rack::Builder.new {} block, # therefore we need to call run *here*. -run Puppet::Application[:puppetmasterd].run +run Puppet::Util::CommandLine.new.execute + diff --git a/files/master/lastruncheck b/files/master/lastruncheck index d59e489..72c0eb5 100644 --- a/files/master/lastruncheck +++ b/files/master/lastruncheck @@ -1,224 +1,101 @@ -#!/usr/bin/env ruby -require 'puppet/application' - -module Puppet::Lastcheck - module Puppet::Lastcheck::Tests - def self.included(klass) - klass.extend ClassMethods - end - def self.tests - @tests ||= {} - end - module ClassMethods - def add_test(name, options={}) - include Puppet::Lastcheck::Tests.const_get(name.to_s.split('_').collect{|s| s.capitalize }.join('')) - Puppet::Lastcheck::Tests.tests[name] = options - attr_accessor "ignore_#{name}".to_sym - option("--ignore-#{name.to_s.gsub(/_/,'-')}") do - self.send("ignore_#{name}=", true) - end - end - end - module Util - def facts_hosts - return @facts_hosts if @facts_hosts - require 'puppet/indirector/facts/yaml' - @facts_hosts = Puppet::Node::Facts.indirection.search("*").collect do |fqdn| - if node = Puppet::Node::Facts.indirection.find(fqdn) - { :hostname => node.name, :expired => node.expired?, :timestamp => node.values[:_timestamp], :expiration => node.expiration } - end - end.compact - end - end - end - module Puppet::Lastcheck::Reports - def self.included(klass) - klass.extend ClassMethods - end - def ordered_reports - @ordered_reports ||= Puppet::Lastcheck::Reports.reports.keys.sort{|a,b| Puppet::Lastcheck::Reports.reports[a][:priority] <=> Puppet::Lastcheck::Reports.reports[b][:priority] } - end - - def self.reports - @reports ||= {} - end - module ClassMethods - def add_report(name, options={}) - include Puppet::Lastcheck::Reports.const_get(name.to_s.split('_').collect{|s| s.capitalize }.join('')) - Puppet::Lastcheck::Reports.reports[name] = options - Puppet::Lastcheck::Reports.reports[name][:priority] ||= 100 - attr_accessor "report_to_#{name}".to_sym - option("--report-to-#{name.to_s.gsub(/_/,'-')}") do - self.send("report_to_#{name}=", true) - end - end - end - end -end - -module Puppet::Lastcheck::Tests::NoFacts - def analyze_no_facts - signed_hosts.each{|host| add_failed_host(host,"No facts available") unless facts_hosts.any?{|fhost| fhost[:hostname] == host } } - end - def setup_no_facts - Puppet::SSL::Host.ca_location = :only - end - - private - def signed_hosts - ca.list - end - - def ca - @ca ||= Puppet::SSL::CertificateAuthority.new - end -end - -module Puppet::Lastcheck::Tests::ExpiredFacts - include Puppet::Lastcheck::Tests::Util - def analyze_expired_facts - facts_hosts.each{|host| add_failed_host(host[:hostname],"Expired at #{host[:expiration]}") if host[:expired] } - end -end -module Puppet::Lastcheck::Tests::TimedOutFacts - include Puppet::Lastcheck::Tests::Util - def analyze_timed_out_facts - require 'time' - facts_hosts.each{|host| add_failed_host(host[:hostname], "Last facts save at #{host[:timestamp]}") if Time.parse(host[:timestamp].to_s) < (Time.now - @timeout) } - end - - def setup_timed_out_facts - if @timeout - ignore_expired_facts ||= true - end - end -end -module Puppet::Lastcheck::Tests::Storedconfigs - def analyze_storedconfigs - storedconfigs_hosts.each do |host| - if !facts_hosts.any?{|fact_host| fact_host[:hostname] == host.name } - add_failed_host(host.name, "In storedconfigs but no facts available!") - elsif host.last_compile.nil? - add_failed_host(host.name, "No entry in storedconfigs") - elsif host.last_compile < (Time.now - @timeout) - add_failed_host(host.name, "Last compile time in storedconfigs at #{host.last_compile}") - end - end - end - - private - def storedconfigs_hosts - return @storedconfigs_hosts if @storedconfigs_hosts - Puppet::Rails.connect - @storedconfigs_hosts = Puppet::Rails::Host.all - end -end -module Puppet::Lastcheck::Reports::Console - def deliver_report_to_console(failing_hosts) - unless failing_hosts.empty? - puts 'The following hosts are out of date:' - puts '------------------------------------' - host_length = 0 - failing_hosts.keys.each{|host| host_length = host.length if host.length > host_length } - failing_hosts.keys.each{ |host| puts "#{pretty_puts(host,host_length)} - Reason: #{failing_hosts[host][:reason]}" } - 1 - else - 0 - end - end -end -module Puppet::Lastcheck::Reports::Nagios - def deliver_report_to_nagios(failing_hosts) - unless failing_hosts.empty? - puts "PUPPETLAST CRITICAL: #{failing_hosts.size} outdated hosts: #{failing_hosts.keys.join(',')}" - 2 - else - puts "PUPPETLAST OK: No outdated hosts" - 0 - end - end -end -# -# = Synopsis -# -# Verifiying your puppet runs. Check different places to verify -# whether your clients actually still runs successfully. -# Also checks for left overs of legacy hosts. +#!/bin/bash # -# = Usage -# -# puppet lastcheck [-h|--help] -class Puppet::Application::Lastcheck < Puppet::Application - - should_parse_config - run_mode :master - - include Puppet::Lastcheck::Tests - add_test :no_facts - add_test :expired_facts, :ignore_by_default => true - add_test :timed_out_facts - add_test :storedconfigs - - include Puppet::Lastcheck::Reports - add_report :console, :priority => 50 - add_report :nagios - - option("--timeout TIMEOUT") do |v| - @timeout = v.to_i - end - - option("--ignore-hosts HOSTS") do |v| - @ignore_hosts = v.split(',') - end - - def main - - Puppet::Lastcheck::Tests.tests.keys.each do |test| - self.send("analyze_#{test}") unless self.send("ignore_#{test}") - end - exitcode = 0 - ordered_reports.each do |report| - if self.send("report_to_#{report}") - tmpexitcode = self.send("deliver_report_to_#{report}",@failing_hosts) - exitcode = tmpexitcode unless exitcode > 0 - end - end - exit(exitcode) - end - - def setup - exit(Puppet.settings.print_configs ? 0 : 1) if Puppet.settings.print_configs? - - #Puppet::Util::Log.newdestination :console - Puppet::Node::Facts.indirection.terminus_class = :yaml - - Puppet::Lastcheck::Tests.tests.keys.each do |test| - self.send("ignore_#{test}=", Puppet::Lastcheck::Tests.tests[test][:ignore_by_default]||false) unless self.send("ignore_#{test}") - self.send("setup_#{test}") if self.respond_to?("setup_#{test}") and !self.send("ignore_#{test}") - end - report = nil - report_activated = false - ordered_reports.each do |report| - report_activated ||= self.send("report_to_#{report}") - end - self.report_to_console = true unless report_activated - - @ignore_hosts = [] unless @ignore_hosts - @failing_hosts = {} - unless @timeout - @timeout = Puppet[:runinterval] - end - end - - private - - def add_failed_host(hostname,reason) - @failing_hosts[hostname] = { :reason => reason } unless (@failing_hosts[hostname] || @ignore_hosts.include?(hostname)) - end - - def pretty_puts(str,length) - sprintf("%0-#{length}s",str) - end -end - -Puppet::Application.find('lastcheck').new.run +# Nagios checking script that whines if a node hasn't checked in with the +# master for a day or more and sets a critical status if the node hasn't +# checked in for a week or longer. You can of course tweak those thresholds +# if you want. + +# Spot of configuration. Basically just specify where the yaml files live. +YAMLPATH=/var/lib/puppet/yaml/node +STATUS_OK=0 +STATUS_WARNING=1 +STATUS_CRITICAL=2 +STATUS_UNKNOWN=3 +INTERVAL_WARNING=$((60 * 60 * 2)) +INTERVAL_CRITICAL=$((60 * 60 * 24)) +PARAMS="-la" + +# A space separated list of hostnames to ignore. These might for instance be +# laptops that just don't get used every day and thus don't sync. +IGNORE_HOSTS="" + +# Override settings from a config file if one exists. +if [ -f /etc/default/check_puppetmaster ]; then + . /etc/default/check_puppetmaster +fi + +# Early exit if no read access to the yaml files. +if [ ! -r ${YAMLPATH} ]; then + echo "UNKNOWN: Cannot access ${YAMLPATH}" + exit ${STATUS_UNKNOWN} +fi + +# Bunch of internal vars used for status info output. +status="OK" +ret=${STATUS_OK} +i_count=0 +o_count=0 +w_count=0 +w_string="" +e_count=0 +e_string="" + +# Current time. +NOW=$(date +"%s") + +# The meat. + +# Get all hostnames associated with active certificates, and check the time +# each of these last checked in with the server. Do this by converting the +# yaml file expiration datestamp to epoch format and subtracting it from now. +for node in $(/usr/sbin/puppetca ${PARAMS} | awk '/^\+/ {print $2}' | tr -d '"'); do + + EXPIRATION=$(grep expiration ${YAMLPATH}/$node.yaml | awk '{printf("%s %s", $2, $3);}') + typeset -i CHECKIN=$(date +"%s" -d "${EXPIRATION}") + DIFFERENCE=$((${NOW} - ${CHECKIN})) + + # Count hosts and generate some output strings based on the status. + if [ ${DIFFERENCE} -lt ${INTERVAL_WARNING} ]; then + o_count=$((${o_count} + 1)); + else + # If there is an issue, first check if we can ignore this host. + if [ -n "${IGNORE_HOSTS}" ]; then + if [[ ${IGNORE_HOSTS} =~ ${node} ]]; then + i_count=$((${i_count} + 1)) + continue + fi + fi + if [ ${DIFFERENCE} -gt ${INTERVAL_CRITICAL} ]; then + e_count=$((${e_count} + 1)) + e_string="${e_string} ${node}" + else + w_count=$((${w_count} + 1)) + w_string="${w_string} ${node}" + fi + fi +done + +# Generate a status string for user display. +if [ -n "${e_string}" ]; then + s_string="${s_string} ${e_count} critical (${e_string## });" +fi +if [ -n "${w_string}" ]; then + s_string="${s_string} ${w_count} warning (${w_string## });" +fi +if [ ${i_count} -gt 0 ]; then + s_string="${s_string} ${i_count} ignored;" +fi +s_string="${s_string} ${o_count} ok." + +# Create a return value and status string. +if [ ${e_count} -gt 0 ]; then + status="CRITICAL" + ret=${STATUS_CRITICAL} +elif [ ${w_count} -gt 0 ]; then + status="WARNING" + ret=${STATUS_WARNING} +fi + +# Output the status and inform the user about which hosts are lagging. +echo -n "${status}:${s_string}" +exit $ret diff --git a/files/master/puppet.conf b/files/master/puppet.conf index 6b4b0e9..f6471d7 100644 --- a/files/master/puppet.conf +++ b/files/master/puppet.conf @@ -20,7 +20,7 @@ factpath = $vardir/lib/facter plugindest = $vardir/lib/puppet -[puppetd] +[agent] # The file in which puppetd stores a list of the classes # associated with the retrieved configuratiion. Can be loaded in # the separate ``puppet`` executable using the ``--loadclasses`` @@ -35,14 +35,13 @@ report=true pluginsync = true - factsync=true logdest=/var/log/puppet/puppet.log -[puppetmasterd] +[master] reportdir = $logdir/reports autoflush = true - storeconfigs=true + #storeconfigs=true dbadapter=mysql dbserver=localhost dbuser=puppet @@ -63,7 +62,7 @@ # configure environments [development] manifest=$vardir/development/etc/manifests/site.pp - modulepath=$vardir/development/manifests + modulepath=$vardir/development/modules/ templatepath=$vardir/development/templates/ [production] diff --git a/manifests/base.pp b/manifests/base.pp index 69a7568..6ff8fa5 100644 --- a/manifests/base.pp +++ b/manifests/base.pp @@ -6,7 +6,7 @@ class puppet::base { case $puppet_cleanup_clientbucket { # if not set, don't do anything - '': {} + '',undef: {} default: { tidy { "/var/lib/puppet/clientbucket": backup => false, @@ -20,9 +20,9 @@ class puppet::base { file { 'puppet_config': path => "$puppet_config", - source => [ "puppet:///modules/site-puppet/client/${fqdn}/puppet.conf", - "puppet:///modules/site-puppet/client/puppet.conf.$operatingsystem", - "puppet:///modules/site-puppet/client/puppet.conf", + source => [ "puppet:///modules/site_puppet/client/${fqdn}/puppet.conf", + "puppet:///modules/site_puppet/client/puppet.conf.$operatingsystem", + "puppet:///modules/site_puppet/client/puppet.conf", "puppet:///modules/puppet/client/${puppet_majorversion}/puppet.conf.$operatingsystem", "puppet:///modules/puppet/client/${puppet_majorversion}/puppet.conf", "puppet:///modules/puppet/client/puppet.conf.$operatingsystem", diff --git a/manifests/centos.pp b/manifests/centos.pp index 61aa065..d98f422 100644 --- a/manifests/centos.pp +++ b/manifests/centos.pp @@ -1,9 +1,9 @@ class puppet::centos inherits puppet::linux { file { '/etc/sysconfig/puppet': - source => [ "puppet:///modules/site-puppet/sysconfig/${fqdn}/puppet", - "puppet:///modules/site-puppet/sysconfig/${domain}/puppet", - "puppet:///modules/site-puppet/sysconfig/puppet", + source => [ "puppet:///modules/site_puppet/sysconfig/${fqdn}/puppet", + "puppet:///modules/site_puppet/sysconfig/${domain}/puppet", + "puppet:///modules/site_puppet/sysconfig/puppet", "puppet:///modules/puppet/sysconfig/puppet" ], notify => Service[puppet], owner => root, group => 0, mode => 0644; diff --git a/manifests/cron.pp b/manifests/cron.pp index 644475e..8cb4644 100644 --- a/manifests/cron.pp +++ b/manifests/cron.pp @@ -1,10 +1,13 @@ -# manifests/cron.pp - class puppet::cron inherits puppet { case $operatingsystem { - linux,debian,ubuntu: { include puppet::cron::linux } + debian,ubuntu: { include puppet::cron::linux } openbsd: { include puppet::cron::openbsd } freebsd: { include puppet::cron::freebsd } - default: { include puppet::cron::base } + default: { + case $kernel { + linux: { include puppet::cron::linux } + default: { include puppet::cron::base } + } + } } } diff --git a/manifests/puppetmaster/base.pp b/manifests/puppetmaster/base.pp index f2d8613..a313ff2 100644 --- a/manifests/puppetmaster/base.pp +++ b/manifests/puppetmaster/base.pp @@ -1,15 +1,18 @@ class puppet::puppetmaster::base inherits puppet::base { File[puppet_config]{ - source => [ "puppet:///modules/site-puppet/master/puppet.conf", - "puppet:///modules/puppet/master/puppet.conf" ], + source => [ + "puppet:///modules/site_puppet/master/${fqdn}/puppet.conf", + "puppet:///modules/site_puppet/master/puppet.conf", + "puppet:///modules/puppet/master/puppet.conf", + ], } if !$puppet_fileserverconfig { $puppet_fileserverconfig = "${puppet::default_config_dir}/fileserver.conf" } file { "$puppet_fileserverconfig": - source => [ "puppet:///modules/site-puppet/master/${fqdn}/fileserver.conf", - "puppet:///modules/site-puppet/master/fileserver.conf", + source => [ "puppet:///modules/site_puppet/master/${fqdn}/fileserver.conf", + "puppet:///modules/site_puppet/master/fileserver.conf", "puppet:///modules/puppet/master/fileserver.conf" ], owner => root, group => puppet, mode => 640; } diff --git a/manifests/puppetmaster/centos.pp b/manifests/puppetmaster/centos.pp index 2673a4d..a6f5e23 100644 --- a/manifests/puppetmaster/centos.pp +++ b/manifests/puppetmaster/centos.pp @@ -2,9 +2,9 @@ class puppet::puppetmaster::centos inherits puppet::puppetmaster::package { file { '/etc/sysconfig/puppetmaster': - source => [ "puppet:///modules/site-puppet/sysconfig/${fqdn}/puppetmaster", - "puppet:///modules/site-puppet/sysconfig/${domain}/puppetmaster", - "puppet:///modules/site-puppet/sysconfig/puppetmaster", + source => [ "puppet:///modules/site_puppet/sysconfig/${fqdn}/puppetmaster", + "puppet:///modules/site_puppet/sysconfig/${domain}/puppetmaster", + "puppet:///modules/site_puppet/sysconfig/puppetmaster", "puppet:///modules/puppet/sysconfig/puppetmaster" ], notify => Service[puppetmaster], owner => root, group => 0, mode => 0644; diff --git a/manifests/puppetmaster/cleanup_reports.pp b/manifests/puppetmaster/cleanup_reports.pp index 664bd81..1f8c021 100644 --- a/manifests/puppetmaster/cleanup_reports.pp +++ b/manifests/puppetmaster/cleanup_reports.pp @@ -1,8 +1,8 @@ class puppet::puppetmaster::cleanup_reports { - + case $puppetmaster_reports_dir { '',undef: { $puppetmaster_reports_dir = '/var/lib/puppet/reports' } } # clean up reports older than $puppetmaster_cleanup_reports days - file { '/etc/cron.daily/puppet_reports_cleanup.sh': - content => "#!/bin/bash\nfind /var/lib/puppet/reports/ -maxdepth 2 -type f -ctime +${puppetmaster_cleanup_reports} -exec rm {} \\;\n", + file { '/etc/cron.daily/puppet_reports_cleanup': + content => "#!/bin/bash\nfind ${puppetmaster_reports_dir} -maxdepth 2 -type f -ctime +${puppetmaster_cleanup_reports} -exec rm {} \\;\n", owner => root, group => 0, mode => 0700; } } diff --git a/manifests/puppetmaster/cleanup_reports/disable.pp b/manifests/puppetmaster/cleanup_reports/disable.pp index 8636223..0b6da05 100644 --- a/manifests/puppetmaster/cleanup_reports/disable.pp +++ b/manifests/puppetmaster/cleanup_reports/disable.pp @@ -1,6 +1,6 @@ class puppet::puppetmaster::cleanup_reports::disable inherits puppet::puppetmaster::cleanup_reports { - File['/etc/cron.daily/puppet_reports_cleanup.sh']{ + File['/etc/cron.daily/puppet_reports_cleanup']{ ensure => absent, } } diff --git a/manifests/puppetmaster/linux.pp b/manifests/puppetmaster/linux.pp index 7c2e428..39ca544 100644 --- a/manifests/puppetmaster/linux.pp +++ b/manifests/puppetmaster/linux.pp @@ -6,7 +6,7 @@ class puppet::puppetmaster::linux inherits puppet::linux { exec { 'notify_passenger_puppetmaster': refreshonly => true, - #command => 'touch /etc/puppet/rack/tmp/restart.txt && sleep 1 && rm /etc/puppet/rack/tmp/restart.txt', + # command => '/usr/bin/touch /etc/puppet/rack/tmp/restart.txt && sleep 1 && /bin/rm /etc/puppet/rack/tmp/restart.txt', command => '/etc/init.d/apache2 reload', } diff --git a/manifests/puppetmaster/package.pp b/manifests/puppetmaster/package.pp index 145792e..aef3121 100644 --- a/manifests/puppetmaster/package.pp +++ b/manifests/puppetmaster/package.pp @@ -1,9 +1,17 @@ # manifests/puppetmaster/package.pp -class puppet::puppetmaster::package inherits puppet::puppetmaster::linux { +class puppet::puppetmaster::package { case $operatingsystem { - centos: { include puppet::puppetmaster::package::centos } + centos: { + if $puppetmaster_ensure_version { + warn('$puppetmaster_ensure_version is not supported for this operatingsystem') + } + include puppet::puppetmaster::package::centos } debian: { include puppet::puppetmaster::package::debian } - default: { include puppet::puppetmaster::package::base } + default: { + if $puppetmaster_ensure_version { + warn('$puppetmaster_ensure_version is not supported for this operatingsystem') + } + include puppet::puppetmaster::package::base } } } diff --git a/manifests/puppetmaster/package/base.pp b/manifests/puppetmaster/package/base.pp index 363f827..ff8d02a 100644 --- a/manifests/puppetmaster/package/base.pp +++ b/manifests/puppetmaster/package/base.pp @@ -4,7 +4,9 @@ class puppet::puppetmaster::package::base inherits puppet::puppetmaster::package ensure => present, } - Service['puppetmaster']{ - require +> Package['puppetmaster'], + if $puppetmaster_mode != 'passenger' { + Service['puppetmaster']{ + require +> Package['puppetmaster'], + } } } diff --git a/manifests/puppetmaster/package/debian.pp b/manifests/puppetmaster/package/debian.pp index 21407bb..cea7ac4 100644 --- a/manifests/puppetmaster/package/debian.pp +++ b/manifests/puppetmaster/package/debian.pp @@ -1,6 +1,13 @@ -class puppet::puppetmaster::package::debian inherits puppet::puppetmaster::package { +class puppet::puppetmaster::package::debian { - #Package['puppetmaster']{ - # require => Package['puppetmaster-common'] - #} + include puppet::puppetmaster::package::base + + apt::preferences_snippet { + 'puppet_passenger': + package => 'puppet*', + pin => "version $puppetmaster_ensure_version", + priority => 2000, + notify => Exec['refresh_apt'], + before => Package['puppetmaster']; + } } |