simplifying automated nfs backup
This commit is contained in:
@@ -237,79 +237,6 @@ restore_all_remaining() {
|
||||
fi
|
||||
}
|
||||
|
||||
resource_replicas() {
|
||||
local namespace="${1:?namespace required}"
|
||||
local kind="${2:?kind required}"
|
||||
local name="${3:?name required}"
|
||||
local json_path="${4:?jsonpath required}"
|
||||
_kubectl -n "$namespace" get "${kind}/${name}" -o "jsonpath=${json_path}" 2>/dev/null || true
|
||||
}
|
||||
|
||||
wait_for_scale_state() {
|
||||
local namespace="${1:?namespace is required}"
|
||||
local state_file="${2:?state file is required}"
|
||||
local direction="${3:?direction is required}" # down|up
|
||||
local start_ts
|
||||
local now_ts
|
||||
local elapsed
|
||||
local unresolved
|
||||
local kind
|
||||
local name
|
||||
local target
|
||||
local spec
|
||||
local status
|
||||
local ready
|
||||
|
||||
start_ts="$(date +%s)"
|
||||
while true; do
|
||||
unresolved=0
|
||||
while IFS=$'\t' read -r kind name target; do
|
||||
[[ -z "$kind" || -z "$name" ]] && continue
|
||||
|
||||
spec="$(resource_replicas "$namespace" "$kind" "$name" '{.spec.replicas}')"
|
||||
status="$(resource_replicas "$namespace" "$kind" "$name" '{.status.replicas}')"
|
||||
ready="$(resource_replicas "$namespace" "$kind" "$name" '{.status.readyReplicas}')"
|
||||
|
||||
# If all three values are empty the resource was likely deleted
|
||||
# between capture and now — nothing to wait for.
|
||||
if [[ -z "$spec" && -z "$status" && -z "$ready" ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
[[ -z "$spec" ]] && spec="1"
|
||||
[[ -z "$status" ]] && status="0"
|
||||
[[ -z "$ready" ]] && ready="0"
|
||||
|
||||
if [[ "$direction" == "down" ]]; then
|
||||
if [[ "$spec" != "0" || "$status" != "0" ]]; then
|
||||
unresolved=$((unresolved + 1))
|
||||
fi
|
||||
else
|
||||
if [[ "$target" == "0" ]]; then
|
||||
if [[ "$spec" != "0" || "$status" != "0" ]]; then
|
||||
unresolved=$((unresolved + 1))
|
||||
fi
|
||||
else
|
||||
if [[ "$spec" != "$target" || "$ready" != "$target" ]]; then
|
||||
unresolved=$((unresolved + 1))
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done < "$state_file"
|
||||
|
||||
if [[ "$unresolved" -eq 0 ]]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
now_ts="$(date +%s)"
|
||||
elapsed=$((now_ts - start_ts))
|
||||
if (( elapsed >= SCALE_TIMEOUT_SECONDS )); then
|
||||
return 1
|
||||
fi
|
||||
sleep 3
|
||||
done
|
||||
}
|
||||
|
||||
archive_path_for_run() {
|
||||
local ts
|
||||
ts="$(date +"$ARCHIVE_TS_FORMAT")"
|
||||
@@ -476,12 +403,8 @@ process_folder() {
|
||||
capture_replicas_state "$namespace" "$state_file"
|
||||
scale_namespace_to_zero "$namespace" "$state_file"
|
||||
|
||||
if wait_for_scale_state "$namespace" "$state_file" "down"; then
|
||||
log_info "Namespace '${namespace}' reached scale-down target"
|
||||
else
|
||||
log_warn "Timeout waiting for namespace '${namespace}' to fully scale down; continuing by policy"
|
||||
scale_warnings=$((scale_warnings + 1))
|
||||
fi
|
||||
log_info "Waiting 30 seconds for namespace '${namespace}' to scale down..."
|
||||
sleep 30
|
||||
else
|
||||
unmapped_folders=$((unmapped_folders + 1))
|
||||
log_warn "No namespace matched folder '${folder_name}'. Running backup only."
|
||||
@@ -497,12 +420,8 @@ process_folder() {
|
||||
|
||||
if [[ "$has_mapping" -eq 1 ]]; then
|
||||
restore_namespace_replicas "$namespace" "$state_file"
|
||||
if wait_for_scale_state "$namespace" "$state_file" "up"; then
|
||||
log_info "Namespace '${namespace}' reached restore target"
|
||||
else
|
||||
log_warn "Timeout waiting for namespace '${namespace}' to fully restore replicas"
|
||||
restore_warnings=$((restore_warnings + 1))
|
||||
fi
|
||||
log_info "Waiting 30 seconds for namespace '${namespace}' to restore replicas..."
|
||||
sleep 30
|
||||
rm -f "$state_file"
|
||||
fi
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user