From d134b263ff8ae73b102056815896e655a83765c0 Mon Sep 17 00:00:00 2001 From: badra001 Date: Fri, 28 Apr 2023 08:45:07 -0400 Subject: [PATCH] fix --- code/ddns-lambda.py | 83 +++++++++++++++++++++++++++++++------------ code/ddns-lambda.zip | Bin 25235 -> 25724 bytes 2 files changed, 60 insertions(+), 23 deletions(-) diff --git a/code/ddns-lambda.py b/code/ddns-lambda.py index af0cdfa..38f1a34 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.0b88' +VERSION = '1.2.0b89' # Read Env variables DEBUG_LOG_LEVEL = os.environ.get('DebugLogLevel', 'INFO') @@ -632,12 +632,14 @@ def lambda_handler( # associated with the VPC. If so, it will set the zone name to be used later. has_dhcp_dns_zone_associated_vpc = False + dhcp_zone_id = None if dhcp_zone is not None: LOGGER.debug("configuration dhcp_zone: %s", str(dhcp_zone) + lineno()) if dhcp_zone in phz_collection_by_vpc: private_hosted_zone_name = dhcp_zone private_hosted_zone_item = phz_collection_by_vpc[private_hosted_zone_name] + dhcp_zone_id = private_hosted_zone_item['zone_id'] has_dhcp_dns_zone_associated_vpc = True LOGGER.debug("by_vpc.private_hosted_zone_name dhcp_zone: %s found, item: %s", str(private_hosted_zone_name) + lineno(), private_hosted_zone_item) @@ -653,19 +655,31 @@ def lambda_handler( LOGGER.debug("New flags structure: %s", str(pformat(flags)) + lineno()) LOGGER.info("Options flags: " + ' '.join([f"{x}={flags[x]}" for x in flags])) + hostname_tuple = namedtuple( + 'Hostname', ['zone_exists', 'valid', 'hostname', 'zonename', 'zone_id', 'name']) tag_data = {} - tag_data_fields = ['defined', 'valid', 'hostname', 'zonename'] - tag_data_tuple = namedtuple('TagData', tag_data_fields) - tag_data['option_cname'] = tag_data_tuple(*process_tags_option_cname(tags)) - tag_data['option_zone'] = tag_data_tuple(*process_tags_option_zone(tags)) - tag_data['option_name'] = tag_data_tuple(*process_tags_option_name(tags)) - tag_data['option_ptrname'] = tag_data_tuple(*process_tags_option_ptrname(tags)) - tag_data['dhcp_options'] = tag_data_tuple(True, - has_dhcp_dns_zone_associated_vpc, None, private_hosted_zone_name) - tag_data['ptr_entry'] = tag_data_tuple( - True, True, reversed_entry, reversed_lookup_zone) - tag_data['name'] = tag_data_tuple(*process_tags_name(tags)) - LOGGER.debug("New tag_data structure: %s", str(pformat(tag_data)) + lineno()) +# tag_data_fields = ['defined', 'valid', 'hostname', 'zonename'] +# tag_data_tuple = namedtuple('TagData', tag_data_fields) +# tag_data['option_cname'] = tag_data_tuple(*process_tags_option_cname(tags)) +# tag_data['option_zone'] = tag_data_tuple(*process_tags_option_zone(tags)) +# tag_data['option_name'] = tag_data_tuple(*process_tags_option_name(tags)) +# tag_data['option_ptrname'] = tag_data_tuple(*process_tags_option_ptrname(tags)) +# tag_data['dhcp_options'] = tag_data_tuple(True, +# has_dhcp_dns_zone_associated_vpc, None, private_hosted_zone_name) +# tag_data['ptr_entry'] = tag_data_tuple( +# True, True, reversed_entry, reversed_lookup_zone) +# tag_data['name'] = tag_data_tuple(*process_tags_name(tags)) + + tag_data['option_cname'] = process_tags_option_cname(tags) + tag_data['option_zone'] = process_tags_option_zone(tags) + tag_data['option_name'] = process_tags_option_name(tags) + tag_data['option_ptrname'] = process_tags_option_ptrname(tags) +# tag_data['dhcp_options'] = hostname_tuple(has_dhcp_dns_zone_associated_vpc, False, None, private_hosted_zone_name, dhcp_zone_id, private_hosted_zone_name ) + tag_data['dhcp_options'] = process_tags_value(dhcp_zone) + tag_data['ptr_entry'] = process_tags_value(reversed_entry) + tag_data['name'] = process_tags_name(tags) + + LOGGER.info("New tag_data structure: %s", str(pformat(tag_data)) + lineno()) emr_status = discover_emr_cluster(tags_dict) LOGGER.info(f"discover_emr instance: {instance_id} result {emr_status}") @@ -3132,12 +3146,13 @@ def process_tags_value(name): :return tuple(bool,str,str): true|false if vaid, hostname, domainname """ - if name != '': - return (True,) + parse_hostname_to_components(name) + return parse_hostname_to_components(name) +# if name != '': +# return (True,) + parse_hostname_to_components(name) # components = parse_hostname_to_components(name) # if components: # return (True, components[0], components[1]) - return (name != '', False, name, None) +# return (name != '', False, name, None) def process_tags_option_cname(tags): @@ -3260,24 +3275,46 @@ def parse_hostname_to_components(name): the Name, boc:dns:cname or boc:dns:name tags contain myhost.db.common.edl.census.gov, and the zone is common.edl.census.gov, simply checking at the first dot (host==myhost, domain==db.common.edl.census.gov) will fail. This will go through the list of PHZs found for the VPC for each of the possible domains, and return the name components if a match is found. - That returned name/zone shoudl be used for all settings. If the zone is not found it will parse into first part before dot, remainder. + That returned name/zone should be used for all settings. If the zone is not found it will parse into first part before dot, remainder. + + This returns: + - zone_exists: if the PHZ is found associated to this VPC + - valid: the name conists of a hostname + domainname, where the domainname is > 1 item (alias.db is not valid, alias.db.zone is valid, though not really) + - hostname: hostname part of name. If not valid, it is the whole name passed in + - zonename: the domain part of the name. If not valid, it will be None + - zone_id: if zone exists, the zone id + - name: the original name from the arguments :param str name: FQDN to parse and find existing defined PHZ - :return (bool,str,str): Tuple containing found-PHZ (True|False), hostname components (may include dot) and domain name for which a PHZ exists. None is returned if not found. + :return namedtuple: Tuple, see above """ global phz_collection_by_vpc + + hostname_tuple = namedtuple( + 'Hostname', ['zone_exists', 'valid', 'hostname', 'zonename', 'zone_id', 'name']) + + if name == '' or name == None: + return hostname_tuple(False, False, None, None, None, None) names = name.rstrip('.').split('.') for i in range(len(names)): host = '.'.join(names[0:i]) domain = '.'.join(names[i:]) + '.' - if phz_collection_by_vpc.get(domain): - return (True, host, domain) - host = names[0] - domain = '.'.join(names[1:]) + '.' + item = phz_collection_by_vpc.get(domain) + if item: + return hostname_tuple(True, True, host, domain, item['zone_id'], name) LOGGER.info( f"No PHZ found for any domain components of {name} associated with this vpc, returing host {host} domain {domain}: {lineno()}") - return (False, host, domain) + if len(names) > 2: + host = names[0] + domain = '.'.join(names[1:]) + '.' + LOGGER.debug( + f"zone does not exist but name {name} appears to be a legal domain (>2 components) setting hostname {host} and zone {domain}: {lineno()}") + return hostname_tuple(False, True, host, domain, None, name) + else: + host = '.'.join(names) + '.' + domain = '' + return hostname_tuple(False, False, host, domain, None, name) def create_fqdn(host, zone): diff --git a/code/ddns-lambda.zip b/code/ddns-lambda.zip index bb95afc8cb17d2f6dda8018fd279724bbe59439c..5de9dafbdb409ccb4a2a43c338a95a2f18a2dd47 100644 GIT binary patch literal 25724 zcmV)@K!LwdO9KQH00;mG0000XiU0rr000000000001f~E0Ayrtb1iIPZDM3$E^vA5 zy?b}#HnKSQzdl7>dGn(*k=2hpX0G;X?s05)w{JRbukCa)@%ZS_A|x@UNDcwn?e_I| z+0U|{Y!3<#0w73Hesmtw%sFX`1PX;hp{h_Q6uRARXK(ND1m1?riztMn8@9;Oui#`_ z#5sdrL9Sv-qJF1yx*$Ns+v_+$rS;%AP}dstXPID&Qh2a*%Dvw@4kdMr7TRR z1hS(1uy>P&%WUsEI1Min0wiU{&9HOuN`jI#VhY77P2+SvfLJypug)Bv2?~itYEkXv1 zkm8FdTZVB8X}BcNJI+>&z&BsP(VJiTqFhWNq%@nxAtO=Q%lAjS!_Lbg@R3_&lwp06 za&ksSTb-{&5xUCrtYE$pUk~A!cZCvon`M`)96n}g1(#V?U=50dYQ(B@AjgU=ND46{ zYRHOgH5cVh!#Ra8jo>1rB!X2g@i`6WFwK@1af-AXbf#HKS+SZj{Jit*==2y0GR=wz zSOynF@H(dxI^fJz|enBXMY=(bNvowl%LqpCf2Q%1RQI;*s;p4sE zIown4f8oP`ltLCldW8jnt1yY9&bF>MQWf6F7oBY!LhIWv@&)IanxE z_R`D}P5n;i9T!BL+99R!JYA9$rSvk4h=3#}h^fE{S8;`@QY`_?C!Uh39W7P;ng_RKC+Q>i~1!B=J(?qelKJ0LNDqf

h_cfxNyyYH^NuS)679uPHh_rC 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