summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--files/concatfragments.sh13
-rw-r--r--manifests/init.pp18
2 files changed, 25 insertions, 6 deletions
diff --git a/files/concatfragments.sh b/files/concatfragments.sh
index b486047..6ae4d83 100644
--- a/files/concatfragments.sh
+++ b/files/concatfragments.sh
@@ -26,6 +26,7 @@
# is generated by puppet
# -f Enables the creation of empty output files when no fragments are found
# -n Sort the output numerically rather than the default alpha sort
+# -g Do NOT use the GNU entensions to find, xargs and sort; might cause problems on suitably funky filenames
#
# the command:
#
@@ -43,7 +44,10 @@ WORKDIR=""
TEST=""
FORCE=""
WARN=""
-SORTARG="-z"
+SORT1="-z"
+SORT2=""
+FINDARG="-print0"
+XARGSARG="-0"
PATH=/sbin:/usr/sbin:/bin:/usr/bin
@@ -51,15 +55,18 @@ while getopts "o:s:d:tnw:f" options; do
case $options in
o ) OUTFILE=$OPTARG;;
d ) WORKDIR=$OPTARG;;
- n ) SORTARG="-zn";;
+ n ) SORT2="-n";;
w ) WARNMSG="$OPTARG";;
f ) FORCE="true";;
t ) TEST="true";;
+ g ) FINDARG="" ; XARGSARG="" ; SORT1="" ;;
* ) echo "Specify output file with -o and fragments directory with -d"
exit 1;;
esac
done
+SORTARG="$SORT1 $SORT2"
+
# do we have -o?
if [ x${OUTFILE} = "x" ]; then
echo "Please specify an output file with -o"
@@ -108,7 +115,7 @@ else
fi
# find all the files in the fragments directory, sort them numerically and concat to fragments.concat in the working dir
-find fragments/ -type f -follow -print0 |sort ${SORTARG}|xargs -0 cat >>"fragments.concat"
+find fragments/ -type f -follow $FINDARG |sort ${SORTARG}|xargs $XARGSARG cat >>"fragments.concat"
if [ x${TEST} = "x" ]; then
# This is a real run, copy the file to outfile
diff --git a/manifests/init.pp b/manifests/init.pp
index b94411c..909d7b6 100644
--- a/manifests/init.pp
+++ b/manifests/init.pp
@@ -87,7 +87,7 @@
# 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"]
-define concat($mode = 0644, $owner = "root", $group = "root", $warn = "false", $force = "false", $backup = "puppet") {
+define concat($mode = 0644, $owner = "root", $group = "root", $warn = "false", $force = "false", $backup = "puppet", $gnu = "true", $order="alpha") {
$safe_name = regsubst($name, '/', '_', 'G')
$concatdir = $concat::setup::concatdir
$version = $concat::setup::majorversion
@@ -113,6 +113,18 @@ define concat($mode = 0644, $owner = "root", $group = "root", $warn = "false", $
default: { fail("Improper 'force' value given to concat: $force") }
}
+ case $gnu {
+ 'true',true,yes,on: { $gnuflag = "" }
+ 'false',false,no,off: { $gnuflag = "-g" }
+ default: { fail("Improper 'gnu' value given to concat: $gnu") }
+ }
+
+ case $order {
+ numeric: { $orderflag = "-n" }
+ alpha: { $orderflag = "" }
+ default: { fail("Improper 'order' value given to concat: $order") }
+ }
+
File{
owner => root,
group => root,
@@ -158,7 +170,7 @@ define concat($mode = 0644, $owner = "root", $group = "root", $warn = "false", $
subscribe => File[$fragdir],
alias => "concat_${fragdir}",
require => [ File["/usr/local/bin/concatfragments.sh"], File[$fragdir], File["${fragdir}/fragments"], File["${fragdir}/fragments.concat"] ],
- unless => "/usr/local/bin/concatfragments.sh -o ${fragdir}/${concat_name} -d ${fragdir} -t ${warnflag} ${forceflag}",
- command => "/usr/local/bin/concatfragments.sh -o ${fragdir}/${concat_name} -d ${fragdir} ${warnflag} ${forceflag}",
+ unless => "/usr/local/bin/concatfragments.sh -o ${fragdir}/${concat_name} -d ${fragdir} -t ${warnflag} ${forceflag} ${orderflag} ${gnuflag}",
+ command => "/usr/local/bin/concatfragments.sh -o ${fragdir}/${concat_name} -d ${fragdir} ${warnflag} ${forceflag} ${orderflag} ${gnuflag}",
}
}