From 1f6a02a5e8e042edadaf53923afa26756b62457b Mon Sep 17 00:00:00 2001 From: badra001 Date: Wed, 26 Apr 2023 22:16:21 -0400 Subject: [PATCH] fix --- code/ddns-lambda.py | 49 +++++++++++++++++++++++++++++-------------- code/ddns-lambda.zip | Bin 23554 -> 23698 bytes 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/code/ddns-lambda.py b/code/ddns-lambda.py index da1e662..b4f17f4 100755 --- a/code/ddns-lambda.py +++ b/code/ddns-lambda.py @@ -73,7 +73,7 @@ LOGGER = logging.getLogger() account_id = None region = None -VERSION = '1.2.0b70' +VERSION = '1.2.0b71' # Read Env variables DEBUG_LOG_LEVEL = os.environ.get('DebugLogLevel', 'INFO') @@ -1668,24 +1668,39 @@ def new_change_resource_recordset(oclient, instance_id, zone_id, host_name, host LOGGER.debug("change_resource_record_sets UPSERT returned without error - response: %s", str(update_response) + lineno()) break - except ClientError as err: - LOGGER.info( - f"exception: {instance_id} err {err} sys.exc_info {sys.exc_info()[0]} {sys.exc_info()[1]} {lineno()}") - if 'NoSuchHostedZone' in str(err) and 'No hosted zone found with ID' in str(err): - LOGGER.error("Hosted zone not found error: %s", str(err) + lineno()) +# except ClientError as err: +# LOGGER.info( +# f"exception: {instance_id} err {err} sys.exc_info {sys.exc_info()[0]} {sys.exc_info()[1]} {lineno()}") + except Route53.Client.exceptions.NoSuchHostedZone as err: + + +# if 'NoSuchHostedZone' in str(err) and 'No hosted zone found with ID' in str(err): +3 LOGGER.error("Hosted zone not found error: %s", str(err) + lineno()) + LOGGER.info( + f"exception: NoSuchHostedZone {err} sys.exc_info {sys.exc_info()[0]} {sys.exc_info()[1]} {lineno()}") update_response = "NoSuchHostedZone" break - elif 'InvalidChangeBatch' in str(err) and 'is not permitted in zone' in str(err): - LOGGER.error( - "Cannot create record - most likely wrong zone name specified: %s", str(err) + lineno()) - update_response = "InvalidChangeBatch-WrongZoneName" + except Route53.Client.exceptions.InvalidChangeBatch as err: +# elif 'InvalidChangeBatch' in str(err) and 'is not permitted in zone' in str(err): +# LOGGER.error( +# "Cannot create record - most likely wrong zone name specified: %s", str(err) + lineno()) +# update_response = "InvalidChangeBatch-WrongZoneName" + LOGGER.info(f"exception: InvalidChangeBatch {err} sys.exc_info {sys.exc_info()[0]} {sys.exc_info()[1]} {lineno()}") + update_response = "InvalidChangeBatch" break - elif "(Throttling)" in str(err): - LOGGER.debug("change_resource_record_sets UPSERT throttled due to API limit, retrying: %s", str( - err) + lineno()) - else: - LOGGER.info( - f"instance: {instance_id} unexpected error: {err} sys.exc_info {sys.exc_info()[0]} {sys.exc_info()[1]} {lineno()}") + except Route53.Client.exceptions.InvalidInput as err: + LOGGER.info(f"exception: InvalidInput {err} sys.exc_info {sys.exc_info()[0]} {sys.exc_info()[1]} {lineno()}") + update_response = "InvalidInput" + break + except Route53.Client.exceptions.PriorRequestNotComplete as err: +# elif "(Throttling)" in str(err): + LOGGER.info(f"exception: PriorRequestNotComplete {err} sys.exc_info {sys.exc_info()[0]} {sys.exc_info()[1]} {lineno()}") +# LOGGER.debug("change_resource_record_sets UPSERT throttled due to API limit, retrying: %s", str(err) + lineno()) +# else: +# LOGGER.info( +# f"instance: {instance_id} unexpected error: {err} sys.exc_info {sys.exc_info()[0]} {sys.exc_info()[1]} {lineno()}") + except Exception as err: + LOGGER.info(f"exception: Exception {err} sys.exc_info {sys.exc_info()[0]} {sys.exc_info()[1]} {lineno()}") i += 1 LOGGER.info("instance: %s, change_resource_record_sets UPSERT returned error, waiting before retry. %s", @@ -1695,6 +1710,8 @@ def new_change_resource_recordset(oclient, instance_id, zone_id, host_name, host count['sleep.time'] += i count['retry'] += 1 + + if i >= MAX_API_RETRY: LOGGER.error("instance: %s, change_resource_record_sets exceeded max retry of %s", instance_id, str(MAX_API_RETRY) + lineno()) diff --git a/code/ddns-lambda.zip b/code/ddns-lambda.zip index e91430fe58058989b17589e8b71089615144e82f..c9458ee03187ee7e33fcc5993c794a9701f12ea7 100644 GIT binary patch delta 10427 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