From 3f21df5a8b4ad3378f035859cf8f9d2afc08aa32 Mon Sep 17 00:00:00 2001 From: badra001 Date: Tue, 22 Feb 2022 14:24:54 -0500 Subject: [PATCH] fix typo --- code/ddns-lambda.py | 281 +++++++++++++++++++++---------------------- code/ddns-lambda.zip | Bin 11680 -> 11678 bytes 2 files changed, 140 insertions(+), 141 deletions(-) diff --git a/code/ddns-lambda.py b/code/ddns-lambda.py index 76c7559..df64417 100755 --- a/code/ddns-lambda.py +++ b/code/ddns-lambda.py @@ -72,7 +72,7 @@ LOGGER = logging.getLogger() ACCOUNT = None REGION = None -VERSION = '0.1.0' +VERSION = '0.1.1' # Adjust the logging level [logging.INFO, logging.DEBUG, logging.WARNING, etc] LOGGER.setLevel(logging.DEBUG) @@ -141,7 +141,7 @@ def get_caller_account_id(): :return str: AWS Account ID """ try: - return boto3.client('sts').get_caller_identity()['Account']) + return boto3.client('sts').get_caller_identity()['Account'] except ClientError as err: print("Unexpected error: %s" % err) @@ -149,9 +149,9 @@ def get_caller_account_id(): def lambda_handler( event, context, - dynamodb_client = get_dynamodb_client(), - compute = get_ec2_client(), - route53 = get_route53_client() + dynamodb_client=get_dynamodb_client(), + compute=get_ec2_client(), + route53=get_route53_client() ): @@ -171,9 +171,9 @@ def lambda_handler( LOGGER.info("event: %s", str(event) + lineno()) LOGGER.info("context: %s", str(context) + lineno()) - caller_response=[] + caller_response = [] # Checking to make sure there is a dynamodb table named in the Env Variable - tables=list_tables(dynamodb_client) + tables = list_tables(dynamodb_client) LOGGER.info("tables: %s", str(tables)) if DDBNAME in tables['TableNames']: @@ -184,15 +184,15 @@ def lambda_handler( # Set variables # Get the state from the Event stream - state=event['detail']['state'] + state = event['detail']['state'] LOGGER.debug("instance state: %s", str(state) + lineno()) # Get the instance id, region, and tag collection - instance_id=event['detail']['instance-id'] + instance_id = event['detail']['instance-id'] LOGGER.debug("instance id: %s", str(instance_id) + lineno()) - region=event['region'] + region = event['region'] LOGGER.debug("region: %s", str(region) + lineno()) - account_id=get_caller_account_id() + account_id = get_caller_account_id() LOGGER.debug("account_id: %s", str(account_id) + lineno()) # Only doing something if the state is running @@ -200,7 +200,7 @@ def lambda_handler( LOGGER.debug("sleeping for maximum {} seconds {}".format(SLEEPTIME, lineno())) # wait increment and wait until maximum sleeptime - i=1 + i = 1 while i < SLEEPTIME: LOGGER.debug("waiting count: %s", str(i) + lineno()) time.sleep(1) @@ -208,12 +208,12 @@ def lambda_handler( try: # Get instance information - instance=get_instances(compute, instance_id) + instance = get_instances(compute, instance_id) - t_private_ip=instance['Reservations'][0]['Instances'][0]['PrivateIpAddress'] - t_private_dns_name=instance['Reservations'][0]['Instances'][0]['PrivateDnsName'] - t_subnet_id=instance['Reservations'][0]['Instances'][0]['SubnetId'] - t_vpc_id=instance['Reservations'][0]['Instances'][0]['VpcId'] + t_private_ip = instance['Reservations'][0]['Instances'][0]['PrivateIpAddress'] + t_private_dns_name = instance['Reservations'][0]['Instances'][0]['PrivateDnsName'] + t_subnet_id = instance['Reservations'][0]['Instances'][0]['SubnetId'] + t_vpc_id = instance['Reservations'][0]['Instances'][0]['VpcId'] # if key attributes are found, then break out of the loop if all([t_private_ip, t_private_dns_name, t_subnet_id, t_vpc_id]): @@ -229,9 +229,9 @@ def lambda_handler( # Remove null values from the response. You cannot save a dict/JSON # document in DynamoDB if it contains null values LOGGER.debug("instance: %s", str(instance) + lineno()) - instance=remove_empty_from_dict(instance) - instance_dump=json.dumps(instance, default = json_serial) - instance_attributes=json.loads(instance_dump) + instance = remove_empty_from_dict(instance) + instance_dump = json.dumps(instance, default=json_serial) + instance_attributes = json.loads(instance_dump) LOGGER.debug("instance_attributes: %s", str(instance_attributes) + lineno()) LOGGER.debug("trying to put instance information in " "dynamo table %s", str(instance_attributes) + lineno()) @@ -605,13 +605,13 @@ def lambda_handler( " %s", str(valid_dns_zones) + lineno()) # create the TXT heritage record - heritage = initialize_heritage(HERITAGE_TAG,VERSION, - { - 'instance_id': instance_id, - 'account_id': account_id, - 'region': region - } ) - add_heritage_item_timestamp(heritage,'create_time') + heritage = initialize_heritage(HERITAGE_TAG, VERSION, + { + 'instance_id': instance_id, + 'account_id': account_id, + 'region': region + }) + add_heritage_item_timestamp(heritage, 'create_time') heritage_value = format_heritage(heritage) # txt=format_heritage(h) @@ -637,24 +637,24 @@ def lambda_handler( ' with value: ' + str(private_ip)) - if len(heritage)>0: - LOGGER.debug("Creating heritage TXT resource records %s", lineno()) - create_resource_record( - route53, - final_hosted_zone_id, - final_private_hostname, - final_hosted_zone_name, - 'TXT', - heritage_value - ) - - caller_response.append('Created TXT record in zone id: ' + - str(final_hosted_zone_id) + - ' for hosted zone ' + - str(final_private_hostname) + '.' + - str(final_hosted_zone_name) + - ' with value: ' + - str(heritage_value)) + if len(heritage) > 0: + LOGGER.debug("Creating heritage TXT resource records %s", lineno()) + create_resource_record( + route53, + final_hosted_zone_id, + final_private_hostname, + final_hosted_zone_name, + 'TXT', + heritage_value + ) + + caller_response.append('Created TXT record in zone id: ' + + str(final_hosted_zone_id) + + ' for hosted zone ' + + str(final_private_hostname) + '.' + + str(final_hosted_zone_name) + + ' with value: ' + + str(heritage_value)) if reverse_zone_associated: create_resource_record( @@ -673,24 +673,23 @@ def lambda_handler( 'in-addr.arpa with value: ' + str(final_private_dns_name)) - if len(heritage)>0: - create_resource_record( - route53, - reverse_lookup_zone_id, - reversed_ip_address, - 'in-addr.arpa', - 'TXT', - heritage_value - ) - - caller_response.append('Created TXT reverse record in zone id: ' + - str(reverse_lookup_zone_id) + - ' for hosted zone ' + - str(reversed_ip_address) + - 'in-addr.arpa with value: ' + - str(heritage_value)) - - + if len(heritage) > 0: + create_resource_record( + route53, + reverse_lookup_zone_id, + reversed_ip_address, + 'in-addr.arpa', + 'TXT', + heritage_value + ) + + caller_response.append('Created TXT reverse record in zone id: ' + + str(reverse_lookup_zone_id) + + ' for hosted zone ' + + str(reversed_ip_address) + + 'in-addr.arpa with value: ' + + str(heritage_value)) + except BaseException as err: LOGGER.info("unexpected error. %s\n", str(err) + lineno()) @@ -716,26 +715,26 @@ def lambda_handler( ' with value: ' + str(private_ip)) - if len(heritage)>0: - # pause 1 before deleting to avoid API limit - time.sleep(1) - delete_resource_record( - route53, - final_hosted_zone_id, - final_private_hostname, - final_hosted_zone_name, - 'TXT', - heritage_value - ) - - caller_response.append('Deleted TXT record in zone id: ' + - str(final_hosted_zone_id) + - ' for hosted zone ' + - str(final_private_hostname) + '.' + - str(final_hosted_zone_name) + - ' with value: ' + - str(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, + final_private_hostname, + final_hosted_zone_name, + 'TXT', + heritage_value + ) + + caller_response.append('Deleted TXT record in zone id: ' + + str(final_hosted_zone_id) + + ' for hosted zone ' + + str(final_private_hostname) + '.' + + str(final_hosted_zone_name) + + ' with value: ' + + str(heritage_value)) + # pause 1 before deleting to avoid API limit time.sleep(1) delete_resource_record( @@ -755,26 +754,26 @@ def lambda_handler( ' with value: ' + str(final_private_dns_name)) - if len(heritage)>0: - # pause 1 before deleting to avoid API limit - time.sleep(1) - delete_resource_record( - route53, - reverse_lookup_zone_id, - reversed_ip_address, - 'in-addr.arpa', - 'TXT', - heritage_value - ) - - caller_response.append('Deleted PTR record in zone id: ' + - str(reverse_lookup_zone_id) + - ' for hosted zone ' + - str(reversed_ip_address) + - str(private_dns_name) + - ' with value: ' + - str(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, + reversed_ip_address, + 'in-addr.arpa', + 'TXT', + heritage_value + ) + + caller_response.append('Deleted PTR record in zone id: ' + + str(reverse_lookup_zone_id) + + ' for hosted zone ' + + str(reversed_ip_address) + + str(private_dns_name) + + ' with value: ' + + str(heritage_value)) + except BaseException as err: LOGGER.debug("%s", str(err) + lineno()) @@ -814,25 +813,25 @@ def lambda_handler( ' with value: ' + str(final_private_dns_name)) - if len(heritage)>0: - create_resource_record( - route53, - cname_domain_suffix_id, - TXT_RR_PREFIX + '.' + cname_host_name, - cname_domain_suffix, - 'TXT', - heritage_value - ) - - caller_response.append('Created TXT for CNAME record in zone id: ' + - str(cname_domain_suffix_id) + - ' for hosted zone ' + - str(TXT_RR_PREFIX) + '.' + - str(cname_host_name) + '.' + - str(cname_domain_suffix) + - ' with value: ' + - str(heritage_value)) - + if len(heritage) > 0: + create_resource_record( + route53, + cname_domain_suffix_id, + TXT_RR_PREFIX + '.' + cname_host_name, + cname_domain_suffix, + 'TXT', + heritage_value + ) + + caller_response.append('Created TXT for CNAME record in zone id: ' + + str(cname_domain_suffix_id) + + ' for hosted zone ' + + str(TXT_RR_PREFIX) + '.' + + str(cname_host_name) + '.' + + str(cname_domain_suffix) + + ' with value: ' + + str(heritage_value)) + except BaseException as err: LOGGER.debug("%s", str(err) + lineno()) else: @@ -858,25 +857,25 @@ def lambda_handler( ' with value: ' + str(final_private_dns_name)) - if len(heritage)>0: - delete_resource_record( - route53, - cname_domain_suffix_id, - TXT_RR_PREFIX + '.' + cname_host_name, - cname_domain_suffix, - 'TXT', - heritage_value - ) - - caller_response.append('Deleted TXT for CNAME record in zone id: ' + - str(cname_domain_suffix_id) + - ' for hosted zone ' + - str(TXT_RR_PREFIX) + '.' + - str(cname_host_name) + '.' + - str(cname_domain_suffix) + - ' with value: ' + - str(heritage_value)) - + if len(heritage) > 0: + delete_resource_record( + route53, + cname_domain_suffix_id, + TXT_RR_PREFIX + '.' + cname_host_name, + cname_domain_suffix, + 'TXT', + heritage_value + ) + + caller_response.append('Deleted TXT for CNAME record in zone id: ' + + str(cname_domain_suffix_id) + + ' for hosted zone ' + + str(TXT_RR_PREFIX) + '.' + + str(cname_host_name) + '.' + + str(cname_domain_suffix) + + ' with value: ' + + str(heritage_value)) + except BaseException as err: LOGGER.debug("%s", str(err) + lineno()) diff --git a/code/ddns-lambda.zip b/code/ddns-lambda.zip index 157de091162e7ab17881d972a5320971d3c92c37..8ef42fc38efcdee974feb48a4a95741f5fd13f84 100644 GIT binary patch delta 11476 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 delta 11494 zcmV@6aWAK2mpm@R#Yl#g>vpJ004*e000gE8~|iwZgVYcVQpe$ zVJ>iaRa6N816nB+Vp=H`Vs&^6009IO1ONa8fCT^m?R{%^<2I7$cmE2Ed~+ymWc6z@ zd#}%G<~X)H?VTRmYdgto93LH8q-@3#$t5Xwd;0W$->SlYgLsjmWVa`i8=a&rkwBrU zP^bq`0D8UN*1^H?IeQ;2uA`8hK2*0^`i7lPizKgDzliUXGL8mYTNk%6EBVt8$$ZX= zxGIwPK4ulXNYYtWEW#?uQZ_5H1wB06e+@6nDom#_%ZmEN!9yA@vV(8gMR+}rS)5kI z!)WX1tpFu|Y9u8qmT8)#H$#?)MyEv_RsEQZxwz@T|M`0C?w*HNs7Rf!-Im-8< zsEEt5esqwQ$KfJ|2j|P{G_H;!`1(UWg}+-rCJ4+XjpJ||Pw!X>q!;0w(t{{lgh|SPl$iC;vLz7r z%^P<5?xz7S2TTadGMgrVZ&XtWa7J6Np+V@m+pMgpew-pZBdx8iH@rx>%=4_Md?o%k zVrNK78MF6UcDKygKeE)p1z12eN@7$iR$E7+ui!}v9T&?kE3)McFLx2%0Dv@N*CEIj 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 MEg=RrEdT%j0B;mmxBvhE