]> git.giorgioravera.it Git - scripts.git/commitdiff
Added pve-screenshots
authorGiorgio Ravera <giorgio.ravera@gmail.com>
Wed, 9 Sep 2020 20:17:41 +0000 (22:17 +0200)
committerGiorgio Ravera <giorgio.ravera@gmail.com>
Wed, 9 Sep 2020 20:17:41 +0000 (22:17 +0200)
pve-snapshots [new file with mode: 0755]

diff --git a/pve-snapshots b/pve-snapshots
new file mode 100755 (executable)
index 0000000..e383e5e
--- /dev/null
@@ -0,0 +1,149 @@
+#!/bin/bash
+
+NAME="pve-snapshots"
+VERSION="0.01"
+SNAP_SUB_PREFIX="$(date +%Y-%m-%d_%k-%M-%S)"
+SNAP_DESCRIPTION="$NAME"
+#OUTPUT="/dev/null"
+OUTPUT="log"
+#ERROR="/dev/null"
+ERROR="log"
+
+usage ()
+{
+      echo "Usage:    $NAME --id=VMID --prefix=PREFIX [--storage=STORAGENAME] [--keep=NUMBER]"
+      echo
+      echo "Example:  $NAME --id=1 --prefix=daily --storage=ceph --keep=2"
+      echo "     or:  $NAME -i 100 -p daily -s ceph -k 1"
+      echo
+      echo "Arguments:"
+       echo "    -i, --id=VMID               Virtual Machine ID"
+       echo "    -p, --prefix=PREFIX         Prefix name to be assign to the snapshots"
+       echo "    -s, --storage=STORAGENAME   Specify the storage name for which will be used auto snapshots"
+       echo "                                (not specified will enable for all storages)"
+       echo "    -k, --keep=NUMBER           Specify the number of snapshots which should will leave, anything longer will be removed"
+#      echo "    -D, --sleep=NUMBER          Specify the modifier for sleep that would create a delay after each snapshot operation"
+#      echo "                                (calculate as: NUMBER gigabytes per minute, min 1 minute)"
+#      echo
+      exit
+}
+
+check_vm ()
+{
+       # Check VM existence
+       vm_result=$(qm list | awk {'print $1 " " $2'} | sed 1d | grep $id)
+       vm_id=$(echo $vm_result | awk {'print $1'})
+       vm_name=$(echo $vm_result | awk {'print $2'})
+       if [ -z  $vm_id ]; then
+               echo "$NAME error: wrong VM ID ($id)"
+       fi
+}
+
+create_snap_name () 
+{
+       snap_prefix=$vm_name\_$prefix 
+       snap_name=$snap_prefix\_$SNAP_SUB_PREFIX 
+}
+
+parse_options ()
+{
+       # Reset options
+       id=
+       prefix=
+       storage=
+       keep=
+
+       # Check Options
+       OPT=$(getopt -o i:p:s:k: --long id:,prefix:,storage:,keep: -n "$NAME parse-error" -- "$@")i
+       if [ $? != 0 ]; then
+               usage
+       fi
+       eval set -- "$OPT"
+
+       # Parse Options
+       while [ $# -gt 0 ]; do
+               case $1 in
+                       -i | --id )
+                               if [ $# -eq 1 ]; then exit; fi
+                               id=$2
+                               shift; shift
+                               ;;
+                       -p | --prefix )
+                               if [ $# -eq 1 ]; then exit; fi
+                               prefix=$2
+                               shift; shift
+                               ;;
+                       -s | --storage )
+                               if [ $# -eq 1 ]; then exit; fi
+                               storage=$2
+                               shift; shift
+                               ;;
+                       -k | --keep )
+                               if [ $# -eq 1 ]; then exit; fi
+                               keep=$2
+                               shift; shift
+                               ;;
+                       * ) shift ;;
+               esac
+       done
+
+       if [ -z $id ] ; then echo -e "\nVM ID is not set\n"; usage; fi
+       if [ -z $prefix ] ; then echo -e "\nPrefix is not set\n"; usage; fi
+
+       # Check if VM exists
+       check_vm
+
+       # Create Snapshot Name
+       create_snap_name
+
+       # Check Keep [digit only up to 99]
+       keep=$(echo $keep | grep -Po "\b[0-9]\d?\b")
+
+
+       echo vm_id=$vm_id, snap_name=$snap_name, storage=$storage, keep=$keep
+}
+
+get_list_snap ()
+{
+       #snapshots=($(qm listsnapsho $vm_id | awk {'print $2'} | sed \$d | grep $snap_prefix))
+       snapshots=($(qm listsnapsho $vm_id | awk {'print $2'} | tac | sed 1d | grep $snap_prefix))
+}
+
+create_snap ()
+{
+       qm snapshot $vm_id $snap_name --description $SNAP_DESCRIPTION 1>$OUTPUT 2>$ERROR
+       if [ $? != 0 ]; then
+               echo "$NAME: Failed to create snapshot."
+               exit 1
+       else
+               echo "Snapshot created successfully."
+       fi
+}
+
+delete_old_snap ()
+{
+       if [ -z $keep ]; then
+               echo "No snapthots to be deleted"
+               return
+       else
+               i=0
+               for snap in "${snapshots[@]}"
+               do
+                       if [ $i -ge $keep ]; then
+                               qm delsnapshot $vm_id $snap 1>$OUTPUT 2>$ERROR
+                               echo "Snapshot $snap deleted successfully."
+                       fi
+                       let i++
+               done
+       fi
+}
+
+# Entry Point
+echo $NAME $VERSION
+echo ""
+
+parse_options $@ 
+get_list_snap
+create_snap
+delete_old_snap
+