diff options
| author | Lukasz Kasprzak <lukasz.kasprzak@pm.me> | 2026-01-29 01:27:17 +0100 |
|---|---|---|
| committer | Lukasz Kasprzak <lukasz.kasprzak@pm.me> | 2026-01-29 01:27:17 +0100 |
| commit | 70e6d80c2d367480478eacf46363ee88a0e994ff (patch) | |
| tree | 3585660271002a776a8756994c92f8e546f98044 /kvm-lab-destroy.bak | |
| parent | 646bb0d8df0e720c966dc2992dcf7fe1154d17cf (diff) | |
| download | bin-70e6d80c2d367480478eacf46363ee88a0e994ff.tar.gz bin-70e6d80c2d367480478eacf46363ee88a0e994ff.zip | |
added lots of new dmenu scripts
Diffstat (limited to 'kvm-lab-destroy.bak')
| -rwxr-xr-x | kvm-lab-destroy.bak | 52 |
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." + |
