diff --git a/proxmox/proxmox-cluster-delete-all-snapshots-for-vm.sh b/proxmox/proxmox-cluster-delete-all-snapshots-for-vm.sh new file mode 100644 index 0000000..a83193b --- /dev/null +++ b/proxmox/proxmox-cluster-delete-all-snapshots-for-vm.sh @@ -0,0 +1,48 @@ +#!/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