This commit is contained in:
2015-03-30 20:56:32 +02:00
19 changed files with 344 additions and 209 deletions

23
.project Normal file
View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>module-puppet</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.cloudsmith.geppetto.pp.dsl.ui.modulefileBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.cloudsmith.geppetto.pp.dsl.ui.puppetNature</nature>
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
</natures>
</projectDescription>

12
Modulefile Normal file
View File

@@ -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'

3
README.markdown Normal file
View File

@@ -0,0 +1,3 @@
# puppet #
This is the puppet module. It provides...

2
Rakefile Normal file
View File

@@ -0,0 +1,2 @@
require 'rubygems'
require 'puppetlabs_spec_helper/rake_tasks'

101
manifests/agent.pp Normal file
View File

@@ -0,0 +1,101 @@
class puppet::agent (
$ensure = 'present',
$version = undef,
$norunifloggedin = false,
$daemonize = true,
$run_hour = '*/1',
$run_minute = '10',
$run_if_ipmatch = undef,
$puppet_master = undef,
$splay = true,
$cron = true,
$environment = gsub($::domain, '.(bitwig.com)', '')) {
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 => $cron ? {
true => 'present',
default => 'absent',
},
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 => $splay;
}
ini_setting { 'puppet-agent-env':
setting => 'environment',
value => $environment;
}
if $puppet_master != undef {
ini_setting { 'puppet-agnt-master':
setting => 'server',
value => $puppet_master,
}
}
}
}

View File

@@ -1,11 +1,11 @@
define puppet::defines::fact_d ($value, $ensure = 'present', $key = false) { define puppet::defines::fact_d ($value, $ensure = 'present', $key = false) {
require 'puppet::common' require 'puppet::facter'
$k_real = $key ? { $k_real = $key ? {
false => $name, false => $name,
default => $key, default => $key,
} }
file { "${puppet::common::facts_d}/${k_real}.txt": file { "${puppet::facter::facts_d}/${k_real}.txt":
ensure => $ensure, ensure => $ensure,
content => "${k_real}=${value}", content => "${k_real}=${value}",
} }

11
manifests/environment.pp Normal file
View File

@@ -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,
}
}

View File

@@ -1,20 +1,22 @@
class puppet::common ( class puppet::facter (
$ensure = 'present') { $ensure = 'present') {
$pkg_ens = $ensure ? {
$pkg_ens = $ensure ? {
'present' => 'latest', 'present' => 'latest',
default => $ensure, default => $ensure,
} }
package { 'facter': ensure => 'latest' } package { 'facter': ensure => $pkg_ens }
package { 'libaugeas-ruby': }
$ens_dir = $ensure ? { $ens_dir = $ensure ? {
'present' => 'directory', 'absent' => 'absent',
default => $ensure, default => 'directory',
} }
$facts_d = '/etc/facter/facts.d' $facts_d = '/etc/facter/facts.d'
File['/etc/facter'] -> File[$facts_d] File['/etc/facter'] -> File[$facts_d]
$pv_dir = $::puppet_vardir ? { $pv_dir = $::puppet_vardir ? {
'' => '/var/lib/puppet', '' => '/var/lib/puppet',
default => $::puppet_vardir default => $::puppet_vardir

View File

@@ -1,148 +1,70 @@
import 'defines/*.pp'
class puppet ( class puppet (
$ensure = 'present', $ensure = 'present',
$norunifloggedin = false, $version = undef,
$daemonize = true, $agent = true,
$run_hour = '*/1', $server = false,
$run_minute = '10', $facter_version = $ensure,
$run_if_ipmatch = '', $agent_cron = true,
$maxsleep = '3200' $puppetlabs_apt = true,
) { $agent_norunifloggedin = false,
$puppet_service = $::kernel ? { $agent_daemonize = true,
'Darwin' => 'org.macports.puppet', $agent_run_hour = '*/1',
'FreeBSD' => 'puppetd', $agent_run_minute = '10',
default => 'puppet' $agent_run_if_ipmatch = '',
} $agent_splay = true,
$factpath = '/var/lib/puppet/lib/facter' $server_dns_alt_names = undef,
$server_storeconfigs = false,
require 'puppet::common' $server_storeconfigs_backend = undef,
$server_basemodulepath = undef,
if !defined(Class['puppet::puppetlabs_apt']) { $server_reports = 'store',
require 'puppet::puppetlabs_apt' $server_passenger = true) {
if $puppetlabs_apt {
class { 'puppet::puppetlabs_apt': before => Class['puppet::facter'] }
} }
# @@puppet::puppetmaster::privatedir { $fqdn: l_fqdn => generate('/usr/bin/env', 'perl', '-e', '$_=shift;tr/[A-Z]/[a-z]/;print $_', if $version != undef {
# "$fqdn") } apt::pin { 'puppet':
version => $version,
case $::kernel { packages => 'puppet*',
'Linux' : { priority => '100',
$puppetpkgs = ['puppet', 'puppet-common']
Package {
provider => 'apt' }
if $::lsbdistcodename != 'squeeze' {
package{'ruby-msgpack': ensure => $ensure}
}
}
default : {
$puppetpkgs = 'puppet'
} }
} }
$puppet_linuxversion_real = $::PUPPET_VERSION_LINUX ? {
'' => 'latest', class { 'puppet::facter':
default => $::PUPPET_VERSION_LINUX, ensure => $facter_version,
} }
$pkg_ens = $ensure ? { ini_setting { 'puppet-templatedir':
'present' => $::kernel ? { path => '/etc/puppet/puppet.conf',
'Linux' => $puppet_linuxversion_real, section => 'main',
default => $ensure, setting => 'templatedir',
}, value => '$confidr/templates',
default => $ensure, ensure => 'absent';
}
package { $puppetpkgs:
ensure => $pkg_ens,
notify => Service[$puppet_service],
} }
service { $puppet_service: if $agent {
hasstatus => true, class { 'puppet::agent':
enable => $daemonize, ensure => $ensure,
ensure => $daemonize, version => $version,
} norunifloggedin => $agent_norunifloggedin,
$cron_real = $daemonize ? { daemonize => $agent_daemonize,
false => 'present', run_hour => $agent_run_hour,
true => 'absent', run_if_ipmatch => $agent_run_if_ipmatch,
default => $ensure, splay => $agent_splay,
cron => $agent_cron,
}
} }
cron { 'puppetrun': if $server {
command => '/usr/local/sbin/puppetd_run.sh', class { 'puppet::server':
user => 'root', ensure => $ensure,
minute => $run_minute, version => $version,
hour => $run_hour, dns_alt_names => $server_dns_alt_names,
ensure => $cron_real, storeconfigs => $server_storeconfigs,
storeconfigs_backend => $server_storeconfigs_backend,
reports => $server_reports,
basemodulepath => $server_basemodulepath,
passenger => $server_passenger;
}
} }
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',
},
}
}
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 ? {
'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"] ],
}
}

View File

@@ -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,
}
}

View File

@@ -1,5 +1,5 @@
class puppet::puppet-dashboard ($ensure = 'present') { class puppet::puppet-dashboard ($ensure = 'present') {
require 'puppet::common' require 'puppet::facter'
package { ['libjson-ruby', 'puppet-dashboard']: package { ['libjson-ruby', 'puppet-dashboard']:
ensure => $ensure, ensure => $ensure,

View File

@@ -1,52 +0,0 @@
class puppet::puppetmaster ($ensure = 'present', $puppetqd = false) {
require 'puppet::common'
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',
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 => '1d',
recurse => true,
backup => false,
}
# create [private] directories
# file { $puppet_privdir: ensure => directory }
# Puppet::Puppetmaster::Privatedir <<| |>>
}

73
manifests/server.pp Normal file
View File

@@ -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;
}
}

1
metadata.json Normal file
View File

@@ -0,0 +1 @@
{}

6
spec/spec.opts Normal file
View File

@@ -0,0 +1,6 @@
--format
s
--colour
--loadby
mtime
--backtrace

2
spec/spec_helper.rb Normal file
View File

@@ -0,0 +1,2 @@
require 'rubygems'
require 'puppetlabs_spec_helper/module_spec_helper'

View File

@@ -22,18 +22,26 @@ dbname=<%= scope.lookupvar('puppetmaster_dbname') %>
dbserver=<%= scope.lookupvar('puppetmaster_dbhost') %> dbserver=<%= scope.lookupvar('puppetmaster_dbhost') %>
dbuser=<%= scope.lookupvar('puppetmaster_dbuser') %> dbuser=<%= scope.lookupvar('puppetmaster_dbuser') %>
dbpassword=<%= scope.lookupvar('puppetmaster_dbpassword') %> dbpassword=<%= scope.lookupvar('puppetmaster_dbpassword') %>
hiera_config=/etc/puppet/hiera.yaml
<% end -%>
<% if server == "true" -%>
[master] [master]
ssl_client_header = SSL_CLIENT_S_DN ssl_client_header = SSL_CLIENT_S_DN
ssl_client_verify_header = SSL_CLIENT_VERIFY ssl_client_verify_header = SSL_CLIENT_VERIFY
reports=<%= scope.lookupvar('puppetmaster_reports') %> <% if scope['puppet::dns_alt_names'] -%>
<% if scope.lookupvar('puppetmaster_reporturl') != false -%> dns_alt_names=<%= scope['puppet::dns_alt_names'] %>
reporturl=<%= scope.lookupvar('puppetmaster_reporturl') %> <% end -%>
<% if scope['puppet::reports'] -%>
reports=<%= scope['puppet::reports'] %>
<% end -%> <% end -%>
modulepath=<%= scope.lookupvar('puppetmaster_modulepath') %> basemodulepath=<%= scope['puppet::basemodulepath'] %>
storeconfigs=true storeconfigs=<%= scope['puppet::storeconfigs'] %>
rails_loglevel=info <% if scope['puppet::storeconfigs_backend'] -%>
storeconfigs_backend=<%= scope['puppet::storeconfigs_backend'] %>
<% end -%> <% end -%>
<% end -%>
hiera_config=/etc/puppet/hiera.yaml
[agent] [agent]
# Make sure all log messages are sent to the right directory # Make sure all log messages are sent to the right directory
@@ -43,3 +51,4 @@ splay=true
report=true report=true
server=<%= scope.lookupvar("puppetmaster_server") %> server=<%= scope.lookupvar("puppetmaster_server") %>
configtimeout=720 configtimeout=720
environment=<%= @environment %>

View File

@@ -1,22 +1,21 @@
#!/usr/bin/env bash #!/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 # a wrapper script, to run puppetd after a random time
# this will be called by cron at the same time on each client, # 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. # 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 # not running if users are logged in
[[ $(who|wc -l) -gt 0 ]] && exit 0 [[ $(who|wc -l) -gt 0 ]] && exit 0
<% end -%> <% 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" PATH="/opt/local/bin:/opt/local/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
PUPPET=$(which puppet) PUPPET=$(which puppet)
[[ -e ${PUPPET} ]] || exit 1 [[ -e ${PUPPET} ]] || exit 1
PUPPET="${PUPPET}" PUPPET="${PUPPET}"
<% if run_if_ipmatch != "" -%> <% if @run_if_ipmatch != "" -%>
ISUNIIP=$(ifconfig |grep -c -e "<%= run_if_ipmatch %>") ISUNIIP=$(ifconfig |grep -c -e "<%= @run_if_ipmatch %>")
<% else -%> <% else -%>
ISUNIIP=1 ISUNIIP=1
<% end -%> <% end -%>
@@ -54,7 +53,7 @@ if [ ${ISUNIIP} -gt 0 ]; then
fi fi
fi fi
MAXSLEEP=<%= maxsleep %> #How many seconds to wait maximally #MAXSLEEP=<%= @maxsleep %> #How many seconds to wait maximally
SLEEP=${RANDOM} SLEEP=${RANDOM}
I=${RANDOM} I=${RANDOM}
@@ -64,7 +63,7 @@ if [ ${ISUNIIP} -gt 0 ]; then
SLEEP=${RANDOM} SLEEP=${RANDOM}
done done
# wait maximally $MAXSLEEP seconds # wait maximally $MAXSLEEP seconds
sleep $(expr ${SLEEP} % ${MAXSLEEP}) #sleep $(expr ${SLEEP} % ${MAXSLEEP})
# run puppetd # run puppetd
nice -n 12 $PUPPET agent -t 2&>>/var/log/puppet/puppetd_run.log nice -n 12 $PUPPET agent -t 2&>>/var/log/puppet/puppetd_run.log
fi fi

1
tests/init.pp Normal file
View File

@@ -0,0 +1 @@
include puppet