#!/bin/sh
# Проверка ВМ в двух копиях (CHG Т1). Запуск с рабочей машины или mgmtVM.
#   NODES="10.X.Y.101 10.X.Y.102 ..." [KEY=~/.ssh/id_ed25519] sh dupcheck.sh
# Итог: "DUPLICATES: none" (код 0), "DUPLICATES: <id…>" (код 1), "ERROR: …" (код 2 — проверка НЕ выполнена).
: "${NODES:?NODES=\"<адреса всех узлов через пробел>\"}"
KEY=${KEY:-$HOME/.ssh/id_ed25519}
T=$(mktemp -d) || exit 2
trap 'rm -rf "$T"' EXIT
for h in $NODES; do
  # pgrep без процессов возвращает 1 — это не ошибка, поэтому полнота ответа проверяется маркерами OK/END
  ssh -n -o BatchMode=yes -o ConnectTimeout=8 -i "$KEY" root@$h "echo OK; pgrep -lf '^bhyve: [0-9]'; echo END" > "$T/$h" 2>"$T/$h.err"
  if [ "$(head -1 "$T/$h")" != OK ] || [ "$(tail -1 "$T/$h")" != END ]; then
    echo "ERROR: узел $h не ответил: $(tail -1 "$T/$h.err")"; exit 2
  fi
  sed '1d;$d' "$T/$h" | awk -v h=$h '{id=$3; sub(/-r$/,"",id); print id, h, $1}' >> "$T/all"
done
touch "$T/all"; sort -n "$T/all" > "$T/sorted"
echo "running: $(wc -l < "$T/sorted" | tr -d ' ') on $(echo $NODES | wc -w | tr -d ' ') nodes"
d=$(awk '{print $1}' "$T/sorted" | uniq -d)
if [ -z "$d" ]; then echo "DUPLICATES: none"; exit 0; fi
echo "DUPLICATES: $d"; for i in $d; do grep "^$i " "$T/sorted"; done; exit 1
