feat: add retry count for removing record set

This avoids infinite loop when something went wrong and throws a error
This commit is contained in:
Easton Man 2023-03-07 09:48:13 +08:00
parent 799e402077
commit acbd8bce21
No known key found for this signature in database
GPG Key ID: 90BFA4AA9F563D97

View File

@ -98,19 +98,59 @@ dns_huaweicloud_rm() {
fi fi
_debug "Zone ID is:" "${zoneid}" _debug "Zone ID is:" "${zoneid}"
# Remove all records _recursive_rm_record "${token}" "${fulldomain}" "${zoneid}" "${record_id}"
# Therotically HuaweiCloud does not allow more than one record set ret="$?"
# But remove them recurringly to increase robusty if [ "${ret}" != "0" ]; then
while [ "${record_id}" != "0" ]; do _err "dns_api(dns_huaweicloud): Error removing record."
_debug "Removing Record" return 1
_rm_record "${token}" "${zoneid}" "${record_id}" fi
record_id="$(_get_recordset_id "${token}" "${fulldomain}" "${zoneid}")"
done
return 0 return 0
} }
################### Private functions below ################################## ################### Private functions below ##################################
# _recursive_rm_record
# remove all records from the record set
#
# _token=$1
# _domain=$2
# _zoneid=$3
# _record_id=$4
#
# Returns 0 on success
_recursive_rm_record() {
_token=$1
_domain=$2
_zoneid=$3
_record_id=$4
# Most likely to have problems will huaweicloud side if more than 50 attempts but still cannot fully remove the record set
# Maybe can be removed manually in the dashboard
_retry_cnt=50
# Remove all records
# Therotically HuaweiCloud does not allow more than one record set
# But remove them recurringly to increase robusty
while [ "${_record_id}" != "0" && "${_retry_cnt}" != "0" ]; do
_debug "Removing Record"
_retry_cnt=$((${_retry_cnt} - 1))
_rm_record "${_token}" "${_zoneid}" "${_record_id}"
_record_id="$(_get_recordset_id "${_token}" "${_domain}" "${_zoneid}")"
_debug2 "Checking record exists: record_id=${_record_id}"
done
# Check if retry count is reached
if [ "${_retry_cnt}" == "0" ]; then
_debug "Failed to remove record after 50 attempts, please try removing it manually in the dashboard"
return 1
fi
return 0
}
# _get_zoneid # _get_zoneid
# #
# _token=$1 # _token=$1
@ -216,11 +256,11 @@ _add_record() {
_debug "Record Set ID is:" "${_record_id}" _debug "Record Set ID is:" "${_record_id}"
# Remove all records # Remove all records
while [ "${_record_id}" != "0" ]; do _recursive_rm_record "${token}" "${_domain}" "${_zoneid}" "${_record_id}"
_debug "Removing Record" ret="$?"
_rm_record "${_token}" "${zoneid}" "${_record_id}" if [ "${ret}" != "0" ]; then
_record_id="$(_get_recordset_id "${_token}" "${_domain}" "${zoneid}")" return 1
done fi
# Add brand new records with all old and new records # Add brand new records with all old and new records
export _H2="Content-Type: application/json" export _H2="Content-Type: application/json"