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
# [ * 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" ]
2013-12-23 22:23:49 +01:00
# * The final file can be referenced as File [ "/path/to/file" ] or
2013-05-09 21:24:22 +02:00
# 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
$e nsure = '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 ,
$f orce = false ,
$bac kup = 'puppet' ,
$ replace = true ,
$ order = 'alpha' ,
2013-10-29 23:39:54 +01:00
$e nsure_newline = false ,
2013-11-12 11:36:34 +01:00
$ gnu = undef
2012-06-23 23:45:57 +02:00
) {
2013-10-22 21:43:43 +02:00
validate_re( $e nsure, '^present$|^absent$' )
validate_absolute_path( $ path)
validate_string( $ owner)
validate_string( $ group)
validate_string( $ mode)
2013-12-23 22:23:49 +01:00
if ! ( is_string( $ warn) or $ warn = = true or $ warn = = false ) {
fail( '$warn is not a string or boolean' )
}
2013-10-22 21:43:43 +02:00
validate_bool( $f orce)
2014-09-05 22:21:29 +02:00
if ! concat_is_bool( $bac kup) and ! is_string( $bac kup) {
2014-08-13 08:50:08 +02:00
fail( '$backup must be string or bool!' )
}
2013-10-22 21:43:43 +02:00
validate_bool( $ replace)
validate_re( $ order, '^alpha$|^numeric$' )
validate_bool( $e nsure_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
$c oncatdir = $c oncat: : setup: : concatdir
$f ragdir = "${concatdir}/${safe_name}"
$c oncat_name = 'fragments.concat.out'
2013-09-02 13:49:40 +02:00
$ script_command = $c oncat: : setup: : script_command
2012-03-14 18:02:43 +01:00
$defa ult_warn_message = '# This file is managed by Puppet. DO NOT EDIT.'
2013-12-23 22:23:49 +01:00
$b ool_warn_message = 'Using stringified boolean values (\' true \ ', \' yes\ ', \' on\ ', \' false \ ', \' no\ ', \' off\ ') to represent boolean true/false as the $warn parameter to concat is deprecated and will be treated as the warning message in a future release'
2010-05-06 23:55:02 +02:00
2013-12-23 22:23:49 +01:00
case $ warn {
true : {
$ warn_message = $defa ult_warn_message
}
'true' , 'yes' , 'on' : {
warning( $b ool_warn_message)
$ warn_message = $defa ult_warn_message
}
false : {
$ warn_message = ''
}
'false' , 'no' , 'off' : {
warning( $b ool_warn_message)
$ warn_message = ''
}
default : {
$ warn_message = $ warn
2012-06-23 23:45:57 +02:00
}
2012-03-14 18:02:43 +01:00
}
2010-10-04 23:02:32 +02:00
2013-12-23 22:23:49 +01:00
$ warnmsg_escaped = regsubst( $ 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
$f orceflag = $f orce ? {
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 = $e nsure_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 $e nsure = = 'present' {
file { $f ragdir:
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 = > $bac kup,
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
2014-02-21 19:17:41 +01:00
$c ommand = 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 = > $c ommand,
notify = > File [ $ name ] ,
subscribe = > File [ $f ragdir] ,
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 [ $f ragdir] ,
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 { [
$f ragdir,
"${fragdir}/fragments" ,
"${fragdir}/fragments.concat" ,
"${fragdir}/${concat_name}"
] :
ensure = > absent,
force = > true ,
}
2014-01-21 22:28:42 +01:00
file { $ path:
2013-10-22 17:53:18 +02:00
ensure = > absent,
2013-10-24 00:42:44 +02:00
backup = > $bac kup,
2013-08-17 18:35:44 +02:00
}
2012-06-23 23:45:57 +02:00
2013-09-02 13:49:40 +02:00
$ab sent_exec_command = $ : : kernel ? {
'windows' = > 'cmd.exe /c exit 0' ,
default = > 'true' ,
}
$ab sent_exec_path = $ : : kernel ? {
'windows' = > $ : : path,
default = > '/bin:/usr/bin' ,
}
2014-09-08 20:24:29 +02:00
# Need to have an unless here for idempotency.
2013-08-17 18:35:44 +02:00
exec { "concat_${name} " :
alias = > "concat_${fragdir}" ,
2013-09-02 13:49:40 +02:00
command = > $ab sent_exec_command,
2014-09-08 20:24:29 +02:00
unless = > $ab sent_exec_command,
path = > $ab sent_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= 7 9