|
|
@ -98,19 +98,59 @@ dns_huaweicloud_rm() { |
|
|
|
fi |
|
|
|
_debug "Zone ID is:" "${zoneid}" |
|
|
|
|
|
|
|
record_id="$(_get_recordset_id "${token}" "${fulldomain}" "${zoneid}")" |
|
|
|
_recursive_rm_record "${token}" "${fulldomain}" "${zoneid}" "${record_id}" |
|
|
|
ret="$?" |
|
|
|
if [ "${ret}" != "0" ]; then |
|
|
|
_err "dns_api(dns_huaweicloud): Error removing record." |
|
|
|
return 1 |
|
|
|
fi |
|
|
|
|
|
|
|
return 0 |
|
|
|
} |
|
|
|
|
|
|
|
################### 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" ]; do |
|
|
|
|
|
|
|
while [ "${_record_id}" != "0" ] && [ "${_retry_cnt}" != "0" ]; do |
|
|
|
_debug "Removing Record" |
|
|
|
_rm_record "${token}" "${zoneid}" "${record_id}" |
|
|
|
record_id="$(_get_recordset_id "${token}" "${fulldomain}" "${zoneid}")" |
|
|
|
_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 |
|
|
|
} |
|
|
|
|
|
|
|
################### Private functions below ################################## |
|
|
|
|
|
|
|
# _get_zoneid |
|
|
|
# |
|
|
|
# _token=$1 |
|
|
@ -124,7 +164,7 @@ _get_zoneid() { |
|
|
|
|
|
|
|
i=1 |
|
|
|
while true; do |
|
|
|
h=$(printf "%s" "${_domain_string}" | cut -d . -f $i-100) |
|
|
|
h=$(printf "%s" "${_domain_string}" | cut -d . -f "$i"-100) |
|
|
|
if [ -z "$h" ]; then |
|
|
|
#not valid |
|
|
|
return 1 |
|
|
@ -135,11 +175,11 @@ _get_zoneid() { |
|
|
|
if _contains "${response}" '"id"'; then |
|
|
|
zoneidlist=$(echo "${response}" | _egrep_o "\"id\": *\"[^\"]*\"" | cut -d : -f 2 | tr -d \" | tr -d " ") |
|
|
|
zonenamelist=$(echo "${response}" | _egrep_o "\"name\": *\"[^\"]*\"" | cut -d : -f 2 | tr -d \" | tr -d " ") |
|
|
|
_debug2 "Return Zone ID(s):" "${zoneidlist}" |
|
|
|
_debug2 "Return Zone Name(s):" "${zonenamelist}" |
|
|
|
_debug2 "Returned Zone ID(s):" "${zoneidlist}" |
|
|
|
_debug2 "Returned Zone Name(s):" "${zonenamelist}" |
|
|
|
zoneidnum=0 |
|
|
|
zoneidcount=$(echo "${zoneidlist}" | grep -c '^') |
|
|
|
_debug "Retund Zone ID(s) Count:" "${zoneidcount}" |
|
|
|
_debug "Returned Zone ID(s) Count:" "${zoneidcount}" |
|
|
|
while [ "${zoneidnum}" -lt "${zoneidcount}" ]; do |
|
|
|
zoneidnum=$(_math "$zoneidnum" + 1) |
|
|
|
_zoneid=$(echo "${zoneidlist}" | sed -n "${zoneidnum}p") |
|
|
@ -206,8 +246,7 @@ _add_record() { |
|
|
|
\"type\": \"TXT\", |
|
|
|
\"ttl\": 1, |
|
|
|
\"records\": [ |
|
|
|
${_exist_record}, |
|
|
|
\"\\\"${_txtvalue}\\\"\" |
|
|
|
${_exist_record},\"\\\"${_txtvalue}\\\"\" |
|
|
|
] |
|
|
|
}" |
|
|
|
fi |
|
|
@ -215,19 +254,16 @@ _add_record() { |
|
|
|
_record_id="$(_get_recordset_id "${_token}" "${_domain}" "${zoneid}")" |
|
|
|
_debug "Record Set ID is:" "${_record_id}" |
|
|
|
|
|
|
|
# Remove all records |
|
|
|
while [ "${_record_id}" != "0" ]; do |
|
|
|
_debug "Removing Record" |
|
|
|
_rm_record "${_token}" "${zoneid}" "${_record_id}" |
|
|
|
_record_id="$(_get_recordset_id "${_token}" "${_domain}" "${zoneid}")" |
|
|
|
done |
|
|
|
|
|
|
|
# Add brand new records with all old and new records |
|
|
|
export _H2="Content-Type: application/json" |
|
|
|
export _H1="X-Auth-Token: ${_token}" |
|
|
|
|
|
|
|
_debug2 "${_post_body}" |
|
|
|
if [ -z "${_exist_record}" ]; then |
|
|
|
_post "${_post_body}" "${dns_api}/v2/zones/${zoneid}/recordsets" >/dev/null |
|
|
|
else |
|
|
|
_post "${_post_body}" "${dns_api}/v2/zones/${zoneid}/recordsets/${_record_id}" false "PUT" >/dev/null |
|
|
|
fi |
|
|
|
_code="$(grep "^HTTP" "$HTTP_HEADER" | _tail_n 1 | cut -d " " -f 2 | tr -d "\\r\\n")" |
|
|
|
if [ "$_code" != "202" ]; then |
|
|
|
_err "dns_huaweicloud: http code ${_code}" |
|
|
|