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