aboutsummaryrefslogtreecommitdiff
path: root/manifests/defines/concatenated_file.pp
diff options
context:
space:
mode:
Diffstat (limited to 'manifests/defines/concatenated_file.pp')
-rw-r--r--manifests/defines/concatenated_file.pp47
1 files changed, 34 insertions, 13 deletions
diff --git a/manifests/defines/concatenated_file.pp b/manifests/defines/concatenated_file.pp
index 5a5144e..3741eea 100644
--- a/manifests/defines/concatenated_file.pp
+++ b/manifests/defines/concatenated_file.pp
@@ -4,14 +4,31 @@
# Copyright (C) 2007 David Schmitt <david@schmitt.edv-bus.at>
# See LICENSE for the full license granted to you.
+module_dir { "common/cf": }
+
# TODO:
# * create the directory in _part too
+# This resource collects file snippets from a directory ($dir) and concatenates
+# them in lexical order of their names into a new file ($name). This can be
+# used to collect information from disparate sources, when the target file
+# format doesn't allow includes.
+#
+# concatenated_file_part can be used to easily configure content for this.
+#
+# If no $dir is specified, the target name with '.d' appended will be used.
+#
+# The $dir is purged by puppet and will only contain explicitely configured
+# files. This can be overridden by defining the directory before the
+# concatenated_file.
+#
+# 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",
# }
-# Use Exec["concat_$name"] as Semaphor
define concatenated_file (
# where the snippets are located
$dir = '',
@@ -19,12 +36,16 @@ define concatenated_file (
$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 }
+ $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 {
@@ -40,9 +61,18 @@ define concatenated_file (
}
file {
- $name:
+ $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
@@ -59,21 +89,12 @@ define concatenated_file (
# 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} >| ${name}",
+ command => "/usr/bin/find ${dir_real} -maxdepth 1 -type f ! -name '*puppettmp' -print0 | sort -z | xargs -0 cat ${additional_cmd} >| ${tmp_file}",
refreshonly => true,
subscribe => [ File[$dir_real] ],
- before => File[$name],
+ before => File[$tmp_file],
alias => [ "concat_${dir_real}"] ,
}
- #case $header {
- #'': {}
- #default: { Exec["concat_${name}"] { subscribe +> File[$header] } }
- #}
-
- #case $footer {
- #'': {}
- #default: { Exec["concat_${name}"] { subscribe +> File[$footer] } }
- #}
}