ansitest/proxmox/proxmox-cluster-delete-all-snapshots-for-vm.sh

49 lines
1.4 KiB
Bash
Raw Normal View History

2024-05-22 07:55:25 -06:00
#!/bin/bash
# REF: https://forum.proxmox.com/threads/feature-request-button-to-delete-all-snapshots-at-once.147460/#post-666313
# Cluster version - delete all snapshots for a vm
# NOTE this also works on unclustered instances of pve
# Thanks to original author bbgeek17
# enhanced by kneutron
# USE AT YOUR OWN RISK - I TAKE NO REPSONSIBILITY FOR DATA LOSS!
# Depends: jq
[ $(which jq |wc -l) -eq 0 ] && apt install -y jq
# arg1 = vmid
if [[ $# -lt 1 ]];then
echo "You must provide a parameter!"
echo "USAGE: $0 [VMID]"
exit 1
fi
logf=~/deleted-snapshots-cluster.log
set -u # abort on undefined var
echo "$(date) - Gathering information"
echo '=========='
VMID=$1
NODE=$(pvesh get /cluster/resources --type vm --output-format json \
|jq --argjson myvmid $VMID -r '.[]|select( .vmid == $myvmid )|.node')
# show vm info
(pvesh get /cluster/resources --type vm --human-readable 1 --noborder 1 |egrep "cgroup|$1") |column -t
# TODO test for interactive session
echo '=========='
echo "About to removw ALL snapshots from VM $VMID located on node $NODE - ^C to back out or Enter to proceed"
read
for snap in $(pvesh get /nodes/$NODE/qemu/$VMID/snapshot --output-format json \
|jq -r 'sort_by(.snaptime)|.[]|select(.snaptime != null)|.name'); do
echo "$(date) - $(id -un) - $VMID on $NODE - $snap" \
|tee -a $logf
time pvesh delete /nodes/$NODE/qemu/$VMID/snapshot/$snap
done
date