diff --git a/files/concatfragments.sh b/files/concatfragments.sh deleted file mode 100755 index 7e6b0f5c5..000000000 --- a/files/concatfragments.sh +++ /dev/null @@ -1,140 +0,0 @@ -#!/bin/sh - -# Script to concat files to a config file. -# -# Given a directory like this: -# /path/to/conf.d -# |-- fragments -# | |-- 00_named.conf -# | |-- 10_domain.net -# | `-- zz_footer -# -# The script supports a test option that will build the concat file to a temp location and -# use /usr/bin/cmp to verify if it should be run or not. This would result in the concat happening -# twice on each run but gives you the option to have an unless option in your execs to inhibit rebuilds. -# -# Without the test option and the unless combo your services that depend on the final file would end up -# restarting on each run, or in other manifest models some changes might get missed. -# -# OPTIONS: -# -o The file to create from the sources -# -d The directory where the fragments are kept -# -t Test to find out if a build is needed, basically concats the files to a temp -# location and compare with what's in the final location, return codes are designed -# for use with unless on an exec resource -# -w Add a shell style comment at the top of the created file to warn users that it -# 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 -# -# the command: -# -# concatfragments.sh -o /path/to/conffile.cfg -d /path/to/conf.d -# -# creates /path/to/conf.d/fragments.concat and copies the resulting -# file to /path/to/conffile.cfg. The files will be sorted alphabetically -# pass the -n switch to sort numerically. -# -# The script does error checking on the various dirs and files to make -# sure things don't fail. - -OUTFILE="" -WORKDIR="" -TEST="" -FORCE="" -WARN="" -SORTARG="" -ENSURE_NEWLINE="" - -PATH=/sbin:/usr/sbin:/bin:/usr/bin - -## Well, if there's ever a bad way to do things, Nexenta has it. -## http://nexenta.org/projects/site/wiki/Personalities -unset SUN_PERSONALITY - -while getopts "o:s:d:tnw:fl" options; do - case $options in - o ) OUTFILE=$OPTARG;; - d ) WORKDIR=$OPTARG;; - n ) SORTARG="-n";; - w ) WARNMSG="$OPTARG";; - f ) FORCE="true";; - t ) TEST="true";; - l ) ENSURE_NEWLINE="true";; - * ) echo "Specify output file with -o and fragments directory with -d" - exit 1;; - esac -done - -# do we have -o? -if [ "x${OUTFILE}" = "x" ]; then - echo "Please specify an output file with -o" - exit 1 -fi - -# do we have -d? -if [ "x${WORKDIR}" = "x" ]; then - echo "Please fragments directory with -d" - exit 1 -fi - -# can we write to -o? -if [ -f "${OUTFILE}" ]; then - if [ ! -w "${OUTFILE}" ]; then - echo "Cannot write to ${OUTFILE}" - exit 1 - fi -else - if [ ! -w `dirname "${OUTFILE}"` ]; then - echo "Cannot write to `dirname \"${OUTFILE}\"` to create ${OUTFILE}" - exit 1 - fi -fi - -# do we have a fragments subdir inside the work dir? -if [ ! -d "${WORKDIR}/fragments" ] && [ ! -x "${WORKDIR}/fragments" ]; then - echo "Cannot access the fragments directory" - exit 1 -fi - -# are there actually any fragments? -if [ ! "$(ls -A """${WORKDIR}/fragments""")" ]; then - if [ "x${FORCE}" = "x" ]; then - echo "The fragments directory is empty, cowardly refusing to make empty config files" - exit 1 - fi -fi - -cd "${WORKDIR}" - -if [ "x${WARNMSG}" = "x" ]; then - : > "fragments.concat" -else - printf '%s\n' "$WARNMSG" > "fragments.concat" -fi - -# find all the files in the fragments directory, sort them numerically and concat to fragments.concat in the working dir -IFS_BACKUP=$IFS -IFS=' -' -for fragfile in `find fragments/ -type f -follow -print0 | xargs -0 -n1 basename | LC_ALL=C sort ${SORTARG}` -do - cat "fragments/$fragfile" >> "fragments.concat" - # Handle newlines. - if [ "x${ENSURE_NEWLINE}" != "x" ]; then - echo >> "fragments.concat" - fi -done -IFS=$IFS_BACKUP - -if [ "x${TEST}" = "x" ]; then - # This is a real run, copy the file to outfile - cp fragments.concat "${OUTFILE}" - RETVAL=$? -else - # Just compare the result to outfile to help the exec decide - cmp "${OUTFILE}" fragments.concat - RETVAL=$? -fi - -exit $RETVAL diff --git a/manifests/init.pp b/manifests/init.pp index 1727bec2c..78c408149 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -34,7 +34,7 @@ # # === Actions: # * Creates fragment directories if it didn't exist already -# * Executes the concatfragments.sh script to build the final file, this +# * Executes the concatfragments.rb script to build the final file, this # script will create directory/fragments.concat. Execution happens only # when: # * The directory changes @@ -210,7 +210,7 @@ } # 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 + # the concatfragments.rb script to potentially be installed in path that # may not be accessible by a target non-root owner. exec { "concat_${name}": alias => "concat_${fragdir}", diff --git a/manifests/setup.pp b/manifests/setup.pp index f04f2d7f5..a2da1ed38 100644 --- a/manifests/setup.pp +++ b/manifests/setup.pp @@ -25,15 +25,7 @@ $fragment_owner = $::osfamily ? { 'windows' => undef, default => $::id } $fragment_mode = $::osfamily ? { 'windows' => undef, default => '0640' } - # PR #174 introduced changes to the concatfragments.sh script that are - # incompatible with Solaris 10 but reportedly OK on Solaris 11. As a work - # around we are enable the .rb concat script on all Solaris versions. If - # this goes smoothly, we should move towards completely eliminating the .sh - # version. - $script_name = $::osfamily? { - /(?i:(Windows|Solaris|AIX))/ => 'concatfragments.rb', - default => 'concatfragments.sh' - } + $script_name = 'concatfragments.rb' $script_path = "${concatdir}/bin/${script_name}" diff --git a/spec/acceptance/concat_spec.rb b/spec/acceptance/concat_spec.rb index 7a6d95cfd..c5c972774 100644 --- a/spec/acceptance/concat_spec.rb +++ b/spec/acceptance/concat_spec.rb @@ -4,12 +4,12 @@ when 'AIX' username = 'root' groupname = 'system' - scriptname = 'concatfragments.sh' + scriptname = 'concatfragments.rb' vardir = default['puppetvardir'] when 'Darwin' username = 'root' groupname = 'wheel' - scriptname = 'concatfragments.sh' + scriptname = 'concatfragments.rb' vardir = default['puppetvardir'] when 'windows' username = 'Administrator' @@ -25,7 +25,7 @@ else username = 'root' groupname = 'root' - scriptname = 'concatfragments.sh' + scriptname = 'concatfragments.rb' vardir = default['puppetvardir'] end diff --git a/spec/unit/classes/concat_setup_spec.rb b/spec/unit/classes/concat_setup_spec.rb index 2aac7634d..e97a29caa 100644 --- a/spec/unit/classes/concat_setup_spec.rb +++ b/spec/unit/classes/concat_setup_spec.rb @@ -16,9 +16,9 @@ end it do - should contain_file("#{concatdir}/bin/concatfragments.sh").with({ + should contain_file("#{concatdir}/bin/concatfragments.rb").with({ :mode => '0755', - :source => 'puppet:///modules/concat/concatfragments.sh', + :source => 'puppet:///modules/concat/concatfragments.rb', :backup => false, }) end diff --git a/spec/unit/defines/concat_spec.rb b/spec/unit/defines/concat_spec.rb index de12ab901..a748f9607 100644 --- a/spec/unit/defines/concat_spec.rb +++ b/spec/unit/defines/concat_spec.rb @@ -91,7 +91,7 @@ })) end - cmd = "#{concatdir}/bin/concatfragments.sh " + + cmd = "#{concatdir}/bin/concatfragments.rb " + "-o \"#{concatdir}/#{safe_name}/fragments.concat.out\" " + "-d \"#{concatdir}/#{safe_name}\""