#!/bin/bash set -e export VERBOSE=1 export TIMEOUT=90 export MASTER_SOCKET=${MASTER_SOCKET:-/var/run/haproxy-master.sock} export RET= alert() { if [ "$VERBOSE" -ge "1" ]; then echo "[ALERT] $*" >&2 fi } reload() { while read -r line; do if [ "$line" = "Success=0" ]; then RET=1 elif [ "$line" = "Success=1" ]; then RET=0 elif [ "$line" = "Another reload is still in progress." ]; then alert "$line" elif [ "$line" = "--" ]; then continue; else if [ "$RET" = 1 ] && [ "$VERBOSE" = "2" ]; then echo "$line" >&2 elif [ "$VERBOSE" = "3" ]; then echo "$line" >&2 fi fi done < <(echo "reload" | socat -t"${TIMEOUT}" "${MASTER_SOCKET}" -) if [ -z "$RET" ]; then alert "Couldn't finish the reload before the timeout (${TIMEOUT})." return 1 fi return "$RET" } usage() { echo "Usage:" echo " $0 [options]*" echo "" echo " Trigger a reload from the master socket" echo " Require socat" echo " EXPERIMENTAL script!" echo "" echo "Options:" echo " -S, --master-socket Use the master socket at (default: ${MASTER_SOCKET})" echo " -d, --debug Debug mode, set -x" echo " -t, --timeout Timeout (socat -t) (default: ${TIMEOUT})" echo " -s, --silent Slient mode (no output)" echo " -v, --verbose Verbose output (output from haproxy on failure)" echo " -vv Even more verbose output (output from haproxy on success and failure)" echo " -h, --help This help" echo "" echo "Examples:" echo " $0 -S ${MASTER_SOCKET} -d ${TIMEOUT}" } main() { while [ -n "$1" ]; do case "$1" in -S|--master-socket) MASTER_SOCKET="$2" shift 2 ;; -t|--timeout) TIMEOUT="$2" shift 2 ;; -s|--silent) VERBOSE=0 shift ;; -v|--verbose) VERBOSE=2 shift ;; -vv|--verbose) VERBOSE=3 shift ;; -d|--debug) DEBUG=1 shift ;; -h|--help) usage "$@" exit 0 ;; *) echo "[ALERT] ($$) : Unknown option '$1'" >&2 usage "$@" exit 1 ;; esac done if [ -n "$DEBUG" ]; then set -x fi } main "$@" reload