snap-sync: introduce function block, parse_params()
- create function block functions are sorted by name - new function parse_params() check initial commandline arguments and defaults - introduce a verbose option
This commit is contained in:
151
bin/snap-sync
151
bin/snap-sync
@@ -39,6 +39,20 @@ mkfifo $PIPE
|
||||
systemd-cat -t "$progname" < $PIPE &
|
||||
exec 3>$PIPE
|
||||
|
||||
###
|
||||
# functions
|
||||
###
|
||||
|
||||
die() {
|
||||
error "$@"
|
||||
exit 1
|
||||
}
|
||||
|
||||
error() {
|
||||
printf "==> ERROR: %s\n" "$@"
|
||||
notify_error 'Error' 'Check journal for more information.'
|
||||
} >&2
|
||||
|
||||
notify() {
|
||||
for u in $(users | sed 's/ /\n/' | sort -u); do
|
||||
sudo -u $u DISPLAY=:0 \
|
||||
@@ -55,14 +69,87 @@ notify_error() {
|
||||
notify "$1" "$2" "error"
|
||||
}
|
||||
|
||||
error() {
|
||||
printf "==> ERROR: %s\n" "$@"
|
||||
notify_error 'Error' 'Check journal for more information.'
|
||||
} >&2
|
||||
|
||||
die() {
|
||||
error "$@"
|
||||
parse_params () {
|
||||
###
|
||||
# Evaluate given call parameters
|
||||
###
|
||||
while [ $# -gt 0 ]; do
|
||||
key="$1"
|
||||
case $key in
|
||||
-h | --help | \-\? | --usage)
|
||||
# Call usage() function.
|
||||
usage
|
||||
;;
|
||||
-d|--description)
|
||||
description="$2"
|
||||
shift 2
|
||||
;;
|
||||
-c|--config)
|
||||
selected_config="$2"
|
||||
shift 2
|
||||
;;
|
||||
--config=*)
|
||||
selected_config=${1#*=}
|
||||
shift
|
||||
;;
|
||||
-u|--UUID)
|
||||
uuid_cmdline="$2"
|
||||
shift 2
|
||||
;;
|
||||
--UUID=*)
|
||||
uuid_cmdline=${1#*=}
|
||||
shift
|
||||
;;
|
||||
-n|--noconfirm)
|
||||
noconfirm=1
|
||||
nonotify=1
|
||||
shift
|
||||
;;
|
||||
--remote)
|
||||
remote=$2
|
||||
ssh="ssh $remote"
|
||||
shift 2
|
||||
;;
|
||||
-v|--verbose)
|
||||
verbose=1
|
||||
shift 1
|
||||
;;
|
||||
--) # End of all options
|
||||
shift
|
||||
break
|
||||
;;
|
||||
-*)
|
||||
echo "WARN: Unknown option (ignored): $1" >&2
|
||||
#shift
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
die "Unknown option: $key\nRun '$progname -h' for valid options.\n"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Set reasonable defaults
|
||||
source $SNAPPER_CONFIG
|
||||
selected_configs=${selected_configs:-$SNAPPER_CONFIGS}
|
||||
|
||||
description=${description:-"latest incremental backup"}
|
||||
uuid_cmdline=${uuid_cmdline:-"none"}
|
||||
target_cmdline=${target_cmdline:-"none"}
|
||||
if [ -z $remote ]; then
|
||||
ssh=""
|
||||
fi
|
||||
|
||||
if [ "$verbose" ]; then
|
||||
echo "Snap UUID : '$uuid_cmdline'"
|
||||
echo "Snap Description: '$description'"
|
||||
echo "Snap Config: '$selected_config'"
|
||||
echo "Snap Remote: '$ssh'"
|
||||
|
||||
if [ "$verbose" ]; then snap_sync_options="verbose=true"; fi
|
||||
if [ "$noconfirm" ]; then snap_sync_options="${snap_sync_options} noconfirm=true"; fi
|
||||
echo "Options: ${snap_sync_options}"
|
||||
fi
|
||||
}
|
||||
|
||||
traperror() {
|
||||
@@ -78,9 +165,6 @@ trapkill() {
|
||||
die "Exited due to user intervention."
|
||||
}
|
||||
|
||||
trap 'traperror ${LINENO} $? "$BASH_COMMAND" $BASH_LINENO "${FUNCNAME[@]}"' ERR
|
||||
trap trapkill SIGTERM SIGINT
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
$progname $version
|
||||
@@ -98,53 +182,26 @@ Options:
|
||||
--remote <address> Send the snapshot backup to a remote machine. The snapshot will be sent via ssh. You
|
||||
should specify the remote machine's hostname or ip address. The 'root' user must be
|
||||
permitted to login on the remote machine.
|
||||
-v, --verbose Be more verbose on what's going on.
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
###
|
||||
# Main
|
||||
###
|
||||
|
||||
trap 'traperror ${LINENO} $? "$BASH_COMMAND" $BASH_LINENO "${FUNCPROGNAME[@]}"' ERR
|
||||
trap trapkill SIGTERM SIGINT
|
||||
|
||||
cwd=`pwd`
|
||||
ssh=""
|
||||
while [[ $# -gt 0 ]]; do
|
||||
key="$1"
|
||||
case $key in
|
||||
-d|--description)
|
||||
description="$2"
|
||||
shift 2
|
||||
;;
|
||||
-c|--config)
|
||||
selected_configs="$2"
|
||||
shift 2
|
||||
;;
|
||||
-u|--UUID)
|
||||
uuid_cmdline="$2"
|
||||
shift 2
|
||||
;;
|
||||
-n|--noconfirm)
|
||||
noconfirm="yes"
|
||||
shift
|
||||
;;
|
||||
-h|--help)
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
--remote)
|
||||
remote=$2
|
||||
ssh="ssh $remote"
|
||||
shift 2
|
||||
;;
|
||||
*)
|
||||
die "Unknown option: $key\nRun '$name -h' for valid options.\n"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
parse_params $@
|
||||
|
||||
[[ $EUID -ne 0 ]] && die "Script must be run as root."
|
||||
! [[ -f $SNAPPER_CONFIG ]] && die "$SNAPPER_CONFIG does not exist."
|
||||
|
||||
description=${description:-"latest incremental backup"}
|
||||
uuid_cmdline=${uuid_cmdline:-"none"}
|
||||
noconfirm=${noconfirm:-"no"}
|
||||
|
||||
if [[ "$uuid_cmdline" != "none" ]]; then
|
||||
if [[ -z $ssh ]]; then
|
||||
notify_info "Backup started" "Starting backups to $uuid_cmdline..."
|
||||
|
||||
Reference in New Issue
Block a user