#!/usr/bin/env bash
set -Eeuo pipefail
umask 077

INSTANCE=${1:-}
OLD_PRIMARY=${2:-}
NEW_PRIMARY=${3:-}
case "$INSTANCE" in 56|80) ;; *) echo "ERROR: invalid instance" >&2; exit 2 ;; esac
case "$OLD_PRIMARY" in 10.2.208.106|10.2.208.107) ;; *) echo "ERROR: invalid old primary" >&2; exit 2 ;; esac
case "$NEW_PRIMARY" in 10.2.208.106|10.2.208.107) ;; *) echo "ERROR: invalid new primary" >&2; exit 2 ;; esac
[[ "$OLD_PRIMARY" != "$NEW_PRIMARY" ]] || { echo "ERROR: identical old/new primary" >&2; exit 2; }

CONFIG=/etc/zhct/mysql-ha/executor.path
[[ -f "$CONFIG" && $(stat -c '%U:%G' "$CONFIG") == root:root ]] ||
  { echo "ERROR: approved executor config missing" >&2; exit 1; }
case "$(stat -c '%a' "$CONFIG")" in 400|600) ;; *) echo "ERROR: unsafe executor config mode" >&2; exit 1 ;; esac
EXECUTOR=$(awk -F= '$1=="EXECUTOR"{print substr($0,index($0,"=")+1)}' "$CONFIG")
[[ "$EXECUTOR" == /* && -x "$EXECUTOR" ]] ||
  { echo "ERROR: approved executor unavailable" >&2; exit 1; }

exec "$EXECUTOR" promote-and-fence "$INSTANCE" "$OLD_PRIMARY" "$NEW_PRIMARY"
