diff -r a2342f26c9de -r b0b56e0f8c7f dev/provisioning/modules/puppi/files/mailpuppicheck --- /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 (in seconds) before retrying a Puppi check +# -r 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