2013-05-09 21:24:22 +02:00
|
|
|
# == Define: concat
|
2010-05-06 23:55:02 +02:00
|
|
|
#
|
2012-04-11 23:09:50 +02:00
|
|
|
# Sets up so that you can use fragments to build a final config file,
|
2010-05-06 23:55:02 +02:00
|
|
|
#
|
2013-05-09 21:24:22 +02:00
|
|
|
# === Options:
|
|
|
|
#
|
2013-08-17 18:35:44 +02:00
|
|
|
# [*ensure*]
|
|
|
|
# Present/Absent
|
2013-05-09 21:24:22 +02:00
|
|
|
# [*path*]
|
|
|
|
# The path to the final file. Use this in case you want to differentiate
|
|
|
|
# between the name of a resource and the file path. Note: Use the name you
|
|
|
|
# provided in the target of your fragments.
|
|
|
|
# [*owner*]
|
|
|
|
# Who will own the file
|
|
|
|
# [*group*]
|
|
|
|
# Who will own the file
|
2013-10-22 21:43:43 +02:00
|
|
|
# [*mode*]
|
|
|
|
# The mode of the final file
|
2013-05-09 21:24:22 +02:00
|
|
|
# [*force*]
|
|
|
|
# Enables creating empty files if no fragments are present
|
|
|
|
# [*warn*]
|
|
|
|
# Adds a normal shell style comment top of the file indicating that it is
|
|
|
|
# built by puppet
|
2013-10-22 21:43:43 +02:00
|
|
|
# [*warn_message*]
|
|
|
|
# A custom message string that overides the default.
|
|
|
|
# [*force*]
|
2013-05-09 21:24:22 +02:00
|
|
|
# [*backup*]
|
|
|
|
# Controls the filebucketing behavior of the final file and see File type
|
|
|
|
# reference for its use. Defaults to 'puppet'
|
|
|
|
# [*replace*]
|
|
|
|
# Whether to replace a file that already exists on the local system
|
2013-10-22 21:43:43 +02:00
|
|
|
# [*order*]
|
|
|
|
# [*ensure_newline*]
|
2013-10-29 23:39:54 +01:00
|
|
|
# [*gnu*]
|
|
|
|
# Deprecated
|
2013-05-09 21:24:22 +02:00
|
|
|
#
|
|
|
|
# === Actions:
|
|
|
|
# * Creates fragment directories if it didn't exist already
|
|
|
|
# * Executes the concatfragments.sh script to build the final file, this
|
|
|
|
# script will create directory/fragments.concat. Execution happens only
|
|
|
|
# when:
|
|
|
|
# * The directory changes
|
|
|
|
# * fragments.concat != final destination, this means rebuilds will happen
|
|
|
|
# whenever someone changes or deletes the final file. Checking is done
|
|
|
|
# using /usr/bin/cmp.
|
|
|
|
# * The Exec gets notified by something else - like the concat::fragment
|
|
|
|
# define
|
|
|
|
# * Copies the file over to the final destination using a file resource
|
|
|
|
#
|
|
|
|
# === Aliases:
|
|
|
|
#
|
|
|
|
# * The exec can notified using Exec["concat_/path/to/file"] or
|
|
|
|
# Exec["concat_/path/to/directory"]
|
|
|
|
# * The final file can be referened as File["/path/to/file"] or
|
|
|
|
# File["concat_/path/to/file"]
|
2010-05-06 23:55:02 +02:00
|
|
|
#
|
2012-06-23 23:45:57 +02:00
|
|
|
define concat(
|
2013-10-22 17:53:18 +02:00
|
|
|
$ensure = 'present',
|
|
|
|
$path = $name,
|
2013-10-24 17:48:37 +02:00
|
|
|
$owner = undef,
|
2013-10-22 17:53:18 +02:00
|
|
|
$group = undef,
|
|
|
|
$mode = '0644',
|
|
|
|
$warn = false,
|
2013-10-22 21:43:43 +02:00
|
|
|
$warn_message = undef,
|
2013-10-22 17:53:18 +02:00
|
|
|
$force = false,
|
|
|
|
$backup = 'puppet',
|
|
|
|
$replace = true,
|
|
|
|
$order = 'alpha',
|
2013-10-29 23:39:54 +01:00
|
|
|
$ensure_newline = false,
|
|
|
|
$gnu = undef,
|
2012-06-23 23:45:57 +02:00
|
|
|
) {
|
2013-10-22 21:43:43 +02:00
|
|
|
validate_re($ensure, '^present$|^absent$')
|
|
|
|
validate_absolute_path($path)
|
|
|
|
validate_string($owner)
|
|
|
|
validate_string($group)
|
|
|
|
validate_string($mode)
|
|
|
|
validate_bool($warn)
|
|
|
|
validate_string($warn_message)
|
|
|
|
validate_bool($force)
|
|
|
|
validate_string($backup)
|
|
|
|
validate_bool($replace)
|
|
|
|
validate_re($order, '^alpha$|^numeric$')
|
|
|
|
validate_bool($ensure_newline)
|
2013-10-29 23:39:54 +01:00
|
|
|
if $gnu {
|
|
|
|
warning('The $gnu parameter to concat is deprecated and has no effect')
|
|
|
|
}
|
2013-10-22 21:43:43 +02:00
|
|
|
|
2012-07-11 23:52:31 +02:00
|
|
|
include concat::setup
|
|
|
|
|
2013-09-02 13:49:40 +02:00
|
|
|
$safe_name = regsubst($name, '[/:]', '_', 'G')
|
2013-10-22 17:53:18 +02:00
|
|
|
$concatdir = $concat::setup::concatdir
|
|
|
|
$fragdir = "${concatdir}/${safe_name}"
|
|
|
|
$concat_name = 'fragments.concat.out'
|
2013-09-02 13:49:40 +02:00
|
|
|
$script_command = $concat::setup::script_command
|
2012-03-14 18:02:43 +01:00
|
|
|
$default_warn_message = '# This file is managed by Puppet. DO NOT EDIT.'
|
2010-05-06 23:55:02 +02:00
|
|
|
|
2013-10-22 21:43:43 +02:00
|
|
|
if $warn == true {
|
|
|
|
$use_warn_message = $warn_message ? {
|
|
|
|
undef => $default_warn_message,
|
|
|
|
default => $warn_message,
|
2012-06-23 23:45:57 +02:00
|
|
|
}
|
2013-10-22 21:43:43 +02:00
|
|
|
} else {
|
|
|
|
$use_warn_message = undef
|
2012-03-14 18:02:43 +01:00
|
|
|
}
|
2010-10-04 23:02:32 +02:00
|
|
|
|
2013-11-02 02:52:59 +01:00
|
|
|
$warnmsg_escaped = regsubst($use_warn_message, '\'', '\'\\\'\'', 'G')
|
2012-03-14 18:02:43 +01:00
|
|
|
$warnflag = $warnmsg_escaped ? {
|
|
|
|
'' => '',
|
|
|
|
default => "-w '${warnmsg_escaped}'"
|
|
|
|
}
|
2010-05-06 23:55:02 +02:00
|
|
|
|
2013-10-22 21:43:43 +02:00
|
|
|
$forceflag = $force ? {
|
|
|
|
true => '-f',
|
|
|
|
false => '',
|
2012-03-14 18:02:43 +01:00
|
|
|
}
|
2010-05-06 23:55:02 +02:00
|
|
|
|
2013-10-22 21:43:43 +02:00
|
|
|
$orderflag = $order ? {
|
|
|
|
'numeric' => '-n',
|
|
|
|
'alpha' => '',
|
2012-03-14 18:02:43 +01:00
|
|
|
}
|
2010-12-03 21:35:23 +01:00
|
|
|
|
2013-10-22 21:43:43 +02:00
|
|
|
$newlineflag = $ensure_newline ? {
|
|
|
|
true => '-l',
|
|
|
|
false => '',
|
2013-08-07 01:26:50 +02:00
|
|
|
}
|
|
|
|
|
2012-06-23 23:45:57 +02:00
|
|
|
File {
|
2013-10-24 00:42:44 +02:00
|
|
|
backup => false,
|
2012-03-14 18:02:43 +01:00
|
|
|
}
|
2010-05-06 23:55:02 +02:00
|
|
|
|
2013-08-17 18:35:44 +02:00
|
|
|
if $ensure == 'present' {
|
|
|
|
file { $fragdir:
|
|
|
|
ensure => directory,
|
2013-11-02 02:20:41 +01:00
|
|
|
mode => '0750',
|
2013-08-17 18:35:44 +02:00
|
|
|
}
|
2010-05-06 23:55:02 +02:00
|
|
|
|
2013-08-17 18:35:44 +02:00
|
|
|
file { "${fragdir}/fragments":
|
2013-10-22 17:53:18 +02:00
|
|
|
ensure => directory,
|
2013-11-02 02:20:41 +01:00
|
|
|
mode => '0750',
|
2013-10-22 17:53:18 +02:00
|
|
|
force => true,
|
|
|
|
ignore => ['.svn', '.git', '.gitignore'],
|
|
|
|
notify => Exec["concat_${name}"],
|
|
|
|
purge => true,
|
|
|
|
recurse => true,
|
2013-08-17 18:35:44 +02:00
|
|
|
}
|
2010-05-06 23:55:02 +02:00
|
|
|
|
2013-08-17 18:35:44 +02:00
|
|
|
file { "${fragdir}/fragments.concat":
|
2013-10-22 17:53:18 +02:00
|
|
|
ensure => present,
|
2013-11-02 02:20:41 +01:00
|
|
|
mode => '0640',
|
2013-08-17 18:35:44 +02:00
|
|
|
}
|
2010-05-06 23:55:02 +02:00
|
|
|
|
2013-08-17 18:35:44 +02:00
|
|
|
file { "${fragdir}/${concat_name}":
|
2013-10-22 17:53:18 +02:00
|
|
|
ensure => present,
|
2013-11-02 02:20:41 +01:00
|
|
|
mode => '0640',
|
2013-08-17 18:35:44 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
file { $name:
|
2013-11-02 02:20:41 +01:00
|
|
|
ensure => present,
|
|
|
|
owner => $owner,
|
|
|
|
group => $group,
|
|
|
|
mode => $mode,
|
|
|
|
replace => $replace,
|
|
|
|
path => $path,
|
|
|
|
alias => "concat_${name}",
|
|
|
|
source => "${fragdir}/${concat_name}",
|
|
|
|
backup => $backup,
|
2013-08-17 18:35:44 +02:00
|
|
|
}
|
2010-05-06 23:55:02 +02:00
|
|
|
|
2013-10-30 05:44:14 +01:00
|
|
|
# remove extra whitespace from string interpolation to make testing easier
|
2013-09-02 13:49:40 +02:00
|
|
|
$command = strip(regsubst("${script_command} -o ${fragdir}/${concat_name} -d ${fragdir} ${warnflag} ${forceflag} ${orderflag} ${newlineflag}", '\s+', ' ', 'G'))
|
2013-10-22 21:43:43 +02:00
|
|
|
|
2013-10-30 05:44:14 +01:00
|
|
|
# if puppet is running as root, this exec should also run as root to allow
|
|
|
|
# the concatfragments.sh script to potentially be installed in path that
|
|
|
|
# may not be accessible by a target non-root owner.
|
2013-08-17 18:35:44 +02:00
|
|
|
exec { "concat_${name}":
|
2013-10-22 21:43:43 +02:00
|
|
|
alias => "concat_${fragdir}",
|
|
|
|
command => $command,
|
|
|
|
notify => File[$name],
|
|
|
|
subscribe => File[$fragdir],
|
|
|
|
unless => "${command} -t",
|
2013-09-02 13:49:40 +02:00
|
|
|
path => $::path,
|
2013-10-22 21:43:43 +02:00
|
|
|
require => [
|
2013-08-17 18:35:44 +02:00
|
|
|
File[$fragdir],
|
|
|
|
File["${fragdir}/fragments"],
|
|
|
|
File["${fragdir}/fragments.concat"],
|
|
|
|
],
|
|
|
|
}
|
2013-10-24 17:48:37 +02:00
|
|
|
} else {
|
2013-10-22 17:53:18 +02:00
|
|
|
file { [
|
|
|
|
$fragdir,
|
|
|
|
"${fragdir}/fragments",
|
|
|
|
"${fragdir}/fragments.concat",
|
|
|
|
"${fragdir}/${concat_name}"
|
|
|
|
]:
|
|
|
|
ensure => absent,
|
|
|
|
force => true,
|
|
|
|
}
|
|
|
|
|
|
|
|
file { $name:
|
|
|
|
ensure => absent,
|
2013-10-24 00:42:44 +02:00
|
|
|
backup => $backup,
|
2013-08-17 18:35:44 +02:00
|
|
|
}
|
2012-06-23 23:45:57 +02:00
|
|
|
|
2013-09-02 13:49:40 +02:00
|
|
|
$absent_exec_command = $::kernel ? {
|
|
|
|
'windows' => 'cmd.exe /c exit 0',
|
|
|
|
default => 'true',
|
|
|
|
}
|
|
|
|
|
|
|
|
$absent_exec_path = $::kernel ? {
|
|
|
|
'windows' => $::path,
|
|
|
|
default => '/bin:/usr/bin',
|
|
|
|
}
|
|
|
|
|
2013-08-17 18:35:44 +02:00
|
|
|
exec { "concat_${name}":
|
|
|
|
alias => "concat_${fragdir}",
|
2013-09-02 13:49:40 +02:00
|
|
|
command => $absent_exec_command,
|
|
|
|
path => $absent_exec_path
|
2010-05-06 23:55:02 +02:00
|
|
|
}
|
2012-03-14 18:02:43 +01:00
|
|
|
}
|
2010-05-06 23:55:02 +02:00
|
|
|
}
|
2012-06-23 23:45:57 +02:00
|
|
|
|
|
|
|
# vim:sw=2:ts=2:expandtab:textwidth=79
|