From 14b3b55312280fbbbb119112966080be7fd7bb90 Mon Sep 17 00:00:00 2001 From: badra001 Date: Thu, 24 Feb 2022 14:06:06 -0500 Subject: [PATCH] lookup TXT record --- code/ddns-lambda.py | 74 ++++++++++++++++++++++++++++++++++++++++--- code/ddns-lambda.zip | Bin 11826 -> 12139 bytes 2 files changed, 69 insertions(+), 5 deletions(-) diff --git a/code/ddns-lambda.py b/code/ddns-lambda.py index 6bbeb13..824f9be 100755 --- a/code/ddns-lambda.py +++ b/code/ddns-lambda.py @@ -73,7 +73,7 @@ LOGGER = logging.getLogger() ACCOUNT = None REGION = None -VERSION = '0.1.11' +VERSION = '0.1.12' # Adjust the logging level [logging.INFO, logging.DEBUG, logging.WARNING, etc] LOGGER.setLevel(logging.DEBUG) @@ -728,9 +728,17 @@ def lambda_handler( ' with value: ' + str(private_ip)) + # pause 1 before deleting to avoid API limit + time.sleep(1) + heritage_value = get_resource_record( + route53, + final_hosted_zone_id, + final_private_hostname, + final_hosted_zone_name, + 'TXT', + heritage_value + ) if len(heritage) > 0: - # pause 1 before deleting to avoid API limit - time.sleep(1) delete_resource_record( route53, final_hosted_zone_id, @@ -767,9 +775,17 @@ def lambda_handler( ' with value: ' + str(final_private_dns_name)) + # pause 1 before deleting to avoid API limit + time.sleep(1) + heritage_value = delete_resource_record( + route53, + reverse_lookup_zone_id, + reversed_ip_address, + 'in-addr.arpa', + 'TXT', + heritage_value + ) if len(heritage) > 0: - # pause 1 before deleting to avoid API limit - time.sleep(1) delete_resource_record( route53, reverse_lookup_zone_id, @@ -870,6 +886,14 @@ def lambda_handler( ' with value: ' + str(final_private_dns_name)) + heritage_value = get_resource_record( + route53, + cname_domain_suffix_id, + TXT_RR_PREFIX + '.' + cname_host_name, + cname_domain_suffix, + 'TXT', + heritage_value + ) if len(heritage) > 0: delete_resource_record( route53, @@ -1210,6 +1234,46 @@ def create_resource_record(client, zone_id, host_name, hosted_zone_name, record_ "of duplicates: %s", str(err) + lineno()) +def get_resource_record(client, zone_id, host_name, hosted_zone_name, record_type, unused=None): + """ + This function getts resource records from the hosted zone passed by the calling function. + :param str client: + :param str zone_id: + :param str host_name: + :param str hosted_zone_name: + :param str record_type: + :param str unused: Placeholder for same calling parameters as delete_resource_record(); unused + :return str value: Value of record if found, None if not + """ + value = None + try: + LOGGER.debug("Getting %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.list_resource_record_sets( + HostedZoneId=zone_id, + StartRecordName=host_name, + StartRecordType=record_type, + MaxItems=1) + + if len(response) > 0: + rr_set = response['ResourceRecordSets'][0] + if rr_set['Name'] == host_name and rr_set['Type'] = record_type: + value = rr_set['ResourceRecords'][0]['Value'] + + except ClientError as err: + if 'Not Found' in str(err): + LOGGER.debug("Get record not found error: %s", str(err) + lineno()) + + if 'InvalidChangeBatch' in str(err) and 'it was not found' in str(err): + LOGGER.debug("Get record not found error: %s", str(err) + lineno()) + + LOGGER.info("Get record unexpected error. %s\n", str(err) + lineno()) + + return 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. diff --git a/code/ddns-lambda.zip b/code/ddns-lambda.zip index 1fe6566db2dd1fd67288f29cd16cd03768244610..6ffe5d6f9bb7cb737ffa9a40fe4c219957b885ea 100644 GIT binary patch literal 12139 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 Wl!1i$-`k-7jp~1U{685E0`fl-#^pBv