1
0
Files
pve-lab/verify.sh
2026-08-02 10:40:47 -05:00

63 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# End-to-end verification of the lab: VMs running, cluster quorate, shared
# storage active on both nodes, and a real cross-node migration over NFS.
set -uo pipefail
source "$(dirname "$0")/lab.env"
pass() { echo " [PASS] $*"; }
fail() { echo " [FAIL] $*"; FAILED=1; }
FAILED=0
echo "== 1. libvirt domains =="
sudo virsh list --all | grep -E "pve1|pve2|pvestore" || true
for d in "$PVE1_NAME" "$PVE2_NAME" "$STORE_NAME"; do
st=$(sudo virsh domstate "$d" 2>/dev/null || echo missing)
[[ "$st" == "running" ]] && pass "$d running" || fail "$d state=$st"
done
echo "== 2. Cluster quorum =="
if lab_ssh "$PVE1_IP" "pvecm status 2>/dev/null | grep -q 'Quorate: *Yes'"; then
pass "cluster is quorate"
lab_ssh "$PVE1_IP" "pvecm nodes"
else
fail "cluster not quorate"
fi
echo "== 3. Shared storage active on both nodes =="
for ip in "$PVE1_IP" "$PVE2_IP"; do
for s in lab-nfs lab-lvm; do
if lab_ssh "$ip" "pvesm status 2>/dev/null | awk '\$1==\"$s\"{print \$3}' | grep -q active"; then
pass "$s active on $ip"
else
fail "$s not active on $ip"
fi
done
done
echo "== 4. Cross-node migration over shared NFS =="
VMID=9001
lab_ssh "$PVE1_IP" "qm destroy $VMID --purge 2>/dev/null; true"
if lab_ssh "$PVE1_IP" "qm create $VMID --name migtest --memory 512 \
--scsihw virtio-scsi-pci --scsi0 lab-nfs:1 --net0 virtio,bridge=vmbr0"; then
pass "created test VM $VMID with disk on lab-nfs"
if lab_ssh "$PVE1_IP" "qm migrate $VMID $PVE2_NAME"; then
owner=$(lab_ssh "$PVE2_IP" "qm list 2>/dev/null | awk '\$1==$VMID{print \$1}'")
[[ "$owner" == "$VMID" ]] && pass "VM $VMID migrated pve1 -> pve2" || fail "VM not found on pve2 after migrate"
else
fail "qm migrate failed"
fi
lab_ssh "$PVE2_IP" "qm destroy $VMID --purge 2>/dev/null; true" || \
lab_ssh "$PVE1_IP" "qm destroy $VMID --purge 2>/dev/null; true"
else
fail "could not create test VM"
fi
echo
if [[ "$FAILED" == 0 ]]; then
echo "ALL CHECKS PASSED"
echo "Web UIs: https://${PVE1_IP}:8006 https://${PVE2_IP}:8006 (root / \$ROOT_PASSWORD)"
else
echo "SOME CHECKS FAILED — see [FAIL] lines above"
exit 1
fi