feature: process multiple CF API errors
- handle multiple CF API errors properly by grouping and reporting - update error messages - unify CF error tags in log to CF-ERROR
This commit is contained in:
parent
d9600c822f
commit
fe0f9caef1
36
cfddns.sh
36
cfddns.sh
@ -63,10 +63,10 @@ exitError() {
|
||||
errMsg="Cloudflare zone id (cfZoneId) is either null or undefined. Please check your Cloudflare credentials file."
|
||||
;;
|
||||
25)
|
||||
errMsg="Cloudflare API error. Please check the logs for 'CF-ERR-NO' and 'CF-ERR-MESSAGE' entries for details."
|
||||
errMsg="Cloudflare API error. Please review any 'CF-ERROR' lines in this log for details."
|
||||
;;
|
||||
26)
|
||||
errMsg="${failedDomainCount} domain update(s) failed. Please review this log file for details."
|
||||
errMsg="${failedDomainCount} domain update(s) failed. Any 'CF-ERROR' lines noted in this log may help determine what went wrong."
|
||||
;;
|
||||
*)
|
||||
printf "%s[%s] ERROR: An unspecified error occurred. Exiting.%s\n" "$err" "$(stamp)" "$norm" >>"$logFile"
|
||||
@ -83,8 +83,24 @@ exitOK() {
|
||||
exit 0
|
||||
}
|
||||
|
||||
stamp() {
|
||||
(date +%F" "%T)
|
||||
listCFErrors() {
|
||||
# extract error codes and messages in separate variables, replace newlines with underscores
|
||||
codes="$(printf "%s" "$1" | jq -r '.errors | .[] | .code' | tr '\n' '_')"
|
||||
messages="$(printf "%s" "$1" | jq -r '.errors | .[] | .message' | tr '\n' '_')"
|
||||
|
||||
# iterate codes and messages and assemble into coherent messages in log
|
||||
while [ -n "$codes" ] && [ -n "$messages" ]; do
|
||||
# get first code and message in respective sets
|
||||
code="${codes%%_*}"
|
||||
message="${messages%%_*}"
|
||||
|
||||
# update codes and messages sets by removing first item in each set
|
||||
codes="${codes#*_}"
|
||||
messages="${messages#*_}"
|
||||
|
||||
# output to log
|
||||
printf "[%s] CF-ERROR: Code %s. %s\n" "$(stamp)" "$code" "$message"
|
||||
done
|
||||
}
|
||||
|
||||
scriptExamples() {
|
||||
@ -413,11 +429,7 @@ while [ "$dnsRecordsToUpdate" != "${dnsRecordsToUpdate#*${dnsSeparator}}" ] && {
|
||||
cfSuccess="$(printf "%s" "$cfLookup" | jq -r '.success')"
|
||||
if [ "$cfSuccess" = "false" ]; then
|
||||
printf "%sERROR%s\n" "$err" "$norm"
|
||||
# get error code and message from CF API
|
||||
cfErrCode="$(printf "%s" "$cfLookup" | jq -r '.errors | .[] | .code')"
|
||||
cfErrMessage="$(printf "%s" "$cfLookup" | jq -r '.errors | .[] | .message')"
|
||||
printf "[%s] CF-ERR-NO: %s\n" "$(stamp)" "$cfErrCode"
|
||||
printf "[%s] CF-ERR-MSG: %s\n" "$(stamp)" "$cfErrMessage"
|
||||
listCFErrors "$cfLookup"
|
||||
exitError 25
|
||||
fi
|
||||
|
||||
@ -462,11 +474,7 @@ while [ "$dnsRecordsToUpdate" != "${dnsRecordsToUpdate#*${dnsSeparator}}" ] && {
|
||||
printf "%s[%s] SUCCESS: IP address for %s updated%s\n" "$ok" "$(stamp)" "$record" "$norm" >>"$logFile"
|
||||
else
|
||||
printf "%sFAILED%s\n" "$err" "$norm" >>"$logFile"
|
||||
# get error code and message from CF API
|
||||
cfErrCode="$(printf "%s" "$cfResult" | jq -r '.errors | .[] | .code')"
|
||||
cfErrMessage="$(printf "%s" "$cfResult" | jq -r '.errors | .[] | .message')"
|
||||
printf "[%s] CF-ERR-NO: %s\n" "$(stamp)" "$cfErrCode"
|
||||
printf "[%s] CF-ERR-MSG: %s\n" "$(stamp)" "$cfErrMessage"
|
||||
listCFErrors "$cfResult"
|
||||
printf "%s[%s] ERROR: Unable to update IP address for %s%s\n" "$err" "$(stamp)" "$record" "$norm" >>"$logFile"
|
||||
# do not exit with error, API error here is probably an update issue specific to this host
|
||||
# increment counter and note it after all processing finished
|
||||
|
Loading…
Reference in New Issue
Block a user