From d8a6a6c17730f9e53bab158757eaca61434f7fbe Mon Sep 17 00:00:00 2001 From: badra001 Date: Tue, 25 Apr 2023 20:29:37 -0400 Subject: [PATCH] fix --- code/ddns-lambda.py | 57 +++++++++++++++++++++++-------------------- code/ddns-lambda.zip | Bin 21547 -> 21573 bytes 2 files changed, 31 insertions(+), 26 deletions(-) diff --git a/code/ddns-lambda.py b/code/ddns-lambda.py index 03b4afe..b0f17a5 100755 --- a/code/ddns-lambda.py +++ b/code/ddns-lambda.py @@ -742,7 +742,8 @@ def lambda_handler( f"zone {final_hosted_zone_name} to value {private_ip}" count[create_response] += 1 if create_response == 'success': - dns_data.append(dns_data_tuple(zone_data_forward.zone_id, final_private_hostname, zone_data_forward.name, 'A', private_ip) + dns_data.append(dns_data_tuple( + zone_data_forward.zone_id, final_private_hostname, zone_data_forward.name, 'A', private_ip)) LOGGER.info("instance: %s, Created %s", instance_id, append_msg + lineno()) caller_response.append('Created ' + append_msg) @@ -759,7 +760,7 @@ def lambda_handler( if len(heritage) > 0: LOGGER.debug( f"Creating heritage TXT resource records {final_private_hostname} with value {heritage_value}: {lineno()}") - create_response=create_resource_record( + create_response = create_resource_record( route53, instance_id, zone_data_forward.zone_id, @@ -768,12 +769,13 @@ def lambda_handler( 'TXT', heritage_value ) - append_msg=f"TXT record in zone id: {zone_data_forward.zone_id} owner {zone_data_forward.owner_account} for hostname {final_private_hostname} " + + append_msg = f"TXT record in zone id: {zone_data_forward.zone_id} owner {zone_data_forward.owner_account} for hostname {final_private_hostname} " + f"zone {zone_data_forward.name} to value {heritage_value}" count[create_response] += 1 if create_response == 'success': - dns_data.append(dns_data_tuple(zone_data_forward.zone_id, final_private_hostname, zone_data_forward.name, 'TXT', heritage_value) + dns_data.append(dns_data_tuple( + zone_data_forward.zone_id, final_private_hostname, zone_data_forward.name, 'TXT', heritage_value)) LOGGER.info("instance: %s, Created %s", instance_id, append_msg + lineno()) caller_response.append('Created ' + append_msg) @@ -797,7 +799,7 @@ def lambda_handler( # fqdn = create_fqdn(final_private_hostname, final_hosted_zone_name) try: if reverse_zone_associated: - create_response=create_resource_record( + create_response = create_resource_record( route53, instance_id, zone_data_reverse.zone_id, @@ -806,11 +808,12 @@ def lambda_handler( 'PTR', final_private_dns_name, ) - 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} " + \ + 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}" count[create_response] += 1 if create_response == 'success': - dns_data.append(dns_data_tuple(zone_data_reverse.zone_id, tag_data['ptr_entry'].hostname, tag_data['ptr_entry'].zonename, 'PTR', final_private_dns_name) + dns_data.append(dns_data_tuple( + zone_data_reverse.zone_id, tag_data['ptr_entry'].hostname, tag_data['ptr_entry'].zonename, 'PTR', final_private_dns_name)) LOGGER.info("instance: %s, Created %s", instance_id, append_msg + lineno()) caller_response.append('Created ' + append_msg) @@ -828,7 +831,7 @@ def lambda_handler( if reverse_zone_associated and len(heritage) > 0: LOGGER.debug( f"Creating heritage TXT resource records {tag_data['ptr_entry'].hostname} with value {heritage_value}: {lineno()}") - create_response=create_resource_record( + create_response = create_resource_record( route53, instance_id, zone_data_reverse.zone_id, @@ -837,12 +840,13 @@ def lambda_handler( 'TXT', heritage_value ) - append_msg=f"TXT record in zone id: {zone_data_reverse.zone_id} owner {zone_data_reverse.owner_account} for hostname {tag_data['ptr_entry'].hostname} " + \ + append_msg = f"TXT 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 {heritage_value}" count[create_response] += 1 if create_response == 'success': - dns_data.append(dns_data_tuple(zone_data_reverse.zone_id, tag_data['ptr_entry'].hostname, tag_data['ptr_entry'].zonename, 'TXT', heritage_value) + dns_data.append(dns_data_tuple( + zone_data_reverse.zone_id, tag_data['ptr_entry'].hostname, tag_data['ptr_entry'].zonename, 'TXT', heritage_value)) LOGGER.info("instance: %s, Created %s", instance_id, append_msg + lineno()) caller_response.append('Created ' + append_msg) @@ -865,7 +869,7 @@ def lambda_handler( 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( + process_response = process_delete_records( route53, instance_id, zone_data_forward.zone_id, @@ -877,14 +881,14 @@ def lambda_handler( ) # only true if existing delete_records and the delete_success from the subroutine is true - delete_records=delete_records and process_response['delete_success'] + delete_records = delete_records and process_response['delete_success'] # append to the lsit - caller_response=caller_response + process_response['msg'] + 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( + process_response = process_delete_records( route53, instance_id, zone_data_reverse.zone_id, @@ -895,20 +899,20 @@ def lambda_handler( 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'] + delete_records = delete_records and process_response['delete_success'] # append to the lsit - caller_response=caller_response + process_response['msg'] + 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 + 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'] + 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)) # create CNAME record in private zone @@ -921,7 +925,7 @@ def lambda_handler( LOGGER.debug("cname_domain_suffix_id:" " %s", str(cname_domain_suffix_id) + lineno()) - create_response=create_resource_record( + create_response = create_resource_record( route53, instance_id, cname_domain_suffix_id, @@ -930,11 +934,12 @@ def lambda_handler( 'CNAME', 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']} " + \ + 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}" 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) + 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()) caller_response.append('Created ' + append_msg) @@ -951,8 +956,8 @@ def lambda_handler( 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 - create_response=create_resource_record( + cname_host_name_txt = TXT_RR_PREFIX + '.' + cname_host_name + create_response = create_resource_record( route53, instance_id, cname_domain_suffix_id, @@ -961,7 +966,7 @@ def lambda_handler( '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']} " + \ + 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}" if create_response == 'success': diff --git a/code/ddns-lambda.zip b/code/ddns-lambda.zip index 664fd9b565abd0cb6c55c07f773f44442f4ba6d5..7c329abf343403ca5af078361fb0f8806c64c585 100644 GIT binary patch delta 14198 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�+8>ZPZ&r+N+sv_@HN`972%8!D$CTo@7T$LCw?{OX&7^Tji zUsyk1$cqzId6*C4Fpqs?%^GQOt?>kSVUrXS{3Wm4=hM?+r2&e~GZ{b~&I;gsR_^AO8E>BDXJz#mf)VW-0QP3$x4;YLjFzWx|DSQA;Y2&3o{;}pdp z7=fy3rcYQDIL;8!Dcn$bvQQm+Lwn*6babF}umUeLZZL@tJ)yBLqcw^Wnu&Z{gsRWb zoWNEhO97X@J&FjDDTk`d)2t{kf6attDv$1&U3Lb2L8v0}Nd7O5V{0VJGso@)d1hsQ z{s&w6K2%jf zIpLzG-$0oCC`oXPD5FCG8-^QbQlu^D0q6Q80{yy#{nG-+IAtVCsF5OgzkKUY3k)8B zO4Boivq1|$_*Rnf4(**Dqg#d5-2lzS*$LH}n2`8mP6}~+>el#p9vtcq!NuJW-Ksv_ zb)8;`OtF%~0go`nH*P{%f8_GIm^5;ns{M;@=p+Jv#N-OECnO%3*md{d)Ax9N6n8JG z1H)@mJS{LYfY=bu;IoEP4@F2nmR;f0g#e$%{EM%;IBBa+U-7?f%Bk6YE=TNQWD=-} zTZJN<;u}4Yx0}9@=ts^rAGcPwS1bf(UD(DfH|cy>Xg=JMcc#&Fe}Q9{eUu{V5=icz z)bE^Fu6wKTS@%b{amkuNT9~HQj>z<6x40;LoiejYSc&Euj9h#Dgam&qy22DiT8&1% zSO4F^algz!M-ki)5=|E<&LH0(#q%Xj8Cs=`B#1CHBWX+_siqpClQ$nigkEI@!XKk$ zo`6?DEgXr7IfFv+IG%o+jg0 zDDoEr1mLjyS~w&iW0gp-G9v|LyobV#F&c?Bl~pks)ivH1DVk>yNkTzV_&v|y-jUTD zln`iHsc0u}K2T#BkRkZvgRtBLA~Qe6pvws;eZTk0WNXo| zUuey`#~D!7(Ad(oqQ5at*$mxsJnuZ}H=*b{pKcUie>*76W?69)6*2rRFH?uV^?r}Y zIs;n}li7dbRQBXkHOFs_WaIplaV}m1GhAX+%DM>Pm~%|nbs}*UXVq!Ma4J+6eUwh6W~dkrj~01rTsci>N6bDECL0M0`9(Af#1hIzi4L=$n&9A142# zk|6PlM||z&ugMI4LK4ZpiC2)~BnV8F;YB+Ce*gdg|Nl@+2MBCen&+KU0089Z0RT`- m0Rj{Q6aWYS2mk;8A&P8Qn&+KU0089ZlMPfd2H8^p0002+oqx>$