From 70145d5897e29a3efbf39eb24e25f77c7b6a260b Mon Sep 17 00:00:00 2001 From: hygienic-books Date: Mon, 6 Mar 2023 02:47:11 +0100 Subject: [PATCH] feat(script): Add dry-run functionality (#1) --- pacman-zfs-snapshot.sh | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/pacman-zfs-snapshot.sh b/pacman-zfs-snapshot.sh index 49be235..cbf5c06 100755 --- a/pacman-zfs-snapshot.sh +++ b/pacman-zfs-snapshot.sh @@ -194,12 +194,16 @@ function do_snaps () { local snap_name for snappable_dataset in "${snappable_datasets[@]}"; do snap_name="${snappable_dataset}"'@'"${snap_name_prefix}${snap_field_separator}${date_string}${snap_field_separator}"'op:'"${operation}${snap_field_separator}"'sev:'"${severity}${snap_field_separator}"'pkgs:'"${trimmed_pkg_list_oneline}" - zfs snapshot "${snap_name}" && { - successfully_snapped_datasets+=("${snappable_dataset}") - pprint 'info' 'Snapshot done: '"${snap_name}" - } || { - pprint 'warn' 'Snapshot failed: '"${snap_name}" - } + if [[ "${do_dry_run}" == 'true' ]]; then + pprint 'info' 'Dry-run, pretending to run zfs snapshot '"${snap_name}" + else + zfs snapshot "${snap_name}" && { + successfully_snapped_datasets+=("${snappable_dataset}") + pprint 'info' 'Snapshot done: '"${snap_name}" + } || { + pprint 'warn' 'Snapshot failed: '"${snap_name}" + } + fi done } @@ -214,18 +218,22 @@ function get_snaps_in_cur_sev () { function do_retention () { local snap_list snaps_done_by_us snaps_in_cur_sev snaps_limit oldest_snap - for successfully_snapped_dataset in "${successfully_snapped_datasets[@]}"; do - snaps_in_cur_sev="$(get_snaps_in_cur_sev "${successfully_snapped_dataset}")" - if [[ "${severity}" == "${snaps_important_suffix}" ]]; then - snaps_limit="${snaps_important_keep}" - else - snaps_limit="${snaps_trivial_keep}" - fi - while [[ "$(get_snaps_in_cur_sev "${successfully_snapped_dataset}" | wc -l)" -gt "${snaps_limit}" ]]; do - oldest_snap="$(get_snaps_in_cur_sev "${successfully_snapped_dataset}" | head -n1)" - zfs destroy "${oldest_snap}" + if [[ "${do_dry_run}" == 'true' ]]; then + pprint 'info' 'Dry-run, skipping potential zfs destroy operations ...' + else + for successfully_snapped_dataset in "${successfully_snapped_datasets[@]}"; do + snaps_in_cur_sev="$(get_snaps_in_cur_sev "${successfully_snapped_dataset}")" + if [[ "${severity}" == "${snaps_important_suffix}" ]]; then + snaps_limit="${snaps_important_keep}" + else + snaps_limit="${snaps_trivial_keep}" + fi + while [[ "$(get_snaps_in_cur_sev "${successfully_snapped_dataset}" | wc -l)" -gt "${snaps_limit}" ]]; do + oldest_snap="$(get_snaps_in_cur_sev "${successfully_snapped_dataset}" | head -n1)" + zfs destroy "${oldest_snap}" + done done - done + fi } function main () {