From 8e763c9c548806e7381a41dcba3df3d7f0cb41ae Mon Sep 17 00:00:00 2001 From: badra001 Date: Wed, 26 Apr 2023 20:14:49 -0400 Subject: [PATCH] fix --- code/ddns-lambda.py | 246 +++++++++++++++++++++++-------------------- code/ddns-lambda.zip | Bin 23093 -> 23340 bytes 2 files changed, 131 insertions(+), 115 deletions(-) diff --git a/code/ddns-lambda.py b/code/ddns-lambda.py index 51e530e..6571c9b 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.0b64' +VERSION = '1.2.0b65' # Read Env variables DEBUG_LOG_LEVEL = os.environ.get('DebugLogLevel', 'INFO') @@ -650,52 +650,63 @@ def lambda_handler( default_hostname = '-'.join(['ip'] + private_ip.split('.')) if tag_data['option_zone'].valid: if tag_data['option_name'].valid: - LOGGER.info("1.1 instance: %s, using tag_option.zone hostname %s and tag_option.zone zone %s.", - instance_id, tag_data['option_name'].hostname, tag_data['option_zone'].zonename) + LOGGER.info(f"1.1 instance: {instance_id}, using tag_option.zone hostname {tag_data['option_name'].hostname} and tag_option.zone zone {tag_data['option_zone'].zonename)}") f_hostname = tag_data['option_name'].hostname f_zonename = tag_data['option_zone'].zonename elif tag_data['name'].valid: - LOGGER.info("1.2 instance: %s, using tag_key.Name hostname %s and tag_option.zone zone %s.", - instance_id, tag_data['name'].hostname, tag_data['option_zone'].zonename) + LOGGER.info( + f"1.2 instance: {instance_id}, using tag_key.Name hostname {tag_data['name'].hostname} and tag_option.zone zone {tag_data['option_zone'].zonename}") f_hostname = tag_data['name'].hostname f_zonename = tag_data['option_zone'].zonename else: - LOGGER.info("1.3 instance: %s, using default ip-address %s for hostname and tag_option.zone zone %s.", - instance_id, default_hostname, tag_data['option_zone'].zonename) + LOGGER.info( + f"1.3 instance: {instance_id}, using default ip-address {default_hostname} for hostname and tag_option.zone zone {tag_data['option_zone'].zonename}") f_hostname = default_hostname f_zonename = tag_data['option_zone'].zonename else: if tag_data['option_name'].valid: - LOGGER.info("2.1 instance: %s, using tag_option.name hostname %s and and tag_option.name zone %s.", - instance_id, tag_data['option_name'].hostname, tag_data['option_name'].zonename) + LOGGER.info(f"2.1 instance: {instance_id}, using tag_option.name hostname {tag_data['option_name'].hostname} and and tag_option.name zone {tag_data['option_name'].zonename)}") f_hostname = tag_data['option_name'].hostname f_zonename = tag_data['option_name'].zonename elif not tag_data['option_name'].valid and tag_data['option_name'].hostname and tag_data['dhcp_options'].valid: - LOGGER.info("2.2 instance: %s, using tag_option.name hostname %s and and dhcp_options zone %s.", - instance_id, tag_data['option_name'].hostname, tag_data['dhcp_options'].zonename) f_hostname = tag_data['option_name'].hostname f_zonename = tag_data['dhcp_options'].zonename elif tag_data['name'].valid: - LOGGER.info("2.3 instance: %s, using tag_key.Name hostname %s and tag_key.Name zone %s.", - instance_id, tag_data['name'].hostname, tag_data['name'].zonename) + LOGGER.info( + f"2.3 instance: {instance_id}, using tag_key.Name hostname {tag_data['name'].hostname} and tag_key.Name zone {tag_data['name'].zonename}") f_hostname = tag_data['name'].hostname f_zonename = tag_data['name'].zonename elif not tag_data['name'].valid and tag_data['dhcp_options'].valid: - LOGGER.info("2.4 instance: %s, using default ip-addresss hostname %s and dhcp_options zone %s.", - instance_id, default_hostname, tag_data['dhcp_options'].zonename) + LOGGER.info( + f"2.4 instance: {instance_id}, using default ip-addresss hostname {default_hostname} and dhcp_options zone {tag_data['dhcp_options'].zonename}") f_hostname = default_hostname f_zonename = tag_data['dhcp_options'].zonename -# elif not tag_data['name'].valid and not tag_data['dhcp_options'].valid: else: - LOGGER.info("3.1 instance: %s, no valid hostname or zone found", instance_id) + LOGGER.info(f"3.1 instance: {instance_id}, no valid hostname or zone found") f_hostname = None f_zonename = None LOGGER.error( - "instance: %s, No DHCP Associated for VPC and no custom tags. Exiting Script", instance_id) + f"instance: {instance_id}, No DHCP Associated for VPC and no custom tags. Exiting Script") caller_response.append( - 'No DHCP Associated for VPC and no custom tags. Exiting Script') + f"No DHCP Associated for VPC and no custom tags. Exiting Script") return caller_response + + if tag_data['option_cname'].valid: + LOGGER.info( + f"4.1 instance: {instance_id}, CNAME using tag_option.cname hostname {tag_data['option_cname'].hostname} and tag_option.cname {tag_data['option_cname'].zonename}") + cf_hostname = tag_data['option_cname'].hostname + cf_zonename = tag_data['option_cname'].zonename + elif not tag_data['option_nname'].valid and tag_data['option_name'].hostname and f_zonename: + LOGGER.info(f"4.2 instance: {instance_id}, CNAME using tag_option.cname hostname {tag_data['option_cname'].hostname} and current zone {f_zonename}") + cf_hostname = tag_data['option_cname'].hostname + cf_zonename = f_zonename + else: + LOGGER.info(f"4.3 instance: {instance_id}, CNAME no valid hostname or zone found, skipping CNAME") + cf_hostname = None + cf_zonename = None + cf_fqdn=create_fqdn(cf_hostname, cf_zonename) + # note this will not continue and set a cname final_private_hostname = f_hostname if len(f_hostname) > 0 else default_hostname @@ -889,7 +900,6 @@ def lambda_handler( # so using existing tag data will not be valid if state != 'running': - if not flags['noforward']: heritage_records = {} for entry in dns_data: if entry.rr_type == 'TXT' and "heritage=" in entry.rr_value: @@ -898,81 +908,88 @@ def lambda_handler( if not (entry.rr_type == 'TXT' and "heritage=" in entry.rr_value): process_response = new_process_delete_records( instance_id, entry.zone_id, entry.rr_name, entry.zone_name, entry.rr_type, entry.rr_value, heritage_records.get(entry.rr_name, '')) - - # Process and delete A record and associated TXT record - process_response = process_delete_records( - route53, - instance_id, - zone_data_forward.zone_id, - final_private_hostname, - zone_data_forward.name, - 'A', - private_ip, - heritage_value - ) - - # only true if existing delete_records and the delete_success from the subroutine is true - delete_records = delete_records and process_response['delete_success'] - # append to the lsit - caller_response = caller_response + process_response['msg'] - count[f"delete_success.{process_response.get('delete_success')}"] += 1 - - if not flags['noreverse']: - # Process and delete PTR record and associated TXT record - process_response = process_delete_records( - route53, - instance_id, - zone_data_reverse.zone_id, - tag_data['ptr_entry'].hostname, - tag_data['ptr_entry'].zonename, - 'PTR', - final_private_dns_name, - heritage_value - ) - # only true if existing delete_records and the delete_success from the subroutine is true - delete_records = delete_records and process_response['delete_success'] - # append to the lsit - caller_response = caller_response + process_response['msg'] - count[f"delete_success.{process_response.get('delete_success')}"] += 1 + delete_records = delete_records and process_response['delete_success'] + caller_response = caller_response + process_response['msg'] + count[f"delete_success.{process_response.get('delete_success')}"] += 1 + +# # Process and delete A record and associated TXT record +# process_response = process_delete_records( +# route53, +# instance_id, +# zone_data_forward.zone_id, +# final_private_hostname, +# zone_data_forward.name, +# 'A', +# private_ip, +# heritage_value +# ) +# +# # only true if existing delete_records and the delete_success from the subroutine is true +# delete_records = delete_records and process_response['delete_success'] +# # append to the lsit +# caller_response = caller_response + process_response['msg'] +# count[f"delete_success.{process_response.get('delete_success')}"] += 1 +# +# if not flags['noreverse']: +# # Process and delete PTR record and associated TXT record +# process_response = process_delete_records( +# route53, +# instance_id, +# zone_data_reverse.zone_id, +# tag_data['ptr_entry'].hostname, +# tag_data['ptr_entry'].zonename, +# 'PTR', +# final_private_dns_name, +# heritage_value +# ) +# # only true if existing delete_records and the delete_success from the subroutine is true +# delete_records = delete_records and process_response['delete_success'] +# # append to the lsit +# caller_response = caller_response + process_response['msg'] +# count[f"delete_success.{process_response.get('delete_success')}"] += 1 # Process the CNAME record only if it has passed the check - if tag_data['option_cname'].valid: - cname_host_name = tag_data['option_cname'].hostname - cname_domain_suffix = tag_data['option_cname'].zonename - LOGGER.debug("cname record is valid - creating CNAME record:" - " %s", str(cname_host_name) + "." + str(cname_domain_suffix) + lineno()) - - cname_domain_suffix_item = phz_collection_by_vpc[cname_domain_suffix] - cname_domain_suffix_id = cname_domain_suffix_item['zone_id'] - LOGGER.debug("cname_domain_suffix_id: %s", str(cname_domain_suffix_id)) +# if tag_data['option_cname'].valid: + if cf_hostname: + LOGGER.debug(f"cname record is valid - creating CNAME record host {cf_hostname} zone {cf_zonename}: {lineno()}") +# cname_host_name = tag_data['option_cname'].hostname +# cname_domain_suffix = tag_data['option_cname'].zonename +# cname_domain_suffix_item = phz_collection_by_vpc[cname_domain_suffix] +# cname_domain_suffix_id = cname_domain_suffix_item['zone_id'] +# LOGGER.debug("cname_domain_suffix_id: %s", str(cname_domain_suffix_id)) + + cf_zonename_id = phz_collection_by_vpc[cf_zonename]['zone_id'] + LOGGER.debug(f"cname_domain_suffix_id: {cf_zonename_id}") # create CNAME record in private zone if state == 'running': try: - LOGGER.debug("cname_host_name:" - " %s", str(cname_host_name) + lineno()) - LOGGER.debug("cname_domain_suffix:" - " %s", str(cname_domain_suffix) + lineno()) - LOGGER.debug("cname_domain_suffix_id:" - " %s", str(cname_domain_suffix_id) + lineno()) - +# LOGGER.debug("cname_host_name:" +# " %s", str(cname_host_name) + lineno()) +# LOGGER.debug("cname_domain_suffix:" +# " %s", str(cname_domain_suffix) + lineno()) +# LOGGER.debug("cname_domain_suffix_id:" +# " %s", str(cname_domain_suffix_id) + lineno()) +# create_response = create_resource_record( route53, instance_id, - cname_domain_suffix_id, - cname_host_name, - cname_domain_suffix, +# cname_domain_suffix_id, +# cname_host_name, +# cname_domain_suffix, + cf_zonename_id, + cf_hostname, + cf_zonename, 'CNAME', - final_private_dns_name + final_private_dns_name, ) - append_msg = f"CNAME record in zone id: {cname_domain_suffix_id} owner {phz_collection_by_vpc[cname_domain_suffix]['owner_account']} " + \ - f"hostname {cname_host_name} in zone {cname_domain_suffix} with value {final_private_dns_name}" + append_msg = f"CNAME record in zone id: {cf_zonename_id} owner {phz_collection_by_vpc[cf_zonename_id]['owner_account']} " + \ + f"hostname {cf_hostname} in zone {cf_zonename} with value {final_private_dns_name}" if create_response == 'success': dns_data.append(dns_data_tuple( - cname_domain_suffix_id, cname_host_name, cname_domain_suffix, 'CNAME', final_private_dns_name)) - LOGGER.info("instance: %s, Created %s", - instance_id, append_msg + lineno()) + cf_zonename_id, cf_hostname, cf_zonename, 'CNAME', cf_fqdn)) + LOGGER.info(f"instance: {instance_id}, Created {append_msg} {lineno()}") caller_response.append('Created ' + append_msg) else: caller_response.append(create_response) @@ -985,56 +1002,55 @@ def lambda_handler( try: if not flags['noheritage']: if len(heritage) > 0: - LOGGER.debug("Creating heritage TXT resource records %s, with value of %s", - TXT_RR_PREFIX + '.' + cname_host_name, str(heritage_value) + lineno()) - cname_host_name_txt = TXT_RR_PREFIX + '.' + cname_host_name + cf_hostname_txt=TXT_RR_PREFIX+'.'+cf_hostname + LOGGER.debug(f"Creating heritage TXT resource records host {cf_hostname_txt} zone {cf_zonename} value {heritage_value} {lineno()}") create_response = create_resource_record( route53, instance_id, - cname_domain_suffix_id, - cname_host_name_txt, - cname_domain_suffix, +# cname_domain_suffix_id, +# cname_host_name_txt, +# cname_domain_suffix, + cf_zonename_id, + cf_hostname_txt, + cf_zonename, 'TXT', heritage_value ) - append_msg = f"TXT for CNAME record in zone id: {cname_domain_suffix_id} owner {phz_collection_by_vpc[cname_domain_suffix]['owner_account']} " + \ - f"hostname {cname_host_name} in zone {cname_domain_suffix} with value {heritage_value}" + append_msg = f"TXT for CNAME record in zone id: {cf_zonename_id} owner {phz_collection_by_vpc[cf_zonename]['owner_account']} " + \ + f"hostname {cf_hostname} in zone {cf_zonename} with value {heritage_value}" if create_response == 'success': dns_data.append(dns_data_tuple( - cname_domain_suffix_id, cname_host_name_txt, cname_domain_suffix, 'TXT', heritage_value)) - LOGGER.info("instance: %s, Created %s", - instance_id, append_msg + lineno()) + cf_zonename_id, cf_hostname_txt, cf_zonename, 'TXT', heritage_value)) + LOGGER.info(f"instance: {instance_id}, Created {append_msg} {lineno()}") caller_response.append('Created ' + append_msg) else: caller_response.append(create_response) caller_response.append('Failed to create ' + append_msg) - LOGGER.error( - 'Failed to create TXT fpr CNAME record: %s', create_response) + LOGGER.error(f"Failed to create TXT for CNAME record: {create_response}") except BaseException as err: - LOGGER.error("instance: %s, unexpected error. %s\n", - instance_id, str(err) + lineno()) - - # not running, so process delete CNAME and associated TXT record - else: - # Process and delete CNAME record and associated TXT record - process_response = process_delete_records( - route53, - instance_id, - cname_domain_suffix_id, - cname_host_name, - cname_domain_suffix, - 'CNAME', - final_private_dns_name, - heritage_value - ) - - # only true if existing delete_records and the delete_success from the subroutine is true - delete_records = delete_records and process_response['delete_success'] - # append to the lsit - caller_response = caller_response + process_response['msg'] + LOGGER.error(f"instance: {instance_id}, unexpected error: {err} {lineno()}") +# # not running, so process delete CNAME and associated TXT record +# else: +# # Process and delete CNAME record and associated TXT record +# process_response = process_delete_records( +# route53, +# instance_id, +# cname_domain_suffix_id, +# cname_host_name, +# cname_domain_suffix, +# 'CNAME', +# final_private_dns_name, +# heritage_value +# ) +# +# # only true if existing delete_records and the delete_success from the subroutine is true +# delete_records = delete_records and process_response['delete_success'] +# # append to the lsit +# caller_response = caller_response + process_response['msg'] +# # update ddb entry to include dns entries written to be able to delete them properly if state == 'running': try: diff --git a/code/ddns-lambda.zip b/code/ddns-lambda.zip index 0bfb4074dc0ecb9f2b8e2f8d088a73e8fc33163d..f4858ba4e4ddc6917fde0ad027ae2f000bc24f54 100644 GIT binary patch delta 16204 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 delta 15972 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 S008L#lk{3L2IE-(0002AyzuV;