From 600640c034eafdd0de707a26f3e977fddbccf75f Mon Sep 17 00:00:00 2001 From: badra001 Date: Tue, 25 Apr 2023 09:42:35 -0400 Subject: [PATCH] fix --- code/ddns-lambda.py | 87 +++++++++++++++---------------------------- code/ddns-lambda.zip | Bin 21088 -> 21308 bytes 2 files changed, 29 insertions(+), 58 deletions(-) diff --git a/code/ddns-lambda.py b/code/ddns-lambda.py index 2c64928..d620c32 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.0b44' +VERSION = '1.2.0b45' # Read Env variables DEBUG_LOG_LEVEL = os.environ.get('DebugLogLevel', 'INFO') @@ -297,6 +297,7 @@ def lambda_handler( global phz_collection_by_vpc global count + count['start'] = datetime.now() LOGGER.info("event: %s", str(event) + lineno()) LOGGER.info("context: %s", str(context) + lineno()) LOGGER.info("Sns Topic Mode: %s, sending to %s", str(SNS_ENABLE), SNS_TOPIC_ARN) @@ -323,6 +324,7 @@ def lambda_handler( # Set variables # Get the state from the Event stream + event_source = event['source'] state = event['detail']['state'] LOGGER.debug("instance state: %s", str(state) + lineno()) @@ -610,6 +612,7 @@ def lambda_handler( flags = process_tags_flags(tags) LOGGER.debug("New flags structure: %s", str(pformat(flags)) + lineno()) + LOGGER.info("Options flags: " + ' '.join([f"{x}={flags[x]}" for x in flags])) tag_data = {} tag_data_fields = ['valid', 'hostname', 'zonename'] @@ -771,12 +774,19 @@ def lambda_handler( caller_response.append('Failed to create ' + append_msg) LOGGER.error('Failed to create TXT record: %s', create_response) + else: + LOGGER.info( + f"flags=noheritage, not adding heritage TXT for A host {final_private_hostname} zone {zone_data_forward.name} value {private_ip}") except BaseException as err: LOGGER.error("instance: %s, unexpected error. %s\n", instance_id, str(err) + lineno()) + else: + LOGGER.info( + f"flags=noforward, not adding A and heritage TXT for host {final_private_hostname} zone {zone_data_forward.name} value {private_ip}") if not flags['noreverse']: + fqdn = create_fqdn(final_private_hostname, final_hosted_zone_name) try: if reverse_zone_associated: create_response = create_resource_record( @@ -786,10 +796,10 @@ def lambda_handler( tag_data['ptr_entry'].hostname, tag_data['ptr_entry'].zonename, 'PTR', - create_fqdn(final_private_hostname, final_hosted_zone_name), + fqdn, ) append_msg = f"PTR record in zone id: {zone_data_reverse.zone_id} owner {zone_data_reverse.owner_account} for hostname {tag_data['ptr_entry'].hostname} " + \ - f"zone {tag_data['ptr_entry'].zonename} to value {final_private_dns_name}" + f"zone {tag_data['ptr_entry'].zonename} to value {fqdn}" count[create_response] += 1 if create_response == 'success': LOGGER.info("instance: %s, Created %s", @@ -832,11 +842,17 @@ def lambda_handler( LOGGER.error('Failed to create TXT record: %s', create_response) + else: + LOGGER.info( + f"flags=noheritage, not adding heritage TXT for PTR host {tag_data['ptr_entry'].hostname} zone {tag_data['ptr_entry'].zonename}") except BaseException as err: LOGGER.error("instance: %s, unexpected error. %s\n", instance_id, str(err) + lineno()) + else: + LOGGER.info( + f"flags=noreverse, not adding PTR and heritage TXT for host {tag_data['ptr_entry'].hostname} zone {tag_data['ptr_entry'].zonename} value {fqdn}") - else: # not running so delete the records + else: # not running so delete the records. Note this may leave orphans around if the flags are set and then the host is shut down. We may want to remove no matter what. if not flags['noforward']: # Process and delete A record and associated TXT record process_response = process_delete_records( @@ -989,7 +1005,9 @@ def lambda_handler( instance_id, lineno()) caller_response.insert(0, 'Successfully created recordsets') - LOGGER.info(f'{APPNAME} stats: ' + + count['end'] = datetime.now() + count['elapsed_ms'] = (count['end'] - count['start']).total_seconds() * 1000.0 + LOGGER.info(f"{APPNAME} stats: source={event_source} state={state} " + ' '.join([f"{c}={count[c]}" for c in sorted(count.keys())])) return caller_response @@ -1042,6 +1060,7 @@ def get_instances(client, instance_id): time.sleep(i) count['sleep.count'] += 1 count['sleep.time'] += i + count['retry'] += 1 return instance_data @@ -1087,6 +1106,7 @@ def new_list_hosted_zones(client, instance_id): time.sleep(i) count['sleep.count'] += 1 count['sleep.time'] += i + count['retry'] += 1 if hosted_zones == {}: LOGGER.error("instance: %s, list_hosted_zones returned error. Timed out. %s", @@ -1143,6 +1163,7 @@ def new_list_hosted_zones_by_vpc(client, instance_id, vpc_id, region): time.sleep(i) count['sleep.count'] += 1 count['sleep.time'] += i + count['retry'] += 1 if hosted_zones == {}: LOGGER.error("vpc_id: %s, instance: %s, list_hosted_zones_by_vpc returned error. Timed out. %s", @@ -1390,6 +1411,7 @@ def get_dhcp_option_set_id_for_vpc(client, instance_id, vpc_id): time.sleep(i) count['sleep.count'] += 1 count['sleep.time'] += i + count['retry'] += 1 return option_set_for_vpc @@ -1556,6 +1578,7 @@ def new_change_resource_recordset(oclient, instance_id, zone_id, host_name, host time.sleep(i) count['sleep.count'] += 1 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", @@ -1773,6 +1796,7 @@ def new_get_resource_record(oclient, instance_id, zone_id, host_name, hosted_zon time.sleep(i) count['sleep.count'] += 1 count['sleep.time'] += i + count['retry'] += 1 if i >= MAX_API_RETRY: LOGGER.error("instance: %s, list_resource_record_sets exceeded max retry of %s", @@ -1795,59 +1819,6 @@ def new_get_resource_record(oclient, instance_id, zone_id, host_name, hosted_zon return str(value) -# def delete_resource_record(client, zone_id, host_name, hosted_zone_name, record_type, value): -# """ -# This function deletes resource records from the hosted zone passed by the calling function. -# :param client: -# :param zone_id: -# :param host_name: -# :param hosted_zone_name: -# :param record_type: -# :param value: -# :return: -# """ -# try: -# LOGGER.debug("Deleting %s record %s in zone %s" -# " %s", record_type, host_name, hosted_zone_name, lineno()) -# if host_name[-1] != '.': -# host_name = host_name + '.' -# response = client.change_resource_record_sets( -# HostedZoneId=zone_id, -# ChangeBatch={ -# "Comment": "Updated by Lambda DDNS", -# "Changes": [ -# { -# "Action": "DELETE", -# "ResourceRecordSet": { -# "Name": host_name + hosted_zone_name, -# "Type": record_type, -# "TTL": DNS_RR_TTL, -# "ResourceRecords": [ -# { -# "Value": value -# }, -# ] -# } -# } -# ] -# } -# ) - -# LOGGER.debug("delete record response: %s", str(response) + lineno()) -# return response - -# except ClientError as err: -# if 'Not Found' in str(err): -# LOGGER.debug("Record not found error: %s", str(err) + lineno()) -# return - -# if 'InvalidChangeBatch' in str(err) and 'it was not found' in str(err): -# LOGGER.debug("Record not found error: %s", str(err) + lineno()) -# return - -# LOGGER.info("unexpected error. %s\n", str(err) + lineno()) - - def new_delete_resource_record(oclient, instance_id, zone_id, host_name, hosted_zone_name, record_type, value): """ This function deletes resource records from the hosted zone passed by the calling function. diff --git a/code/ddns-lambda.zip b/code/ddns-lambda.zip index 505f4d7bc5a4f6db7d923c927931f758edf2ed43..f2554e8c5190cfc82e21a587242bef558bc619bd 100644 GIT binary patch literal 21308 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