module-common/manifests/defines/concatenated_file.pp

96 lines
2.3 KiB
ObjectPascal
Raw Normal View History

# common/manifests/defines/concatenated_file.pp -- create a file from snippets
# stored in a directory
#
# Copyright (C) 2007 David Schmitt <david@schmitt.edv-bus.at>
# See LICENSE for the full license granted to you.
# TODO:
# * create the directory in _part too
# Usage:
# concatenated_file { "/etc/some.conf":
# dir => "/etc/some.conf.d",
# }
# Use Exec["concat_$name"] as Semaphor
define concatenated_file (
# where the snippets are located
$dir = '',
# a file with content to prepend
$header = '',
# a file with content to append
$footer = '',
$mode = 0644, $owner = root, $group = 0
)
{
$dir_real = $dir ? { '' => "${name}.d", default => $dir }
if defined(File[$dir_real]) {
debug("${dir_real} already defined")
} else {
file {
$dir_real:
source => "puppet:///common/empty",
checksum => mtime,
recurse => true, purge => true, force => true,
mode => $mode, owner => $owner, group => $group,
notify => Exec["concat_${name}"];
}
}
file {
$name:
ensure => present, checksum => md5,
mode => $mode, owner => $owner, group => $group;
}
# 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
2008-04-06 17:36:22 +02:00
exec { "concat_${name}":
command => "/usr/bin/find ${dir_real} -maxdepth 1 -type f ! -name '*puppettmp' -print0 | sort -z | xargs -0 cat ${additional_cmd} >| ${name}",
refreshonly => true,
2008-04-06 17:36:22 +02:00
subscribe => [ File[$dir_real] ],
before => File[$name],
2008-04-06 17:36:22 +02:00
alias => [ "concat_${dir_real}"] ,
}
2008-04-06 17:36:22 +02:00
#case $header {
#'': {}
#default: { Exec["concat_${name}"] { subscribe +> File[$header] } }
#}
#case $footer {
#'': {}
#default: { Exec["concat_${name}"] { subscribe +> File[$footer] } }
#}
}
# 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
)
{
file { "${dir}/${name}":
ensure => $ensure, content => $content,
mode => $mode, owner => $owner, group => $group,
alias => "cf_part_${name}",
notify => Exec["concat_${dir}"],
}
}