73 lines
1.6 KiB
Plaintext
73 lines
1.6 KiB
Plaintext
![]() |
#!/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
|