#!/bin/bash
# keepalived track_script fuer die NFS-Service-VIP crb2.
# Identisch auf nfs-1 und nfs-2, verhaelt sich rollenabhaengig.
#
# Exit 0 = dieser Knoten darf die VIP halten/uebernehmen.
# Exit 1 = nicht wahlberechtigt (keepalived gibt die VIP ab bzw. nimmt sie nicht).

set -u
# Configuration is read from /etc/default/aep-nfs-ha (written by configuration
# management); the defaults below match the crb2 pair as built in 2026-08.
CONF=${AEP_NFS_HA_CONF:-/etc/default/aep-nfs-ha}
# shellcheck source=/dev/null
[ -r "$CONF" ] && . "$CONF"
POOL=${POOL:-nfs}
DATASETS=${DATASETS:-"pvc-prod pvc-nonprod backup"}
VIP=${VIP:-10.132.0.242}
VIPDEV=${VIPDEV:-eth0}
DISARM=${DISARM:-/etc/keepalived/nfs-vip.disabled}

# 0. Handbremse: solange diese Datei existiert, uebernimmt der Knoten NIE.
#    So laesst sich automatischer Failover bewusst ausschalten (Default auf
#    nfs-2) bzw. ein Knoten fuer Wartung aus der Wahl nehmen.
[ -e "$DISARM" ] && exit 1

# 1. Pool muss importiert und gesund sein -- ohne Daten kein Export.
state=$(zpool list -H -o health "$POOL" 2>/dev/null) || exit 1
[ "$state" = "ONLINE" ] || exit 1

# 2. Alle drei Datasets muessen existieren.
for ds in $DATASETS; do
    zfs list -H -o name "$POOL/$ds" >/dev/null 2>&1 || exit 1
done

# 3. Nur wenn wir die VIP AKTUELL halten (= MASTER), muss auch der Dienst
#    laufen. Als BACKUP ist ein gestoppter nfsd der gewollte Zustand.
if ip -4 addr show dev "$VIPDEV" 2>/dev/null | grep -q "inet ${VIP}/"; then
    svctl isup nfsd >/dev/null 2>&1 || exit 1
    exportfs -v 2>/dev/null | grep -q '^/srv/nfs/' || exit 1
fi

exit 0
