phpservermon/puphpet/puppet/modules/puppi/files/mailpuppicheck

73 lines
1.6 KiB
Bash

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