aboutsummaryrefslogtreecommitdiff
path: root/kvm-lab-destroy
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
parent646bb0d8df0e720c966dc2992dcf7fe1154d17cf (diff)
downloadbin-70e6d80c2d367480478eacf46363ee88a0e994ff.tar.gz
bin-70e6d80c2d367480478eacf46363ee88a0e994ff.zip
added lots of new dmenu scripts
Diffstat (limited to 'kvm-lab-destroy')
-rwxr-xr-xkvm-lab-destroy65
1 files changed, 28 insertions, 37 deletions
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 <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}')"
+NAME="${1:-}"
+[[ -n "$NAME" ]] || { usage; exit 1; }
-if [[ -z "$DISK" || "$DISK" != "$LABDIR/"* ]]; then
- echo "Refusing to destroy: disk not under $LABDIR"
- echo "Detected disk: $DISK"
- exit 1
-fi
+DISK="${LABDIR}/${NAME}.qcow2"
-STATE="$(virsh -c "$URI" domstate "$NAME")"
+# 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
-if [[ "$STATE" == "running" ]]; then
- echo "Shutting down $NAME..."
- virsh -c "$URI" shutdown "$NAME"
- sleep 3
+ 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'."