fix(script): Do snapshots atomically (#1)

This commit is contained in:
hygienic-books 2023-03-15 22:23:15 +01:00
parent 0b9c00c26b
commit bba8160d84

View File

@ -206,21 +206,32 @@ function trim_pkg_list_oneline () {
function do_snaps () { function do_snaps () {
local snap_name snap_return_code local snap_name snap_return_code
for snappable_dataset in "${snappable_datasets[@]}"; do local -a planned_snaps
snap_name="${snappable_dataset}"'@'"${snap_name_prefix}${snap_field_separator}${date_string}${snap_field_separator}"'op:'"${conf_op_suffix}${snap_field_separator}"'sev:'"${severity}${snap_field_separator}"'pkgs:'"${trimmed_pkg_list_oneline}" for snappable_dataset_id in "${!snappable_datasets[@]}"; do
snap_name="${snappable_datasets[${snappable_dataset_id}]}"'@'"${snap_name_prefix}${snap_field_separator}${date_string}${snap_field_separator}"'op:'"${conf_op_suffix}${snap_field_separator}"'sev:'"${severity}${snap_field_separator}"'pkgs:'"${trimmed_pkg_list_oneline}"
planned_snaps["${snappable_dataset_id}"]="${snap_name}"
done
if [[ "${do_dry_run}" == 'true' ]]; then if [[ "${do_dry_run}" == 'true' ]]; then
pprint 'info' 'Dry-run, pretending to run zfs snapshot '"${snap_name}" pprint 'info' 'Dry-run, pretending to atomically do zfs snapshot:'
for planned_snap in "${planned_snaps[@]}"; do
pprint 'info' "${planned_snap}"
done
else else
zfs snapshot "${snap_name}" zfs snapshot "${planned_snaps[@]}"
snap_return_code="${?}" snap_return_code="${?}"
if [[ "${snap_return_code}" -eq '0' ]]; then if [[ "${snap_return_code}" -eq '0' ]]; then
successfully_snapped_datasets+=("${snappable_dataset}") successfully_snapped_datasets=("${snappable_datasets[@]}")
pprint 'info' 'Snapshot done: '"${snap_name}" pprint 'info' 'zfs snapshot atomically done:'
else for planned_snap in "${planned_snaps[@]}"; do
pprint 'warn' 'Snapshot failed: '"${snap_name}" pprint 'info' "${planned_snap}"
fi
fi
done done
else
pprint 'warn' 'zfs snapshot failed:'
for planned_snap in "${planned_snaps[@]}"; do
pprint 'warn' "${planned_snap}"
done
fi
fi
} }
function get_snaps_in_cur_sev () { function get_snaps_in_cur_sev () {