--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/dev/provisioning/modules/puppi/files/mailpuppicheck Fri Jan 15 15:35:00 2016 +0100
@@ -0,0 +1,72 @@
+#!/bin/bash
+# File Managed by Puppet
+# Possible Usage:
+# Run this command at the end of each Puppet run to be
+# immediately notified if a Puppet Runs has broken some service
+#
+# Options:
+# -m destination_email
+# -i <interval> (in seconds) before retrying a Puppi check
+# -r <number_of_retries> how many attempts to retry if there are failures
+#
+# In puppet.conf add something like:
+# postrun_command = "/usr/bin/mailpuppicheck -m roots@example.com"
+#
+retries=1
+interval=2
+workdir="/tmp"
+counter=0
+while [ $# -gt 0 ]; do
+ case "$1" in
+ -m)
+ mail=$2
+ shift 2 ;;
+ -i)
+ internal=$2
+ shift 2 ;;
+ -r)
+ retries=$2
+ shift 2 ;;
+ esac
+done
+
+if [ ! $mail ] ; then
+ echo "Provide at least an email addess"
+ exit 1
+fi
+
+# randfile="$(mktemp)"
+lastrunfile=$workdir/puppicheck_lastrun
+savedfile=$workdir/puppicheck_saved
+
+while [ $counter -lt $retries ] ; do
+ puppi check | grep FAILED > $lastrunfile
+ if [ "x$?" == "x0" ] ; then
+ errors="yes"
+ sleep $interval
+ else
+ errors="no"
+ echo "Run $counter - Errors $errors"
+ echo > $savedfile
+ exit 0
+ fi
+ echo "Run $counter - Errors $errors"
+ let counter=$counter+1
+done
+
+diff $lastrunfile $savedfile
+if [ "x$?" == "x0" ] ; then
+ echo "No changes detected"
+else
+ echo "Changes detected"
+ notify="yes"
+fi
+
+cp $lastrunfile $savedfile
+if [ "x$notify" == "xyes" ] ; then
+ # Yes, it's ugly
+ cat -v $lastrunfile | sed -e 's:\^\[\[60G\[\^\[\[0;31m: :g' | sed -e 's:\^\[\[0;39m\]\^M: :g' | mail -s "[puppet] Errors after Puppet run on $(hostname -f)" $mail
+ echo "Sent notification"
+fi
+
+exit 0