#!/bin/bash
#
# checks if pvesh current HA status lists at least $PVESH_MIN_HANODES nodes as active or idle vs. dead
#

# prepare

. /usr/lib/montools/mt-prepare

RESNAME="PVESH-HA-Nodes"


# work

mkdir -p /tmp/montools

JSONFILE="/tmp/montools/pvesh_ha-status.json"
test -f ${JSONFILE} && mv ${JSONFILE} ${JSONFILE}.former
/usr/bin/pvesh get /cluster/ha/status/current --output-format json 2>/dev/null >${JSONFILE}

NODESTXT="/tmp/montools/pvesh_ha-nodes.txt"
test -f ${NODESTXT} && mv ${NODESTXT} ${NODESTXT}.former
/usr/bin/jq '.[] |select(.id |startswith("lrm:")) | .status' ${JSONFILE} >${NODESTXT}

NRNODES=$(cat ${NODESTXT} |wc -l)
if [ -z "$NRNODES" ] ; then
  add2criticals \
    "Unable to detect nr. of HA nodes via pvesh."
elif [ ${NRNODES} -lt ${PVESH_MIN_HANODES} ] ; then
  add2criticals \
    "pvesh only reports ${NRNODES} HA nodes, expecting ${PVESH_MIN_HANODES}."
else
  add2infos \
    "pvesh reports all expected ${PVESH_MIN_HANODES} HA nodes."
fi

BADNODES=$(cat ${JSONFILE} |egrep -v "\((idle|active),")
if [ -n "${BADNODES}" ] ; then
  add2criticals \
    "pvesh found BAD HA nodes:" \
    "${BADNODES}"
else
  add2infos \
    "pvesh found only active and idle HA nodes."
fi


# notifications

. /usr/lib/montools/mt-notify-exit

