snap-sync: get_answer_yes_no update, batch/interactive option
- rework get_answer_yes_no() with preselection value - update parse_params to use --interactive and --batch option keep --noconfirm for history
This commit is contained in:
@@ -86,18 +86,19 @@ check_prerequisites () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
check_snapper_failed_ids () {
|
check_snapper_failed_ids () {
|
||||||
local noconfirm=${1:-$false}
|
local batch=${1:-$false}
|
||||||
|
|
||||||
# active, non finished snapshot backups are marked with following string
|
# active, non finished snapshot backups are marked with following string
|
||||||
# "$progname backup in progress" (snapper description field)
|
# "$progname backup in progress" (snapper description field)
|
||||||
snapper_failed_ids=$(eval snapper --config $selected_config list --type single | awk '/'"$snap_description_running"'/ {cnt++} END {print cnt}')
|
snapper_failed_ids=$(eval snapper --config $selected_config list --type single | awk '/'"$snap_description_running"'/ {cnt++} END {print cnt}')
|
||||||
if [ ${#snapper_failed_ids} -gt 0 ]; then
|
if [ ${#snapper_failed_ids} -gt 0 ]; then
|
||||||
#if [ -n "$snapper_failed_ids" ]; then
|
#if [ -n "$snapper_failed_ids" ]; then
|
||||||
if [ "$noconfirm" ]; then
|
if [ "$batch" ]; then
|
||||||
answer="yes"
|
answer="yes"
|
||||||
else
|
else
|
||||||
printf "\nNOTE: Found %s previous failed sync runs for '%s'.\n" "${snapper_failed_ids}" "$selected_config" | tee $PIPE
|
printf "\nNOTE: Found %s previous failed sync runs for '%s'.\n" "${snapper_failed_ids}" "$selected_config" | tee $PIPE
|
||||||
get_answer_yes_no "Delete failed backup snapshots [y/N]? " "no"
|
answer=no
|
||||||
|
get_answer_yes_no "Delete failed backup snapshots [y/N]? " "$answer"
|
||||||
fi
|
fi
|
||||||
if [ "$answer" = "yes" ]; then
|
if [ "$answer" = "yes" ]; then
|
||||||
cmd2="snapper --config \"$selected_config\" list | awk '/'\"$snap_description_running\"'/ {print \$3}'"
|
cmd2="snapper --config \"$selected_config\" list | awk '/'\"$snap_description_running\"'/ {print \$3}'"
|
||||||
@@ -188,7 +189,7 @@ get_answer_yes_no () {
|
|||||||
local message="${1:-'Do you want to proceed [y/N]? '}"
|
local message="${1:-'Do you want to proceed [y/N]? '}"
|
||||||
local i="none"
|
local i="none"
|
||||||
|
|
||||||
#printf "Pre-selected answer: %s\n" $answer
|
# hack: answer is a global variable, using it for preselection
|
||||||
while [ "$i" = "none" ]; do
|
while [ "$i" = "none" ]; do
|
||||||
read -r -p "$message" i
|
read -r -p "$message" i
|
||||||
|
|
||||||
@@ -202,12 +203,15 @@ get_answer_yes_no () {
|
|||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
i="none"
|
if [ -n "$answer" ]; then
|
||||||
printf "Select 'y' or 'n'.\n"
|
i="$answer"
|
||||||
|
else
|
||||||
|
i="none"
|
||||||
|
printf "Select 'y' or 'n'.\n"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
#printf "Selected answer: %s\n" $answer
|
|
||||||
}
|
}
|
||||||
|
|
||||||
notify () {
|
notify () {
|
||||||
@@ -264,8 +268,13 @@ parse_params () {
|
|||||||
description="$2"
|
description="$2"
|
||||||
shift 2
|
shift 2
|
||||||
;;
|
;;
|
||||||
-n|--noconfirm)
|
-i|--interactive)
|
||||||
noconfirm=1
|
interactive=1
|
||||||
|
donotify=1
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-n|--noconfirm|--batch)
|
||||||
|
batch=1
|
||||||
donotify=0
|
donotify=0
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
@@ -366,14 +375,15 @@ parse_params () {
|
|||||||
printf " disk Backupdir: '%s'\n" "$backupdir_cmdline"
|
printf " disk Backupdir: '%s'\n" "$backupdir_cmdline"
|
||||||
printf " remote host: '%s'\n" "$ssh"
|
printf " remote host: '%s'\n" "$ssh"
|
||||||
|
|
||||||
printf "Snapper Descriptions"
|
printf "Snapper Descriptions\n"
|
||||||
printf " backup finished: '%s'\n" "$snap_description_finished"
|
printf " backup finished: '%s'\n" "$snap_description_finished"
|
||||||
printf " backup synced: '%s'\n" "$snap_description_synced"
|
printf " backup synced: '%s'\n" "$snap_description_synced"
|
||||||
printf " backup running: '%s'\n" "$snap_description_running"
|
printf " backup running: '%s'\n" "$snap_description_running"
|
||||||
|
|
||||||
if [ "$verbose" ]; then snap_sync_options="verbose=true"; fi
|
if [ "$verbose" ]; then snap_sync_options="verbose=true"; fi
|
||||||
if [ "$dryrun" ]; then snap_sync_options="${snap_sync_options} dry-run=true"; fi
|
if [ "$dryrun" ]; then snap_sync_options="${snap_sync_options} dry-run=true"; fi
|
||||||
if [ "$noconfirm" ]; then snap_sync_options="${snap_sync_options} noconfirm=true"; fi
|
if [ "$batch" ]; then snap_sync_options="${snap_sync_options} batch=true"; fi
|
||||||
|
if [ "$interactive" ]; then snap_sync_options="${snap_sync_options} interactive=true batch=false"; fi
|
||||||
printf "Options: '%s'\n" "${snap_sync_options}"
|
printf "Options: '%s'\n" "${snap_sync_options}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -401,7 +411,7 @@ run_config () {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# cleanup failed former runs
|
# cleanup failed former runs
|
||||||
check_snapper_failed_ids $noconfirm
|
check_snapper_failed_ids $batch
|
||||||
|
|
||||||
SNAP_SYNC_EXCLUDE=no
|
SNAP_SYNC_EXCLUDE=no
|
||||||
if [ -f "/etc/snapper/configs/$selected_config" ]; then
|
if [ -f "/etc/snapper/configs/$selected_config" ]; then
|
||||||
@@ -438,7 +448,7 @@ run_config () {
|
|||||||
backupdir=$backupdir_cmdline
|
backupdir=$backupdir_cmdline
|
||||||
backup_root="$selected_target/$backupdir"
|
backup_root="$selected_target/$backupdir"
|
||||||
else
|
else
|
||||||
if [ ! $noconfirm ]; then
|
if [ ! $batch ]; then
|
||||||
read -r -p "Enter name of directory to store backups, relative to $selected_target (to be created if not existing): " backupdir
|
read -r -p "Enter name of directory to store backups, relative to $selected_target (to be created if not existing): " backupdir
|
||||||
if [ -z "$backupdir" ]; then
|
if [ -z "$backupdir" ]; then
|
||||||
backup_root="$selected_target"
|
backup_root="$selected_target"
|
||||||
@@ -457,7 +467,24 @@ run_config () {
|
|||||||
printf "Last syncronized Snapshot-ID for '%s': %s\n" "$selected_config" "$snapper_sync_id"
|
printf "Last syncronized Snapshot-ID for '%s': %s\n" "$selected_config" "$snapper_sync_id"
|
||||||
printf "Last syncronized Snapshot-Path for '%s': %s\n" "$selected_config" "$snapper_sync_snapshot"
|
printf "Last syncronized Snapshot-Path for '%s': %s\n" "$selected_config" "$snapper_sync_snapshot"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
backupdir=$(snapper --config "$selected_config" list --type single | awk -F "|" '/subvolid='"$selected_subvol"'/, /uuid='"$selected_uuid"'/ {print $5}' | awk -F "," '/backupdir/ {print $1}' | awk -F"=" '{print $2}')
|
backupdir=$(snapper --config "$selected_config" list --type single | awk -F "|" '/subvolid='"$selected_subvol"'/, /uuid='"$selected_uuid"'/ {print $5}' | awk -F "," '/backupdir/ {print $1}' | awk -F"=" '{print $2}')
|
||||||
|
if [ "$interactive" ]; then
|
||||||
|
if [ -z "$backupdir"]; then
|
||||||
|
answer=yes
|
||||||
|
get_answer_yes_no "Keep empty backupdir [Y/n]? " "$answer"
|
||||||
|
else
|
||||||
|
get_answer_yes_no "Keep backupdir '$backupdir' [Y/n]? " "$answer"
|
||||||
|
fi
|
||||||
|
if [ "$answer" = "no" ]; then
|
||||||
|
read -r -p "Enter name of directory to store backups, relative to $selected_target (to be created if not existing): " backupdir
|
||||||
|
if [ -z "$backupdir" ]; then
|
||||||
|
backup_root="$selected_target"
|
||||||
|
else
|
||||||
|
backup_root="$selected_target/$backupdir"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
if [ -z "$backupdir" ]; then
|
if [ -z "$backupdir" ]; then
|
||||||
backup_root="$selected_target"
|
backup_root="$selected_target"
|
||||||
else
|
else
|
||||||
@@ -512,10 +539,11 @@ run_config () {
|
|||||||
|
|
||||||
cont_backup="K"
|
cont_backup="K"
|
||||||
eval "snapper_activate_$i=yes"
|
eval "snapper_activate_$i=yes"
|
||||||
if [ $noconfirm ]; then
|
if [ $batch ]; then
|
||||||
cont_backup="yes"
|
cont_backup="yes"
|
||||||
else
|
else
|
||||||
get_answer_yes_no "Continue with backup [Y/n]? " "yes"
|
answer=yes
|
||||||
|
get_answer_yes_no "Continue with backup [Y/n]? " "$answer"
|
||||||
if [ "$answer" = "no" ]; then
|
if [ "$answer" = "no" ]; then
|
||||||
eval "snapper_activate_$i=no"
|
eval "snapper_activate_$i=no"
|
||||||
printf "Aborting backup for this configuration.\n"
|
printf "Aborting backup for this configuration.\n"
|
||||||
@@ -528,10 +556,10 @@ run_config () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
run_cleanup () {
|
run_cleanup () {
|
||||||
noconfirm="1"
|
batch="1"
|
||||||
|
|
||||||
# cleanup failed runs
|
# cleanup failed runs
|
||||||
check_snapper_failed_ids "$noconfirm"
|
check_snapper_failed_ids "$batch"
|
||||||
|
|
||||||
# cleanup target
|
# cleanup target
|
||||||
#$ssh btrfs subvolume delete $backup_root/$snapper_target_config/$snapper_snapshots/$snapper_new_id/snapshot
|
#$ssh btrfs subvolume delete $backup_root/$snapper_target_config/$snapper_snapshots/$snapper_new_id/snapshot
|
||||||
@@ -915,7 +943,7 @@ Options:
|
|||||||
configuration. Can list multiple configurations within quotes, space-separated
|
configuration. Can list multiple configurations within quotes, space-separated
|
||||||
(e.g. -c "root home").
|
(e.g. -c "root home").
|
||||||
-n, --noconfirm Do not ask for confirmation for each configuration. Will still prompt for backup
|
-n, --noconfirm Do not ask for confirmation for each configuration. Will still prompt for backup
|
||||||
directory name on first backup"
|
--batch directory name on first backup"
|
||||||
-s, --subvolid <subvlid> Specify the subvolume id of the mounted BTRFS subvolume to back up to. Defaults to 5.
|
-s, --subvolid <subvlid> Specify the subvolume id of the mounted BTRFS subvolume to back up to. Defaults to 5.
|
||||||
-u, --UUID <UUID> Specify the UUID of the mounted BTRFS subvolume to back up to. Otherwise will prompt."
|
-u, --UUID <UUID> Specify the UUID of the mounted BTRFS subvolume to back up to. Otherwise will prompt."
|
||||||
If multiple mount points are found with the same UUID, will prompt user."
|
If multiple mount points are found with the same UUID, will prompt user."
|
||||||
@@ -1003,7 +1031,7 @@ verify_snapper_structure () {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# cleanup generated snapper entry
|
# cleanup generated snapper entry
|
||||||
check_snapper_failed_ids $noconfirm
|
check_snapper_failed_ids $batch
|
||||||
die "Can't create new snapshot with given snapshot-id!"
|
die "Can't create new snapshot with given snapshot-id!"
|
||||||
return=1
|
return=1
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user