Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ To use this module, follow these directions:
repository placed under a directory called "common"

2. Add the following line to manifests/site.pp:

import "modules.pp"

3. Add the following line to manifests/modules.pp:
Expand Down
67 changes: 42 additions & 25 deletions manifests/classes/lsb_release.pp
Original file line number Diff line number Diff line change
Expand Up @@ -6,44 +6,61 @@

# Changelog:
# 2007-08-26: micah <[email protected]> reported, that lsb_release can report
# nonsensical values for lsbdistcodename; assert_lsbdistcodename now
# recognises "n/a" and acts accordingly
# nonsensical values for lsbdistcodename; assert_lsbdistcodename now
# recognises "n/a" and acts accordingly

# This lightweight class only asserts that $lsbdistcodename is set.
# If the assertion fails, an error is printed on the server
#
#
# To fail individual resources on a missing lsbdistcodename, require
# Exec[assert_lsbdistcodename] on the specific resource
#
# This is just one example of how you could avoid evaluation of parts of the
# manifest, before a bootstrapping class has enabled all the necessary goodies.
class assert_lsbdistcodename {

case $lsbdistcodename {
'': {
err("Please install lsb_release or set facter_lsbdistcodename in the environment of $fqdn")
exec { "false # assert_lsbdistcodename": alias => assert_lsbdistcodename, loglevel => err }
}
'n/a': {
case $operatingsystem {
"Debian": {
err("lsb_release was unable to report your distcodename; This seems to indicate a broken apt/sources.list on $fqdn")
}
default: {
err("lsb_release was unable to report your distcodename; please set facter_lsbdistcodename in the environment of $fqdn")
}
}
exec { "false # assert_lsbdistcodename": alias => assert_lsbdistcodename, loglevel => err }
}
default: {
exec { "true # assert_lsbdistcodename": alias => assert_lsbdistcodename, loglevel => debug }
exec { "true # require_lsbdistcodename": alias => require_lsbdistcodename, loglevel => debug }
}
}
case $::lsbdistcodename {
'': {
err("Please install lsb_release or set facter_lsbdistcodename in the environment of ${::fqdn}")
exec {
'false # assert_lsbdistcodename':
alias => assert_lsbdistcodename,
loglevel => err
}
}
'n/a': {
case $::operatingsystem {
'Debian': {
err("lsb_release was unable to report your distcodename; This seems to indicate a broken apt/sources.list on ${::fqdn}")
}
default: {
err("lsb_release was unable to report your distcodename; please set facter_lsbdistcodename in the environment of ${::fqdn}")
}
}
exec {
'false # assert_lsbdistcodename':
alias => assert_lsbdistcodename,
loglevel => err
}
}
default: {
exec {
'true # assert_lsbdistcodename':
alias => assert_lsbdistcodename,
loglevel => debug
}
exec { 'true # require_lsbdistcodename':
alias => require_lsbdistcodename,
loglevel => debug }
}
}

}

# To fail the complete compilation on a missing $lsbdistcodename, include this class
class require_lsbdistcodename inherits assert_lsbdistcodename {
exec { "false # require_lsbdistcodename": require => Exec[require_lsbdistcodename], loglevel => err }
exec {
'false # require_lsbdistcodename':
require => Exec[require_lsbdistcodename],
loglevel => err }
}
12 changes: 6 additions & 6 deletions manifests/defines/append_if_no_such_line.pp
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@
# least named according to a proper resource model.
#
define append_if_no_such_line($file, $line) {
line {
$name:
ensure => present,
file => $file,
line => $line;
}
line {
[$name]:
ensure => present,
file => $file,
line => $line;
}
}

153 changes: 83 additions & 70 deletions manifests/defines/concatenated_file.pp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
# Copyright (C) 2007 David Schmitt <[email protected]>
# See LICENSE for the full license granted to you.

module_dir { "common/cf": }
module_dir { 'common/cf': }

# TODO:
# * create the directory in _part too
Expand All @@ -24,94 +24,107 @@
#
# Depend on File[$name] to change if and only if its contents change. Notify
# Exec["concat_${name}"] if you want to force an update.
#
#
# Usage:
# concatenated_file { "/etc/some.conf":
# dir => "/etc/some.conf.d",
# dir => "/etc/some.conf.d",
# }
define concatenated_file (
# where the snippets are located
$dir = '',
# a file with content to prepend
$header = '',
# a file with content to append
$footer = '',
# default permissions for the target file
$mode = 0644, $owner = root, $group = 0
)
# where the snippets are located
$dir = '',
# a file with content to prepend
$header = '',
# a file with content to append
$footer = '',
# default permissions for the target file
$mode = 0644, $owner = root, $group = 0
)
{

$dir_real = $dir ? { '' => "${name}.d", default => $dir }
$dir_real = $dir ? { '' => "${name}.d", default => $dir }

$tmp_file_name = regsubst($dir_real, '/', '_', 'G')
$tmp_file = "${module_dir_path}/${tmp_file_name}"
$tmp_file_name = regsubst($dir_real, '/', '_', 'G')
$tmp_file = "${::module_dir_path}/${tmp_file_name}"

if defined(File[$dir_real]) {
debug("${dir_real} already defined")
} else {
file {
$dir_real:
source => "puppet:///modules/common/empty",
checksum => mtime,
ignore => '.ignore',
recurse => true, purge => true, force => true,
mode => $mode, owner => $owner, group => $group,
notify => Exec["concat_${name}"];
}
}
if defined(File[$dir_real]) {
debug("${dir_real} already defined")
} else {
file {
$dir_real:
source => 'puppet:///modules/common/empty',
checksum => mtime,
ignore => '.ignore',
recurse => true,
purge => true,
force => true,
mode => $mode,
owner => $owner,
group => $group,
notify => Exec["concat_${name}"];
}
}

file {
$tmp_file:
ensure => present, checksum => md5,
mode => $mode, owner => $owner, group => $group;
# decouple the actual file from the generation process by using a
# temporary file and puppet's source mechanism. This ensures that events
# for notify/subscribe will only be generated when there is an actual
# change.
$name:
ensure => present, checksum => md5,
source => $tmp_file,
mode => $mode, owner => $owner, group => $group,
require => File[$tmp_file];
}
file {
$tmp_file:
ensure => present,
checksum => md5,
mode => $mode,
owner => $owner,
group => $group;
# decouple the actual file from the generation process by using a
# temporary file and puppet's source mechanism. This ensures that events
# for notify/subscribe will only be generated when there is an actual
# change.
$name:
ensure => present,
checksum => md5,
source => $tmp_file,
mode => $mode,
owner => $owner,
group => $group,
require => File[$tmp_file];
}

# if there is a header or footer file, add it
$additional_cmd = $header ? {
'' => $footer ? {
'' => '',
default => "| cat - '${footer}' "
},
default => $footer ? {
'' => "| cat '${header}' - ",
default => "| cat '${header}' - '${footer}' "
}
}
# if there is a header or footer file, add it
$additional_cmd = $header ? {
'' => $footer ? {
'' => '',
default => "| cat - '${footer}' "
},
default => $footer ? {
'' => "| cat '${header}' - ",
default => "| cat '${header}' - '${footer}' "
}
}

# use >| to force clobbering the target file
exec { "concat_${name}":
command => "/usr/bin/find ${dir_real} -maxdepth 1 -type f ! -name '*puppettmp' -print0 | sort -z | xargs -0 cat ${additional_cmd} >| ${tmp_file}",
subscribe => [ File[$dir_real] ],
before => File[$tmp_file],
alias => [ "concat_${dir_real}"],
loglevel => info
}
# use >| to force clobbering the target file
exec { "concat_${name}":
command => "/usr/bin/find ${dir_real} -maxdepth 1 -type f ! -name '*puppettmp' -print0 | sort -z | xargs -0 cat ${additional_cmd} >| ${tmp_file}",
subscribe => [ File[$dir_real] ],
before => File[$tmp_file],
alias => [ "concat_${dir_real}"],
loglevel => info
}

}


# Add a snippet called $name to the concatenated_file at $dir.
# The file can be referenced as File["cf_part_${name}"]
define concatenated_file_part (
$dir, $content = '', $ensure = present,
$mode = 0644, $owner = root, $group = 0
)
$dir, $content = '', $ensure = present,
$mode = 0644, $owner = root, $group = 0
)
{

file { "${dir}/${name}":
ensure => $ensure, content => $content,
mode => $mode, owner => $owner, group => $group,
alias => "cf_part_${name}",
notify => Exec["concat_${dir}"],
}
file { "${dir}/${name}":
ensure => $ensure,
content => $content,
mode => $mode,
owner => $owner,
group => $group,
alias => "cf_part_${name}",
notify => Exec["concat_${dir}"],
}

}
71 changes: 37 additions & 34 deletions manifests/defines/config_file.pp
Original file line number Diff line number Diff line change
Expand Up @@ -3,58 +3,61 @@
# See LICENSE for the full license granted to you.

# A simple wrapper to give all configuration files common defaults.
#
#
# Usage:
# config_file { filename:
# content => "....\n",
# content => "....\n",
# }
#
# Examples:
# Examples:
#
# To create the file /etc/vservers/${vs_name}/context with specific
# content:
#
# config_file {
# "/etc/vservers/${vs_name}/context":
# content => "${context}\n",
# notify => Exec["vs_restart_${vs_name}"],
# require => Exec["vs_create_${vs_name}"];
# "/etc/vservers/${vs_name}/context":
# content => "${context}\n",
# notify => Exec["vs_restart_${vs_name}"],
# require => Exec["vs_create_${vs_name}"];
# }
#
# To create the file /etc/apache2/sites-available/munin-stats with the
# content pulled from a template:
#
# config_file {
# "/etc/apache2/sites-available/munin-stats":
# content => template("apache/munin-stats"),
# require => Package["apache2"],
# notify => Exec["reload-apache2"];
# "/etc/apache2/sites-available/munin-stats":
# content => template("apache/munin-stats"),
# require => Package["apache2"],
# notify => Exec["reload-apache2"];
# }
define config_file (
$content = '',
$source = '',
$ensure = 'present')
{
file { $name:
ensure => $ensure,
# keep old versions on the server
backup => server,
# default permissions for config files
mode => 0644, owner => root, group => 0,
# really detect changes to this file
checksum => md5,
}
$content = '',
$source = '',
$ensure = 'present')
{
file {
[$name]:
ensure => $ensure,
# keep old versions on the server
backup => server,
# default permissions for config files
mode => '0644',
owner => root,
group => 0,
# really detect changes to this file
checksum => md5,
}

case $source {
'': { }
default: { File[$name] { source => $source } }
}

case $source {
'': { }
default: { File[$name] { source => $source } }
}
case $content {
'': { }
default: { File[$name] { content => $content } }
}

case $content {
'': { }
default: { File[$name] { content => $content } }
}

}
}


Loading