Add new vzdump hook to hardlink latest backup
This commit is contained in:
parent
70bf10ab59
commit
9f9ef99f1a
|
@ -0,0 +1,169 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Purpose {{{
|
||||
# This script will hardlink latest Proxmox's backup with a explicit name.
|
||||
#
|
||||
# This script is intended to be used as a hook script for the Proxmox
|
||||
# VZDump utility.
|
||||
#
|
||||
# In order to use it, use the configuration directive "script" of the
|
||||
# vzdump utility. This can be done for scheduled backups by putting
|
||||
# "script: /path/to/this/script" in /etc/vzdump.conf. Don't forget to
|
||||
# set executable permission for the script file.
|
||||
#
|
||||
# Based on RobHost's vzdump_hook script :
|
||||
# https://github.com/robhost/proxmox-scripts/blob/master/vzdump_hook.sh
|
||||
# }}}
|
||||
# Vars {{{
|
||||
readonly PROGNAME=$(basename "${0}")
|
||||
readonly ARGS="${*}"
|
||||
[ -z "${DEBUG}" ] && DEBUG=0
|
||||
## Export DEBUG for sub-script
|
||||
export DEBUG
|
||||
|
||||
## Colors
|
||||
readonly PURPLE='\033[1;35m'
|
||||
readonly RED='\033[0;31m'
|
||||
readonly RESET='\033[0m'
|
||||
readonly COLOR_DEBUG="${PURPLE}"
|
||||
# }}}
|
||||
usage() { # {{{
|
||||
|
||||
cat <<- HELP
|
||||
usage: ${PROGNAME} [-h]
|
||||
|
||||
Hardlink latest Proxmox's backup with a explicit name.
|
||||
|
||||
OPTIONS :
|
||||
-h,--help
|
||||
Print this help message.
|
||||
HELP
|
||||
|
||||
}
|
||||
# }}}
|
||||
debug_message() { # {{{
|
||||
|
||||
local_debug_message="${1}"
|
||||
|
||||
## Print message if DEBUG is enable (=0)
|
||||
[ "${DEBUG}" -eq "0" ] && printf '\e[1;35m%-6b\e[m\n' "DEBUG − ${PROGNAME} : ${local_debug_message}"
|
||||
|
||||
unset local_debug_message
|
||||
|
||||
return 0
|
||||
}
|
||||
# }}}
|
||||
error_message() { # {{{
|
||||
|
||||
local_error_message="${1}"
|
||||
local_error_code="${2}"
|
||||
|
||||
## Print message
|
||||
printf '%b\n' "ERROR − ${PROGNAME} : ${RED}${local_error_message}${RESET}"
|
||||
|
||||
exit "${local_error_code:=66}"
|
||||
}
|
||||
# }}}
|
||||
|
||||
main() { # {{{
|
||||
|
||||
# If backup is complete {{{
|
||||
if [ "${phase}" = "backup-end" ]; then
|
||||
## Get TARGET's file extension
|
||||
target_archive_extension="$(printf '%s' "${TARGET}" | cut --delimiter="." --fields=1 --complement)"
|
||||
## Set path for LATEST archive file
|
||||
latest_archive="${dumpdir}/vzdump-${vmtype}-${vmid}-latest.${target_archive_extension}"
|
||||
|
||||
## hardlink TARGET archive to LATEST
|
||||
debug_message "hardlink TARGET archive (${target_archive}) to \
|
||||
LATEST (${latest_archive})." >> "${temp_log_file}"
|
||||
ln --force "${target_archive}" "${latest_archive}"
|
||||
fi
|
||||
# }}}
|
||||
|
||||
# If log is complete {{{
|
||||
if [ "${phase}" = "log-end" ]; then
|
||||
## Set path for LATEST log file
|
||||
latest_log="${dumpdir}/vzdump-${vmtype}-${vmid}-latest.log"
|
||||
|
||||
## hardlink TARGET log to LATEST
|
||||
debug_message "hardlink TARGET logs (${logfile}) to \
|
||||
LATEST (${latest_log})." >> "${temp_log_file}"
|
||||
ln --force "${logfile}" "${latest_log}"
|
||||
fi
|
||||
# }}}
|
||||
|
||||
debug_message "main − \
|
||||
ARGS=${ARGS}
|
||||
env=$(env)
|
||||
---"
|
||||
|
||||
}
|
||||
# }}}
|
||||
|
||||
# Manage arguments # {{{
|
||||
# This code can't be in a function due to argument management
|
||||
|
||||
phase="${1}" # (job|backup)-(start|end|abort)|log-end|pre-(stop|restart)|post-restart
|
||||
|
||||
case "${phase}" in
|
||||
# set variables for the phases
|
||||
#backup-start|backup-end|backup-abort|log-end|pre-stop|pre-restart|post-restart)
|
||||
#;;
|
||||
# do work
|
||||
job-start|job-end|job-abort)
|
||||
# Available vars {{{
|
||||
# Arguments : job-start
|
||||
#LVM_SUPPRESS_FD_WARNINGS=1
|
||||
#DUMPDIR=/path/to/backup/dump
|
||||
#STOREID=backup.id.from.storage.cfg
|
||||
# }}}
|
||||
;;
|
||||
backup-start|backup-end|backup-abort)
|
||||
# Available vars {{{
|
||||
#ARGS=backup-start stop vm.id
|
||||
#HOSTNAME=hostname.domain.tld
|
||||
#TARGET=/path/to/backup/dump/vzdump-$VMTYPE_VALUE-$2_VALUE-YYYY_MM_DD-hh-mm-ss.tar.zst
|
||||
#LOGFILE=/path/to/backup/dump/vzdump-$VMTYPE_VALUE-$2_VALUE-YYYY_MM_DD-hh-mm-ss.log
|
||||
#LVM_SUPPRESS_FD_WARNINGS=1
|
||||
#DUMPDIR=/path/to/backup/dump
|
||||
#VMTYPE=lxc|qemu
|
||||
#STOREID=backup.id.from.storage.cfg
|
||||
# }}}
|
||||
vmid="${3}"
|
||||
target_archive="${TARGET}"
|
||||
dumpdir="${DUMPDIR}"
|
||||
vmtype="${VMTYPE}"
|
||||
;;
|
||||
log-end)
|
||||
# Available vars {{{
|
||||
#ARGS=log-end stop vm.id
|
||||
#HOSTNAME=hostname.domain.tld
|
||||
#TARGET=/path/to/backup/dump/vzdump-$VMTYPE_VALUE-$2_VALUE-YYYY_MM_DD-hh-mm-ss.tar.zst
|
||||
#LOGFILE=/path/to/backup/dump/vzdump-$VMTYPE_VALUE-$2_VALUE-YYYY_MM_DD-hh-mm-ss.log
|
||||
#LVM_SUPPRESS_FD_WARNINGS=1
|
||||
#DUMPDIR=/path/to/backup/dump
|
||||
#VMTYPE=lxc|qemu
|
||||
#STOREID=backup.id.from.storage.cfg
|
||||
# }}}
|
||||
vmid="${3}"
|
||||
logfile="${LOGFILE}"
|
||||
dumpdir="${DUMPDIR}"
|
||||
vmtype="${VMTYPE}"
|
||||
;;
|
||||
pre-stop)
|
||||
;;
|
||||
pre-restart)
|
||||
;;
|
||||
post-restart)
|
||||
;;
|
||||
*)
|
||||
error_message "Unknown phase ${phase}." 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# }}}
|
||||
|
||||
main
|
||||
|
||||
exit 0
|
Loading…
Reference in New Issue