63 lines
2.1 KiB
Bash
63 lines
2.1 KiB
Bash
|
|
#!/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
|