aboutsummaryrefslogtreecommitdiff
path: root/kvm-lab-destroy.bak
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukasz.kasprzak@pm.me>2026-01-29 01:27:17 +0100
committerLukasz Kasprzak <lukasz.kasprzak@pm.me>2026-01-29 01:27:17 +0100
commit70e6d80c2d367480478eacf46363ee88a0e994ff (patch)
tree3585660271002a776a8756994c92f8e546f98044 /kvm-lab-destroy.bak
parent646bb0d8df0e720c966dc2992dcf7fe1154d17cf (diff)
downloadbin-70e6d80c2d367480478eacf46363ee88a0e994ff.tar.gz
bin-70e6d80c2d367480478eacf46363ee88a0e994ff.zip
added lots of new dmenu scripts
Diffstat (limited to 'kvm-lab-destroy.bak')
-rwxr-xr-xkvm-lab-destroy.bak52
1 files changed, 52 insertions, 0 deletions
diff --git a/kvm-lab-destroy.bak b/kvm-lab-destroy.bak
new file mode 100755
index 0000000..3548ef9
--- /dev/null
+++ b/kvm-lab-destroy.bak
@@ -0,0 +1,52 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+URI="qemu:///system"
+LABDIR="/var/lib/libvirt/images/lab"
+
+NAME="${1:-}"
+
+if [[ -z "$NAME" ]]; then
+ echo "Usage: kvm-lab-destroy <lab-name>"
+ 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
+fi
+
+if [[ "$(virsh -c "$URI" domstate "$NAME")" == "running" ]]; then
+ echo "Force stopping $NAME..."
+ virsh -c "$URI" destroy "$NAME"
+fi
+
+echo "Undefining $NAME..."
+virsh -c "$URI" undefine "$NAME"
+
+echo "Deleting disk: $DISK"
+sudo rm -v -- "$DISK"
+
+echo "Lab '$NAME' destroyed."
+