From fcd9506f2093e96da9e40599e17b2d2dc42918d8 Mon Sep 17 00:00:00 2001 From: Udo Waechter Date: Fri, 25 Apr 2014 09:37:46 +0200 Subject: [PATCH 01/13] ubuntu does not have ruby-msgpack --- manifests/init.pp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/manifests/init.pp b/manifests/init.pp index 812c2e6..68798ac 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -31,7 +31,9 @@ class puppet ( Package { provider => 'apt' } - package{'ruby-msgpack': ensure => $ensure} + if $::lsbdistid != 'Ubuntu' { + package{'ruby-msgpack': ensure => $ensure} + } } default : { $puppetpkgs = 'puppet' From 292d9b616985c165fab7298fefde4169dca6dba7 Mon Sep 17 00:00:00 2001 From: Udo Waechter Date: Fri, 23 May 2014 17:51:30 +0200 Subject: [PATCH 02/13] getting rid of ganglia::cron::gmetric --- manifests/init.pp | 18 +++++++++--------- manifests/puppetmaster.pp | 32 +++++++++++++++++--------------- 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/manifests/init.pp b/manifests/init.pp index 68798ac..6b19372 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -112,15 +112,15 @@ class puppet ( } } - if defined(Class['ganglia::monitor']) { - Ganglia::Gmetric::Cron { - source => 'puppet/ganglia', - ensure => $ensure, - } - - ganglia::gmetric::cron { 'puppetd_lastrun.sh': runwhen => '5'; 'puppetd_runtime.sh': runwhen => '15'; } - - } +# if defined(Class['ganglia::monitor']) { +# Ganglia::Gmetric::Cron { +# source => 'puppet/ganglia', +# ensure => $ensure, +# } +# +# ganglia::gmetric::cron { 'puppetd_lastrun.sh': runwhen => '5'; 'puppetd_runtime.sh': runwhen => '15'; } +# +# } } } $puppet_user = $operatingsystem ? { diff --git a/manifests/puppetmaster.pp b/manifests/puppetmaster.pp index 48b8bcc..da6dc0d 100644 --- a/manifests/puppetmaster.pp +++ b/manifests/puppetmaster.pp @@ -1,4 +1,6 @@ -class puppet::puppetmaster ($ensure = 'present', $puppetqd = false) { +class puppet::puppetmaster ( + $ensure = 'present', + $puppetqd = false) { require 'puppet::common' if !defined(Class['puppet::puppetlabs_apt']) { @@ -24,20 +26,20 @@ class puppet::puppetmaster ($ensure = 'present', $puppetqd = false) { } } - if defined(Class['ganglia::monitor']) { - Ganglia::Gmetric::Cron { - source => 'puppet/ganglia', - ensure => $ensure, - } - - ganglia::gmetric::cron { - 'puppetmaster.rb': - runwhen => '5'; - - 'puppetmaster_compiletime.rb': - runwhen => '60', - } - } + # if defined(Class['ganglia::monitor']) { + # Ganglia::Gmetric::Cron { + # source => 'puppet/ganglia', + # ensure => $ensure, + # } + # + # ganglia::gmetric::cron { + # 'puppetmaster.rb': + # runwhen => '5'; + # + # 'puppetmaster_compiletime.rb': + # runwhen => '60', + # } + # } # ## remove disk reports from time to time tidy { "${::puppet_vardir}/reports": From a4e9e691b4dbccb9d8e5d82b941b6ebad09d391e Mon Sep 17 00:00:00 2001 From: Udo Waechter Date: Mon, 26 May 2014 13:03:17 +0200 Subject: [PATCH 03/13] refactoring, part 1 --- manifests/client.pp | 21 +++++++++++++++++++ manifests/defines/fact_d.pp | 4 ++-- manifests/{common.pp => facter.pp} | 4 ++-- manifests/init.pp | 21 +++++-------------- manifests/monitored/client.pp | 20 ++++++++++++++++++ manifests/puppet-dashboard.pp | 2 +- manifests/puppetmaster.pp | 32 +++++++++-------------------- templates/puppet.conf.erb | 33 ++++++++++++++++-------------- 8 files changed, 79 insertions(+), 58 deletions(-) create mode 100644 manifests/client.pp rename manifests/{common.pp => facter.pp} (90%) create mode 100644 manifests/monitored/client.pp diff --git a/manifests/client.pp b/manifests/client.pp new file mode 100644 index 0000000..a6272bb --- /dev/null +++ b/manifests/client.pp @@ -0,0 +1,21 @@ +class puppet::client ( + $ensure = 'present', + $version = $::PUPPET_VERSION) { + class { 'puppet': + daemonize => false, + require => Exec['apt_update'], + } + + if !defined(Class['puppet::puppetlabs_apt']) { + class { 'puppet::puppetlabs_apt': } + require 'puppet::puppetlabs_apt' + } + + apt::pin { 'puppet': + version => $version, + packages => 'puppet*', + priority => '100', + } + +} + diff --git a/manifests/defines/fact_d.pp b/manifests/defines/fact_d.pp index e442aa4..72ce439 100644 --- a/manifests/defines/fact_d.pp +++ b/manifests/defines/fact_d.pp @@ -1,11 +1,11 @@ define puppet::defines::fact_d ($value, $ensure = 'present', $key = false) { - require 'puppet::common' + require 'puppet::facter' $k_real = $key ? { false => $name, default => $key, } - file { "${puppet::common::facts_d}/${k_real}.txt": + file { "${puppet::facter::facts_d}/${k_real}.txt": ensure => $ensure, content => "${k_real}=${value}", } diff --git a/manifests/common.pp b/manifests/facter.pp similarity index 90% rename from manifests/common.pp rename to manifests/facter.pp index 3b1b0bb..1492e66 100644 --- a/manifests/common.pp +++ b/manifests/facter.pp @@ -1,11 +1,11 @@ -class puppet::common ( +class puppet::facter ( $ensure = 'present') { $pkg_ens = $ensure ? { 'present' => 'latest', default => $ensure, } - package { 'facter': ensure => '1.7.5-1puppetlabs1' } + package { 'facter': ensure => $ensure } package { 'libaugeas-ruby': } $ens_dir = $ensure ? { diff --git a/manifests/init.pp b/manifests/init.pp index 68798ac..9fceca5 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -1,4 +1,4 @@ -import 'defines/*.pp' +#import 'defines/*.pp' class puppet ( $ensure = 'present', @@ -16,7 +16,7 @@ class puppet ( } $factpath = '/var/lib/puppet/lib/facter' - require 'puppet::common' + require 'puppet::facter' if !defined(Class['puppet::puppetlabs_apt']) { require 'puppet::puppetlabs_apt' @@ -111,31 +111,20 @@ class puppet ( }, } } - - if defined(Class['ganglia::monitor']) { - Ganglia::Gmetric::Cron { - source => 'puppet/ganglia', - ensure => $ensure, - } - - ganglia::gmetric::cron { 'puppetd_lastrun.sh': runwhen => '5'; 'puppetd_runtime.sh': runwhen => '15'; } - - } } } - $puppet_user = $operatingsystem ? { + $puppet_user = $::operatingsystem ? { 'Darwin' => $adm, default => 'puppet', } - $puppet_group = $operatingsystem ? { + $puppet_group = $::operatingsystem ? { 'Darwin' => 'wheel', default => 'puppet', } # 'FreeBSD' => '/usr/local/etc/puppet/puppet.conf', - $puppetconf = $operatingsystem ? { + $puppetconf = $::operatingsystem ? { default => '/etc/puppet/puppet.conf', } - file { $puppetconf: ensure => $ensure, content => template('puppet/puppet.conf.erb'), diff --git a/manifests/monitored/client.pp b/manifests/monitored/client.pp new file mode 100644 index 0000000..661fd34 --- /dev/null +++ b/manifests/monitored/client.pp @@ -0,0 +1,20 @@ +class puppet::monitored::client ( + $ensure = 'present') { + $check = '/usr/lib/nagios/plugins/check_file_age -w10800 -c36000 -f/var/lib/puppet/state/last_run_summary.yaml' + + icinga::object::hostgroupmember { 'puppet-clients': ensure => 'absent', } + + sudo::conf { 'puppet-clients-icinga-sudo': + content => "nagios ALL=NOPASSWD: ${check}", + ensure => $ensure, + } + + massive_passive::icinga::service { 'Puppet last run': + freshness_threshold => '5800', + command => "/usr/bin/sudo ${check}", + use => 'workhours-passive-service', + hostgroup_name => 'linux-servers', + notifications_enabled => 1, + ensure => $ensure, + } +} \ No newline at end of file diff --git a/manifests/puppet-dashboard.pp b/manifests/puppet-dashboard.pp index f0529f0..cc76d22 100644 --- a/manifests/puppet-dashboard.pp +++ b/manifests/puppet-dashboard.pp @@ -1,5 +1,5 @@ class puppet::puppet-dashboard ($ensure = 'present') { - require 'puppet::common' + require 'puppet::facter' package { ['libjson-ruby', 'puppet-dashboard']: ensure => $ensure, diff --git a/manifests/puppetmaster.pp b/manifests/puppetmaster.pp index 48b8bcc..9bb8423 100644 --- a/manifests/puppetmaster.pp +++ b/manifests/puppetmaster.pp @@ -1,29 +1,17 @@ -class puppet::puppetmaster ($ensure = 'present', $puppetqd = false) { - require 'puppet::common' - +class puppet::puppetmaster ( + $ensure = 'present', + $dns_alt_names = undef, + $storeconfigs = false, + $storeconfigs_backend = undef, + $reports = undef, + $modulepath = undef) { + require 'puppet::facter' + if !defined(Class['puppet::puppetlabs_apt']) { class { 'puppet::puppetlabs_apt': } require 'puppet::puppetlabs_apt' } - if $puppetqd { - class { 'activemq': ensure => $ensure } - - package { 'libnet-arp-perl': ensure => $ensure } - - service { 'stompserver': - ensure => false, - enable => false, - before => Class['activemq'], - } - - service { 'puppetqd': - ensure => running, - pattern => 'puppet queue queue', - enable => true, - } - } - if defined(Class['ganglia::monitor']) { Ganglia::Gmetric::Cron { source => 'puppet/ganglia', @@ -41,7 +29,7 @@ class puppet::puppetmaster ($ensure = 'present', $puppetqd = false) { # ## remove disk reports from time to time tidy { "${::puppet_vardir}/reports": - age => '1d', + age => '1m', recurse => true, backup => false, } diff --git a/templates/puppet.conf.erb b/templates/puppet.conf.erb index 6af96df..769ddd9 100644 --- a/templates/puppet.conf.erb +++ b/templates/puppet.conf.erb @@ -10,30 +10,33 @@ rundir=/var/run/puppet factsignore = .svn CVS .git pluginsync=true factpath=$vardir/lib/facter -templatedir=/etc/puppet/templates -## should we use this? -#prerun_command=/etc/puppet/etckeeper-commit-pre -#postrun_command=/etc/puppet/etckeeper-commit-post - <% if (fqdn == scope.lookupvar("puppetmaster_server")) || (fqdn == scope.lookupvar("puppetmasterdev_server")) -%> -dbmigrate=true -dbadapter=<%= scope.lookupvar('puppetmaster_dbtype') %> -dbname=<%= scope.lookupvar('puppetmaster_dbname') %> -dbserver=<%= scope.lookupvar('puppetmaster_dbhost') %> -dbuser=<%= scope.lookupvar('puppetmaster_dbuser') %> -dbpassword=<%= scope.lookupvar('puppetmaster_dbpassword') %> +#dbmigrate=true +#dbadapter=<%= scope.lookupvar('puppetmaster_dbtype') %> +#dbname=<%= scope.lookupvar('puppetmaster_dbname') %> +#dbserver=<%= scope.lookupvar('puppetmaster_dbhost') %> +#dbuser=<%= scope.lookupvar('puppetmaster_dbuser') %> +#dbpassword=<%= scope.lookupvar('puppetmaster_dbpassword') %> [master] ssl_client_header = SSL_CLIENT_S_DN ssl_client_verify_header = SSL_CLIENT_VERIFY -reports=<%= scope.lookupvar('puppetmaster_reports') %> +<% if scope.lookupvar('puppet::puppetmaster::dns_alt_names') -%> +dns_alt_names=<%= scope.lookupvar('puppet::puppetmaster::dns_alt_names') %> +<% end -%> +<% if @reports -%> +reports=<%= @reports %> +<% end -%> <% if scope.lookupvar('puppetmaster_reporturl') != false -%> reporturl=<%= scope.lookupvar('puppetmaster_reporturl') %> <% end -%> -modulepath=<%= scope.lookupvar('puppetmaster_modulepath') %> -storeconfigs=true -rails_loglevel=info +modulepath=<%= scope['puppet::puppetmaster::modulepath'] %> +storeconfigs=<%= scope['puppet::puppetmaster::storeconfigs'] %> +<% if scope['puppet::puppetmaster::storeconfigs_backend'] -%> +storeconfigs_backend=<%= scope['puppet::puppetmaster::storeconfigs_backend'] %> +<% end -%> +#rails_loglevel=info <% end -%> [agent] From 454516453ffecca17117934c74b661a80f8139ce Mon Sep 17 00:00:00 2001 From: Udo Waechter Date: Mon, 26 May 2014 14:56:57 +0200 Subject: [PATCH 04/13] refactored it all --- manifests/agent.pp | 83 ++++++++++++++++++ manifests/client.pp | 21 ----- manifests/environment.pp | 11 +++ manifests/init.pp | 171 +++++++++++--------------------------- manifests/puppetmaster.pp | 40 --------- manifests/server.pp | 73 ++++++++++++++++ 6 files changed, 214 insertions(+), 185 deletions(-) create mode 100644 manifests/agent.pp delete mode 100644 manifests/client.pp create mode 100644 manifests/environment.pp delete mode 100644 manifests/puppetmaster.pp create mode 100644 manifests/server.pp diff --git a/manifests/agent.pp b/manifests/agent.pp new file mode 100644 index 0000000..2e6671a --- /dev/null +++ b/manifests/agent.pp @@ -0,0 +1,83 @@ +class puppet::agent ( + $ensure = 'present', + $version = undef, + $norunifloggedin = false, + $daemonize = true, + $run_hour = '*/1', + $run_minute = '10', + $run_if_ipmatch = undef, + $maxsleep = '3200') { + case $::kernel { + 'Linux' : { + $puppetpkgs = ['puppet', 'puppet-common'] + + Package { + provider => 'apt' } + + if $::lsbdistid != 'Ubuntu' { + package { 'ruby-msgpack': ensure => $ensure } + } + } + default : { + $puppetpkgs = 'puppet' + } + } + + $pkg_ens = $ensure ? { + 'present' => $::kernel ? { + 'Linux' => $version, + default => $ensure, + }, + default => $ensure, + } + + package { $puppetpkgs: + ensure => $pkg_ens, + notify => Service['puppet'], + } + + service { 'puppet': + hasstatus => true, + enable => $daemonize, + ensure => $daemonize, + } + $cron_real = $daemonize ? { + false => 'present', + true => 'absent', + default => $ensure, + } + + cron { 'puppetrun': + command => '/usr/local/sbin/puppetd_run.sh', + user => 'root', + minute => $run_minute, + hour => $run_hour, + ensure => $cron_real, + } + + file { + '/usr/local/sbin/puppetd_run.sh': + content => template('puppet/puppetd_run.sh.erb'), + mode => '0700', + alias => 'puppetd_run.sh', + ensure => $ensure; + + '/var/log/puppet': + mode => '0750', + owner => 'puppet', + group => 'puppet'; + } + + # #settings + if $ensure != 'absent' { + Ini_setting { + path => '/etc/puppet/puppet.conf', + section => 'agent', + } + + ini_setting { 'puppet-agent-splay': + setting => 'splay', + value => $maxsleep; + } + } +} diff --git a/manifests/client.pp b/manifests/client.pp deleted file mode 100644 index a6272bb..0000000 --- a/manifests/client.pp +++ /dev/null @@ -1,21 +0,0 @@ -class puppet::client ( - $ensure = 'present', - $version = $::PUPPET_VERSION) { - class { 'puppet': - daemonize => false, - require => Exec['apt_update'], - } - - if !defined(Class['puppet::puppetlabs_apt']) { - class { 'puppet::puppetlabs_apt': } - require 'puppet::puppetlabs_apt' - } - - apt::pin { 'puppet': - version => $version, - packages => 'puppet*', - priority => '100', - } - -} - diff --git a/manifests/environment.pp b/manifests/environment.pp new file mode 100644 index 0000000..1bbbadc --- /dev/null +++ b/manifests/environment.pp @@ -0,0 +1,11 @@ +define puppet::environment ( + $ensure = 'present', + $modulepath) { + ini_setting { "puppet-server-environment-${name}": + path => '/etc/puppet/puppet.conf', + section => $name, + setting => 'modulepath', + value => $modulepath, + ensure => $ensure, + } +} \ No newline at end of file diff --git a/manifests/init.pp b/manifests/init.pp index b297a37..5c22f56 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -1,136 +1,59 @@ -#import 'defines/*.pp' - class puppet ( - $ensure = 'present', - $norunifloggedin = false, - $daemonize = true, - $run_hour = '*/1', - $run_minute = '10', - $run_if_ipmatch = '', - $maxsleep = '3200' -) { - $puppet_service = $::kernel ? { - 'Darwin' => 'org.macports.puppet', - 'FreeBSD' => 'puppetd', - default => 'puppet' - } - $factpath = '/var/lib/puppet/lib/facter' - - require 'puppet::facter' - - if !defined(Class['puppet::puppetlabs_apt']) { + $ensure = 'present', + $version = undef, + $pupppetlabs_apt = true, + $agent = true, + $agent_norunifloggedin = false, + $agent_daemonize = true, + $agent_run_hour = '*/1', + $agent_run_minute = '10', + $agent_run_if_ipmatch = '', + $agent_maxsleep = '3200', + $server = false, + $server_dns_alt_names = undef, + $server_storeconfigs = false, + $server_storeconfigs_backend = undef, + $server_basemodulepath = undef, + $server_reports = 'store', + $server_passenger = true) { + if $puppetlabs_apt { require 'puppet::puppetlabs_apt' } -# @@puppet::puppetmaster::privatedir { $fqdn: l_fqdn => generate('/usr/bin/env', 'perl', '-e', '$_=shift;tr/[A-Z]/[a-z]/;print $_', -# "$fqdn") } - - case $::kernel { - 'Linux' : { - $puppetpkgs = ['puppet', 'puppet-common'] - - Package { - provider => 'apt' } - if $::lsbdistid != 'Ubuntu' { - package{'ruby-msgpack': ensure => $ensure} - } - } - default : { - $puppetpkgs = 'puppet' + if $version != undef { + apt::pin { 'puppet': + version => $version, + packages => 'puppet*', + priority => '100', } } - $puppet_linuxversion_real = $::PUPPET_VERSION_LINUX ? { - '' => 'latest', - default => $::PUPPET_VERSION_LINUX, + + class { 'puppet::facter': + ensure => $ensure, } - $pkg_ens = $ensure ? { - 'present' => $::kernel ? { - 'Linux' => $puppet_linuxversion_real, - default => $ensure, - }, - default => $ensure, - } - package { $puppetpkgs: - ensure => $pkg_ens, - notify => Service[$puppet_service], + if $agent { + class { 'puppet::agent': + ensure => $ensure, + version => $version, + norunifloggedin => $agent_norunifloggedin, + daemonize => $agent_daemonize, + run_hour => $agent_run_hour, + run_if_ipmatch => $agent_run_if_ipmatch, + maxsleep => $agent_max_sleep + } } - service { $puppet_service: - hasstatus => true, - enable => $daemonize, - ensure => $daemonize, + if $server { + class { 'puppet::server': + ensure => $ensure, + version => $version, + dns_alt_names => $server_dns_alt_names, + storeconfigs => $server_storeconfigs, + storeconfigs_backend => $server_storeconfigs_backend, + reports => $server_reports, + basemodulepath => $server_basemodulepath, + passenger => $server_passenger; + } } - $cron_real = $daemonize ? { - false => 'present', - true => 'absent', - default => $ensure, - } - - cron { 'puppetrun': - command => '/usr/local/sbin/puppetd_run.sh', - user => 'root', - minute => $run_minute, - hour => $run_hour, - ensure => $cron_real, - } - - file { '/usr/local/sbin/puppetd_run.sh': - content => template('puppet/puppetd_run.sh.erb'), - mode => '0700', - alias => 'puppetd_run.sh', - ensure => $ensure; - '/var/log/puppet': - mode => '0750',owner => 'puppet',group => 'puppet'; -} - - case $::kernel { - 'Darwin' : { - file { '/Library/LaunchDaemons/org.macports.puppet.plist': - source => 'puppet:///modules/puppet/org.macports.puppet.plist', - before => Service[$puppet_service], - } - } - 'Linux' : { -# replace { 'enable_puppet': -# file => '/etc/default/puppet', -# pattern => 'START=no', -# replacement => 'START=yes', -# before => Service[$puppet_service], -# } - - if defined(Class['monit']) { - 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: - ensure => $ensure, - content => template('puppet/puppet.conf.erb'), - mode => '0644', - owner => $puppet_user, -# require => [ Package["puppet"] ], - } - } diff --git a/manifests/puppetmaster.pp b/manifests/puppetmaster.pp deleted file mode 100644 index 9bb8423..0000000 --- a/manifests/puppetmaster.pp +++ /dev/null @@ -1,40 +0,0 @@ -class puppet::puppetmaster ( - $ensure = 'present', - $dns_alt_names = undef, - $storeconfigs = false, - $storeconfigs_backend = undef, - $reports = undef, - $modulepath = undef) { - require 'puppet::facter' - - if !defined(Class['puppet::puppetlabs_apt']) { - class { 'puppet::puppetlabs_apt': } - require 'puppet::puppetlabs_apt' - } - - if defined(Class['ganglia::monitor']) { - Ganglia::Gmetric::Cron { - source => 'puppet/ganglia', - ensure => $ensure, - } - - ganglia::gmetric::cron { - 'puppetmaster.rb': - runwhen => '5'; - - 'puppetmaster_compiletime.rb': - runwhen => '60', - } - } - - # ## remove disk reports from time to time - tidy { "${::puppet_vardir}/reports": - age => '1m', - recurse => true, - backup => false, - } - - # create [private] directories - # file { $puppet_privdir: ensure => directory } - # Puppet::Puppetmaster::Privatedir <<| |>> -} diff --git a/manifests/server.pp b/manifests/server.pp new file mode 100644 index 0000000..d6c3861 --- /dev/null +++ b/manifests/server.pp @@ -0,0 +1,73 @@ +class puppet::server ( + $ensure = 'present', + $dns_alt_names = undef, + $storeconfigs = false, + $storeconfigs_backend = undef, + $reports = undef, + $basemodulepath = undef, + $version = undef, + $passenger = true) { + if $passenger == true { + $pkg = 'puppetmaster-passenger' + } else { + $pkg = 'puppetmaster' + } + $pkg_ens = $ensure ? { + 'present' => $::kernel ? { + 'Linux' => $version, + default => $ensure, + }, + default => $ensure, + } + + package { ['puppetmaster-common', $pkg]: ensure => $pkg_ens, } + + # ## remove disk reports from time to time + tidy { "${::puppet_vardir}/reports": + age => '4w', + recurse => true, + backup => false, + } + + Ini_setting { + path => '/etc/puppet/puppet.conf', + section => 'master', + } + + $dns_pres = $dns_alt_names ? { + undef => 'absent', + default => 'present', + } + + ini_setting { 'puppet-server-dns_alt_names': + ensure => $dns_pres, + setting => 'dns_alt_names', + value => $dns_alt_names; + } + + $mpath_pres = $basemodulepath ? { + undef => 'absent', + default => 'present', + } + + ini_setting { 'puppet-server-basemodulepath': + ensure => $mpath_pres, + setting => 'basemodulepath', + value => $basemodulepath; + } + + ini_setting { + 'puppet-server-storeconfigs': + setting => 'storeconfigs', + value => $storeconfigs; + + 'puppet-server-storeconfigs_backend': + setting => 'storeconfigs_backend', + value => $storeconfigs_backend; + + 'puppet-server-reports': + setting => 'reports', + value => $reports; + } + +} From d7d9a83dc8da07f76a25c9a4886b214d6b8c31aa Mon Sep 17 00:00:00 2001 From: Udo Waechter Date: Mon, 26 May 2014 15:14:44 +0200 Subject: [PATCH 05/13] module files stuff --- .project | 23 +++++++++++++++++++++++ Modulefile | 12 ++++++++++++ README.markdown | 3 +++ Rakefile | 2 ++ metadata.json | 1 + spec/spec.opts | 6 ++++++ spec/spec_helper.rb | 2 ++ tests/init.pp | 1 + 8 files changed, 50 insertions(+) create mode 100644 .project create mode 100644 Modulefile create mode 100644 README.markdown create mode 100644 Rakefile create mode 100644 metadata.json create mode 100644 spec/spec.opts create mode 100644 spec/spec_helper.rb create mode 100644 tests/init.pp diff --git a/.project b/.project new file mode 100644 index 0000000..4a3055d --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + module-puppet + + + + + + org.eclipse.xtext.ui.shared.xtextBuilder + + + + + org.cloudsmith.geppetto.pp.dsl.ui.modulefileBuilder + + + + + + org.cloudsmith.geppetto.pp.dsl.ui.puppetNature + org.eclipse.xtext.ui.shared.xtextNature + + diff --git a/Modulefile b/Modulefile new file mode 100644 index 0000000..33fe73a --- /dev/null +++ b/Modulefile @@ -0,0 +1,12 @@ +name 'do-puppet' +version '0.1.0' +source '' +author 'Udo Waechter' +license 'GPL' +summary '' +description '' +project_page '' + +## Add dependencies, if any: +# dependency 'username/name', '>= 1.2.0' +dependency 'puppetlabs/inifile', '>= 1.3.0' diff --git a/README.markdown b/README.markdown new file mode 100644 index 0000000..63fc19b --- /dev/null +++ b/README.markdown @@ -0,0 +1,3 @@ +# puppet # + +This is the puppet module. It provides... diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..14f1c24 --- /dev/null +++ b/Rakefile @@ -0,0 +1,2 @@ +require 'rubygems' +require 'puppetlabs_spec_helper/rake_tasks' diff --git a/metadata.json b/metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/metadata.json @@ -0,0 +1 @@ +{} diff --git a/spec/spec.opts b/spec/spec.opts new file mode 100644 index 0000000..91cd642 --- /dev/null +++ b/spec/spec.opts @@ -0,0 +1,6 @@ +--format +s +--colour +--loadby +mtime +--backtrace diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..dc7e9f4 --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,2 @@ +require 'rubygems' +require 'puppetlabs_spec_helper/module_spec_helper' diff --git a/tests/init.pp b/tests/init.pp new file mode 100644 index 0000000..52691f5 --- /dev/null +++ b/tests/init.pp @@ -0,0 +1 @@ +include puppet From 11001cb20900ebf713960ade6ca71a6e68d094fb Mon Sep 17 00:00:00 2001 From: Udo Waechter Date: Tue, 3 Jun 2014 10:28:22 +0200 Subject: [PATCH 06/13] hiera compatible refactoring --- manifests/facter.pp | 12 ++++-------- manifests/init.pp | 17 +++++++++++++---- templates/puppet.conf.erb | 29 +++++++++-------------------- templates/puppetd_run.sh.erb | 11 +++++------ 4 files changed, 31 insertions(+), 38 deletions(-) diff --git a/manifests/facter.pp b/manifests/facter.pp index 1492e66..c891402 100644 --- a/manifests/facter.pp +++ b/manifests/facter.pp @@ -1,20 +1,16 @@ class puppet::facter ( $ensure = 'present') { - $pkg_ens = $ensure ? { - 'present' => 'latest', - default => $ensure, - } - package { 'facter': ensure => $ensure } - package { 'libaugeas-ruby': } $ens_dir = $ensure ? { - 'present' => 'directory', - default => $ensure, + 'absent' => 'absent', + default => 'directory', } $facts_d = '/etc/facter/facts.d' + File['/etc/facter'] -> File[$facts_d] + $pv_dir = $::puppet_vardir ? { '' => '/var/lib/puppet', default => $::puppet_vardir diff --git a/manifests/init.pp b/manifests/init.pp index 5c22f56..ff927fa 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -1,15 +1,16 @@ class puppet ( $ensure = 'present', $version = undef, - $pupppetlabs_apt = true, $agent = true, + $server = false, + $facter_version = $ensure, + $puppetlabs_apt = true, $agent_norunifloggedin = false, $agent_daemonize = true, $agent_run_hour = '*/1', $agent_run_minute = '10', $agent_run_if_ipmatch = '', $agent_maxsleep = '3200', - $server = false, $server_dns_alt_names = undef, $server_storeconfigs = false, $server_storeconfigs_backend = undef, @@ -17,7 +18,7 @@ class puppet ( $server_reports = 'store', $server_passenger = true) { if $puppetlabs_apt { - require 'puppet::puppetlabs_apt' + class { 'puppet::puppetlabs_apt': before => Class['puppet::facter'] } } if $version != undef { @@ -29,7 +30,15 @@ class puppet ( } class { 'puppet::facter': - ensure => $ensure, + ensure => $facter_version, + } + + ini_setting { 'puppet-templatedir': + path => '/etc/puppet/puppet.conf', + section => 'main', + setting => 'templatedir', + value => '$confidr/templates', + ensure => 'absent'; } if $agent { diff --git a/templates/puppet.conf.erb b/templates/puppet.conf.erb index 769ddd9..68e363c 100644 --- a/templates/puppet.conf.erb +++ b/templates/puppet.conf.erb @@ -11,32 +11,21 @@ factsignore = .svn CVS .git pluginsync=true factpath=$vardir/lib/facter -<% if (fqdn == scope.lookupvar("puppetmaster_server")) || (fqdn == scope.lookupvar("puppetmasterdev_server")) -%> -#dbmigrate=true -#dbadapter=<%= scope.lookupvar('puppetmaster_dbtype') %> -#dbname=<%= scope.lookupvar('puppetmaster_dbname') %> -#dbserver=<%= scope.lookupvar('puppetmaster_dbhost') %> -#dbuser=<%= scope.lookupvar('puppetmaster_dbuser') %> -#dbpassword=<%= scope.lookupvar('puppetmaster_dbpassword') %> - +<% if server == "true" -%> [master] ssl_client_header = SSL_CLIENT_S_DN ssl_client_verify_header = SSL_CLIENT_VERIFY -<% if scope.lookupvar('puppet::puppetmaster::dns_alt_names') -%> -dns_alt_names=<%= scope.lookupvar('puppet::puppetmaster::dns_alt_names') %> +<% if scope['puppet::dns_alt_names'] -%> +dns_alt_names=<%= scope['puppet::dns_alt_names'] %> <% end -%> -<% if @reports -%> -reports=<%= @reports %> +<% if scope['puppet::reports'] -%> +reports=<%= scope['puppet::reports'] %> <% end -%> -<% if scope.lookupvar('puppetmaster_reporturl') != false -%> -reporturl=<%= scope.lookupvar('puppetmaster_reporturl') %> +basemodulepath=<%= scope['puppet::basemodulepath'] %> +storeconfigs=<%= scope['puppet::storeconfigs'] %> +<% if scope['puppet::storeconfigs_backend'] -%> +storeconfigs_backend=<%= scope['puppet::storeconfigs_backend'] %> <% end -%> -modulepath=<%= scope['puppet::puppetmaster::modulepath'] %> -storeconfigs=<%= scope['puppet::puppetmaster::storeconfigs'] %> -<% if scope['puppet::puppetmaster::storeconfigs_backend'] -%> -storeconfigs_backend=<%= scope['puppet::puppetmaster::storeconfigs_backend'] %> -<% end -%> -#rails_loglevel=info <% end -%> [agent] diff --git a/templates/puppetd_run.sh.erb b/templates/puppetd_run.sh.erb index 84084cb..e51b8df 100755 --- a/templates/puppetd_run.sh.erb +++ b/templates/puppetd_run.sh.erb @@ -1,22 +1,21 @@ #!/usr/bin/env bash -# $Id: puppetd_run.sh.erb 4177 2011-04-05 08:02:08Z uwaechte $ # a wrapper script, to run puppetd after a random time # this will be called by cron at the same time on each client, # but should not call the master at the same time as the others. -<% if norunifloggedin == true -%> +<% if @norunifloggedin == true -%> # not running if users are logged in [[ $(who|wc -l) -gt 0 ]] && exit 0 <% end -%> -export FACTERLIB="<%= scope.lookupvar("factpath") %>" +#export FACTERLIB="<%= scope.lookupvar("factpath") %>" PATH="/opt/local/bin:/opt/local/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" PUPPET=$(which puppet) [[ -e ${PUPPET} ]] || exit 1 PUPPET="${PUPPET}" -<% if run_if_ipmatch != "" -%> -ISUNIIP=$(ifconfig |grep -c -e "<%= run_if_ipmatch %>") +<% if @run_if_ipmatch != "" -%> +ISUNIIP=$(ifconfig |grep -c -e "<%= @run_if_ipmatch %>") <% else -%> ISUNIIP=1 <% end -%> @@ -54,7 +53,7 @@ if [ ${ISUNIIP} -gt 0 ]; then fi fi - MAXSLEEP=<%= maxsleep %> #How many seconds to wait maximally + MAXSLEEP=<%= @maxsleep %> #How many seconds to wait maximally SLEEP=${RANDOM} I=${RANDOM} From 7d3a8b70d9f746accd1c27faeb66d13ddc692096 Mon Sep 17 00:00:00 2001 From: Udo Waechter Date: Tue, 8 Jul 2014 16:16:07 +0200 Subject: [PATCH 07/13] environments --- manifests/agent.pp | 15 ++++++++++++++- templates/puppet.conf.erb | 1 + 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/manifests/agent.pp b/manifests/agent.pp index 2e6671a..be21825 100644 --- a/manifests/agent.pp +++ b/manifests/agent.pp @@ -6,7 +6,9 @@ class puppet::agent ( $run_hour = '*/1', $run_minute = '10', $run_if_ipmatch = undef, - $maxsleep = '3200') { + $maxsleep = '3200', + $puppet_master = undef, + $environment = gsub($::domain,'.lan', '')) { case $::kernel { 'Linux' : { $puppetpkgs = ['puppet', 'puppet-common'] @@ -79,5 +81,16 @@ class puppet::agent ( setting => 'splay', value => $maxsleep; } + ini_setting { 'puppet-agent-env': + setting => 'environment', + value => $environment; + } + + if $puppet_master != undef { + ini_setting { 'puppet-agnt-master': + setting => 'server', + value => $puppet_master, + } + } } } diff --git a/templates/puppet.conf.erb b/templates/puppet.conf.erb index 68e363c..7f3b224 100644 --- a/templates/puppet.conf.erb +++ b/templates/puppet.conf.erb @@ -36,3 +36,4 @@ splay=true report=true server=<%= scope.lookupvar("puppetmaster_server") %> configtimeout=720 +environment=<% @domain.gsub('.lan','') From 7906f32a33290d800261772667bf22e13cf7adf9 Mon Sep 17 00:00:00 2001 From: Udo Waechter Date: Thu, 4 Sep 2014 17:43:54 +0200 Subject: [PATCH 08/13] hiera config --- templates/puppet.conf.erb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/templates/puppet.conf.erb b/templates/puppet.conf.erb index 7f3b224..51f7bf1 100644 --- a/templates/puppet.conf.erb +++ b/templates/puppet.conf.erb @@ -10,6 +10,7 @@ rundir=/var/run/puppet factsignore = .svn CVS .git pluginsync=true factpath=$vardir/lib/facter +hiera_config=/etc/puppet/hiera.yaml <% if server == "true" -%> [master] @@ -27,6 +28,7 @@ storeconfigs=<%= scope['puppet::storeconfigs'] %> storeconfigs_backend=<%= scope['puppet::storeconfigs_backend'] %> <% end -%> <% end -%> +hiera_config=/etc/puppet/hiera.yaml [agent] # Make sure all log messages are sent to the right directory From f045d0f58afa27f50051a9b5156415d8e5540efc Mon Sep 17 00:00:00 2001 From: Udo Waechter Date: Thu, 11 Sep 2014 16:10:34 +0200 Subject: [PATCH 09/13] cron can also be disabled --- manifests/agent.pp | 11 ++++++++--- manifests/init.pp | 12 +++++++----- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/manifests/agent.pp b/manifests/agent.pp index be21825..fc2d000 100644 --- a/manifests/agent.pp +++ b/manifests/agent.pp @@ -8,7 +8,8 @@ class puppet::agent ( $run_if_ipmatch = undef, $maxsleep = '3200', $puppet_master = undef, - $environment = gsub($::domain,'.lan', '')) { + $cron = true, + $environment = gsub($::domain, '.lan', '')) { case $::kernel { 'Linux' : { $puppetpkgs = ['puppet', 'puppet-common'] @@ -44,11 +45,14 @@ class puppet::agent ( ensure => $daemonize, } $cron_real = $daemonize ? { - false => 'present', + false => $cron ? { + true => 'present', + default => 'absent', + }, true => 'absent', default => $ensure, } - + cron { 'puppetrun': command => '/usr/local/sbin/puppetd_run.sh', user => 'root', @@ -81,6 +85,7 @@ class puppet::agent ( setting => 'splay', value => $maxsleep; } + ini_setting { 'puppet-agent-env': setting => 'environment', value => $environment; diff --git a/manifests/init.pp b/manifests/init.pp index ff927fa..9e1f2a5 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -1,9 +1,10 @@ class puppet ( - $ensure = 'present', - $version = undef, - $agent = true, - $server = false, + $ensure = 'present', + $version = undef, + $agent = true, + $server = false, $facter_version = $ensure, + $agent_cron = true, $puppetlabs_apt = true, $agent_norunifloggedin = false, $agent_daemonize = true, @@ -49,7 +50,8 @@ class puppet ( daemonize => $agent_daemonize, run_hour => $agent_run_hour, run_if_ipmatch => $agent_run_if_ipmatch, - maxsleep => $agent_max_sleep + maxsleep => $agent_max_sleep, + cron => $agent_cron, } } From 395bcc65c5a8aef62ed431d33c4d3bf7c753a10b Mon Sep 17 00:00:00 2001 From: Udo Waechter Date: Tue, 25 Nov 2014 11:10:38 +0100 Subject: [PATCH 10/13] environment for mysportgroup.de legacy hosts --- templates/puppet.conf.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/puppet.conf.erb b/templates/puppet.conf.erb index 51f7bf1..f0a7e2f 100644 --- a/templates/puppet.conf.erb +++ b/templates/puppet.conf.erb @@ -38,4 +38,4 @@ splay=true report=true server=<%= scope.lookupvar("puppetmaster_server") %> configtimeout=720 -environment=<% @domain.gsub('.lan','') +environment=<% @domain.gsub('.(lan|mysportgroup.de)','') From 340bdf611cd84e7607f7f63bf4d02ecbcc7481f0 Mon Sep 17 00:00:00 2001 From: Udo Waechter Date: Wed, 10 Dec 2014 09:48:33 +0100 Subject: [PATCH 11/13] environment fix --- manifests/agent.pp | 2 +- templates/puppet.conf.erb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/manifests/agent.pp b/manifests/agent.pp index fc2d000..fc873c3 100644 --- a/manifests/agent.pp +++ b/manifests/agent.pp @@ -9,7 +9,7 @@ class puppet::agent ( $maxsleep = '3200', $puppet_master = undef, $cron = true, - $environment = gsub($::domain, '.lan', '')) { + $environment = gsub($::domain, '.(lan|mysportgroup\.de)', '')) { case $::kernel { 'Linux' : { $puppetpkgs = ['puppet', 'puppet-common'] diff --git a/templates/puppet.conf.erb b/templates/puppet.conf.erb index f0a7e2f..f79777a 100644 --- a/templates/puppet.conf.erb +++ b/templates/puppet.conf.erb @@ -38,4 +38,4 @@ splay=true report=true server=<%= scope.lookupvar("puppetmaster_server") %> configtimeout=720 -environment=<% @domain.gsub('.(lan|mysportgroup.de)','') +environment=<%= @environment %> From 9fdfc7cf762a0c8a5332ce302bba28b1b4e17e7b Mon Sep 17 00:00:00 2001 From: Udo Waechter Date: Tue, 13 Jan 2015 17:26:17 +0100 Subject: [PATCH 12/13] splay is not numeric any more --- manifests/agent.pp | 8 ++++---- manifests/init.pp | 14 +++++++------- templates/puppetd_run.sh.erb | 4 ++-- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/manifests/agent.pp b/manifests/agent.pp index fc873c3..21d791a 100644 --- a/manifests/agent.pp +++ b/manifests/agent.pp @@ -6,8 +6,8 @@ class puppet::agent ( $run_hour = '*/1', $run_minute = '10', $run_if_ipmatch = undef, - $maxsleep = '3200', $puppet_master = undef, + $splay = true, $cron = true, $environment = gsub($::domain, '.(lan|mysportgroup\.de)', '')) { case $::kernel { @@ -46,13 +46,13 @@ class puppet::agent ( } $cron_real = $daemonize ? { false => $cron ? { - true => 'present', + true => 'present', default => 'absent', }, true => 'absent', default => $ensure, } - + cron { 'puppetrun': command => '/usr/local/sbin/puppetd_run.sh', user => 'root', @@ -83,7 +83,7 @@ class puppet::agent ( ini_setting { 'puppet-agent-splay': setting => 'splay', - value => $maxsleep; + value => $splay; } ini_setting { 'puppet-agent-env': diff --git a/manifests/init.pp b/manifests/init.pp index 9e1f2a5..453701f 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -1,17 +1,17 @@ class puppet ( - $ensure = 'present', - $version = undef, - $agent = true, - $server = false, + $ensure = 'present', + $version = undef, + $agent = true, + $server = false, $facter_version = $ensure, - $agent_cron = true, + $agent_cron = true, $puppetlabs_apt = true, $agent_norunifloggedin = false, $agent_daemonize = true, $agent_run_hour = '*/1', $agent_run_minute = '10', $agent_run_if_ipmatch = '', - $agent_maxsleep = '3200', + $agent_splay = true, $server_dns_alt_names = undef, $server_storeconfigs = false, $server_storeconfigs_backend = undef, @@ -50,7 +50,7 @@ class puppet ( daemonize => $agent_daemonize, run_hour => $agent_run_hour, run_if_ipmatch => $agent_run_if_ipmatch, - maxsleep => $agent_max_sleep, + splay => $agent_splay, cron => $agent_cron, } } diff --git a/templates/puppetd_run.sh.erb b/templates/puppetd_run.sh.erb index e51b8df..15b1057 100755 --- a/templates/puppetd_run.sh.erb +++ b/templates/puppetd_run.sh.erb @@ -53,7 +53,7 @@ if [ ${ISUNIIP} -gt 0 ]; then fi fi - MAXSLEEP=<%= @maxsleep %> #How many seconds to wait maximally + #MAXSLEEP=<%= @maxsleep %> #How many seconds to wait maximally SLEEP=${RANDOM} I=${RANDOM} @@ -63,7 +63,7 @@ if [ ${ISUNIIP} -gt 0 ]; then SLEEP=${RANDOM} done # wait maximally $MAXSLEEP seconds - sleep $(expr ${SLEEP} % ${MAXSLEEP}) + #sleep $(expr ${SLEEP} % ${MAXSLEEP}) # run puppetd nice -n 12 $PUPPET agent -t 2&>>/var/log/puppet/puppetd_run.log fi From 4df5862572d7928deb9d9394ed7dace0ee84f810 Mon Sep 17 00:00:00 2001 From: Udo Waechter Date: Tue, 3 Mar 2015 13:35:54 +0100 Subject: [PATCH 13/13] TODO: make the ENV configurable --- manifests/agent.pp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/agent.pp b/manifests/agent.pp index 21d791a..95c103b 100644 --- a/manifests/agent.pp +++ b/manifests/agent.pp @@ -9,7 +9,7 @@ class puppet::agent ( $puppet_master = undef, $splay = true, $cron = true, - $environment = gsub($::domain, '.(lan|mysportgroup\.de)', '')) { + $environment = gsub($::domain, '.(bitwig.com)', '')) { case $::kernel { 'Linux' : { $puppetpkgs = ['puppet', 'puppet-common']