Compare commits

...

5 Commits

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 () {
@@ -234,6 +245,7 @@ function get_snaps_in_cur_sev () {
function do_retention () { function do_retention () {
local snap_list snaps_done_by_us snaps_in_cur_sev snaps_limit oldest_snap snap_return_code local snap_list snaps_done_by_us snaps_in_cur_sev snaps_limit oldest_snap snap_return_code
local -a destroyed_snaps failed_to_destroy_snaps
if [[ "${do_dry_run}" == 'true' ]]; then if [[ "${do_dry_run}" == 'true' ]]; then
pprint 'info' 'Dry-run, skipping potential zfs destroy operations ...' pprint 'info' 'Dry-run, skipping potential zfs destroy operations ...'
else else
@@ -249,13 +261,26 @@ function do_retention () {
zfs destroy "${oldest_snap}" zfs destroy "${oldest_snap}"
snap_return_code="${?}" snap_return_code="${?}"
if [[ "${snap_return_code}" -eq '0' ]]; then if [[ "${snap_return_code}" -eq '0' ]]; then
pprint 'info' 'Oldest in chain '"'"'sev:'"${severity}"''"'"' destroyed: '"${oldest_snap}" destroyed_snaps+=("${oldest_snap}")
else else
pprint 'warn' 'Snapshot destruction failed: '"${oldest_snap}" failed_to_destroy_snaps+=("${oldest_snap}")
fi fi
done done
if [[ "${#destroyed_snaps[@]}" -gt '0' ]]; then
pprint 'info' 'Oldest ZFS snapshot'"$([[ "${#failed_to_destroy_snaps[@]}" -gt '1' ]] && printf -- '%s' 's')"' in chain '"'"'sev:'"${severity}"''"'"' destroyed:'
for destroyed_snap in "${destroyed_snaps[@]}"; do
pprint 'info' ' '"${destroyed_snap}"
done done
fi fi
if [[ "${#failed_to_destroy_snaps[@]}" -gt '0' ]]; then
pprint 'warn' 'Failed to prune ZFS snapshot'"$([[ "${#failed_to_destroy_snaps[@]}" -gt '1' ]] && printf -- '%s' 's')"' in chain '"'"'sev:'"${severity}"''"'"':'
for failed_to_destroy_snap in "${failed_to_destroy_snaps[@]}"; do
pprint 'warn' ' '"${failed_to_destroy_snap}"
done
fi
done
fi
return 0
} }
function main () { function main () {