#!/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