From 70e6d80c2d367480478eacf46363ee88a0e994ff Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Thu, 29 Jan 2026 01:27:17 +0100 Subject: added lots of new dmenu scripts --- kvm-lab-destroy | 71 +++++++++++++++++++++++++-------------------------------- 1 file changed, 31 insertions(+), 40 deletions(-) (limited to 'kvm-lab-destroy') diff --git a/kvm-lab-destroy b/kvm-lab-destroy index 3548ef9..c608831 100755 --- a/kvm-lab-destroy +++ b/kvm-lab-destroy @@ -2,51 +2,42 @@ set -euo pipefail URI="qemu:///system" -LABDIR="/var/lib/libvirt/images/lab" +IMGROOT="/var/lib/libvirt/images" +LABDIR="$IMGROOT/lab" -NAME="${1:-}" - -if [[ -z "$NAME" ]]; then +usage() { echo "Usage: kvm-lab-destroy " - exit 1 -fi - -if [[ "$NAME" == "work01" || "$NAME" == "debian13-template" ]]; then - echo "Refusing to destroy protected VM: $NAME" - exit 1 -fi - -if ! virsh -c "$URI" dominfo "$NAME" &>/dev/null; then - echo "Domain not found: $NAME" - exit 1 -fi +} -DISK="$(virsh -c "$URI" domblklist "$NAME" --details | awk '$3=="vda"{print $4}')" - -if [[ -z "$DISK" || "$DISK" != "$LABDIR/"* ]]; then - echo "Refusing to destroy: disk not under $LABDIR" - echo "Detected disk: $DISK" - exit 1 -fi - -STATE="$(virsh -c "$URI" domstate "$NAME")" - -if [[ "$STATE" == "running" ]]; then - echo "Shutting down $NAME..." - virsh -c "$URI" shutdown "$NAME" - sleep 3 +NAME="${1:-}" +[[ -n "$NAME" ]] || { usage; exit 1; } + +DISK="${LABDIR}/${NAME}.qcow2" + +# Domain cleanup (best-effort) +if virsh -c "$URI" dominfo "$NAME" &>/dev/null; then + state="$(virsh -c "$URI" domstate "$NAME" 2>/dev/null || true)" + if [[ "$state" == *running* ]]; then + virsh -c "$URI" shutdown "$NAME" >/dev/null 2>&1 || true + sleep 1 + virsh -c "$URI" destroy "$NAME" >/dev/null 2>&1 || true + else + virsh -c "$URI" destroy "$NAME" >/dev/null 2>&1 || true + fi + + virsh -c "$URI" undefine "$NAME" --nvram >/dev/null 2>&1 || \ + virsh -c "$URI" undefine "$NAME" >/dev/null 2>&1 || true +else + echo "WARN: Domain not found: $NAME" fi -if [[ "$(virsh -c "$URI" domstate "$NAME")" == "running" ]]; then - echo "Force stopping $NAME..." - virsh -c "$URI" destroy "$NAME" +# Disk cleanup +if [[ -e "$DISK" ]]; then + echo "Removing disk: $DISK" + sudo rm -f "$DISK" +else + echo "WARN: Disk not found: $DISK" fi -echo "Undefining $NAME..." -virsh -c "$URI" undefine "$NAME" - -echo "Deleting disk: $DISK" -sudo rm -v -- "$DISK" - -echo "Lab '$NAME' destroyed." +echo "OK: Destroyed lab '$NAME'." -- cgit v1.3