#!/bin/bash
ECHO=echo
RUBY=$(which ruby)
RUBY_OPTS="-c"
ERB=$(which erb)
ERB_OPTS="-x -T"
PUPPET=$(which puppet)
PUPPET_OPTS="parser validate"
PUPPET_LINT=$(which puppet-lint)
function determine_type {
[ -d "$1" ] && return 0
ext=$( echo $1 |awk -F. '{ print $NF }' )
case $ext in
pp) # need a better way to check for a manifest
manifest_syntax $1
lint_check $1
;;
erb) # assume it's an erb if it's not a manifest
erb_syntax $1
;;
rb) # a bit of ruby
ruby_syntax $1
;;
*)
${ECHO} "$1 is something I don't recognize... skipping"
;;
esac
}
function manifest_syntax {
${ECHO} -en "Checking manifest\t$1: "
${PUPPET} ${PUPPET_OPTS} $1 && ${ECHO} "Syntax OK"
}
function lint_check {
${ECHO} -en "Checking best practices\t$1: "
${PUPPET_LINT} $1 && ${ECHO} "Syntax OK"
}
function erb_syntax {
${ECHO} -en "Checking erb\t\t$1: "
${ERB} ${ERB_OPTS} '-' $1 | ${RUBY} ${RUBY_OPTS}
}
function ruby_syntax {
${ECHO} -en "Checking ruby\t\t$1: "
${RUBY} -rpuppet $1 && ${ECHO} "Syntax OK"
}
function notify {
if [ -z "$QUIET" ]; then
return
else
echo $1
fi
}
if [ -z "$*" ]; then
START=. #current directory
notify "No files or directories specified, checking $START"
else
START=$*
fi
# loop through objects given on commandline
for object in $(git diff HEAD --name-only); do
if [ -d "$object" ]; then
for file in $( find ${object} -not \( -name .git -prune \) -and -not \( -name .svn -prune \) -and -not \( -name CVS -prune \) ); do
determine_type $file
done
elif [ -f "$object" ]; then
determine_type $object
fi
done