#!/usr/bin/env bash set -euo pipefail URI="qemu:///system" IMGROOT="/var/lib/libvirt/images" BASEDIR="$IMGROOT/base" LABDIR="$IMGROOT/lab" hr() { printf '%*s\n' "${COLUMNS:-80}" '' | tr ' ' '-'; } echo "KVM LAB STATUS" hr echo "Time: $(date -Is)" echo "Host: $(hostname)" echo echo "Libvirt domains ($URI):" hr virsh -c "$URI" list --all || true echo echo "Lab VMs (names starting with 'lab'):" hr virsh -c "$URI" list --all | awk 'NR==1||NR==2{print;next} $2 ~ /^lab/ {print}' || true echo echo "Lab disk inventory ($LABDIR):" hr if [[ -d "$LABDIR" ]]; then sudo ls -lh --time-style=long-iso "$LABDIR" 2>/dev/null || ls -lh "$LABDIR" else echo "Missing: $LABDIR" fi echo echo "Base images ($BASEDIR):" hr if [[ -d "$BASEDIR" ]]; then ls -lh --time-style=long-iso "$BASEDIR" 2>/dev/null || ls -lh "$BASEDIR" else echo "Missing: $BASEDIR" fi echo echo "Selected base candidates:" hr TEMPLATE="$BASEDIR/debian13-template.qcow2" LATEST_WORK01="$(ls -1t "$BASEDIR"/work01-base-*.qcow2 2>/dev/null | head -n 1 || true)" if [[ -f "$TEMPLATE" ]]; then echo "template: $TEMPLATE" else echo "template: MISSING ($TEMPLATE)" fi if [[ -n "$LATEST_WORK01" ]]; then echo "work01 (latest): $LATEST_WORK01" else echo "work01 (latest): none found ($BASEDIR/work01-base-*.qcow2)" fi echo echo "Libvirt networks:" hr virsh -c "$URI" net-list --all || true echo