#!/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