From 81c86d383368cbf84ead4e98d4439a7045d4ed76 Mon Sep 17 00:00:00 2001 From: Tim Birkett Date: Wed, 17 Mar 2021 15:41:56 +0000 Subject: [PATCH 1/3] fix(cli): Really fix DRY_RUN for RUN_MODE 4 --- eksrollup/cli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eksrollup/cli.py b/eksrollup/cli.py index f49c96c..0a599b5 100755 --- a/eksrollup/cli.py +++ b/eksrollup/cli.py @@ -268,7 +268,7 @@ def main(args=None): filtered_asgs = get_asgs(args.cluster_name) run_mode = app_config['RUN_MODE'] # perform a dry run on mode 4 for older nodes - if args.plan or app_config['DRY_RUN'] and (run_mode == 4): + if (args.plan or app_config['DRY_RUN']) and (run_mode == 4): plan_asgs_older_nodes(filtered_asgs) # perform a dry run on main mode elif args.plan or app_config['DRY_RUN']: From 351710a9173fa3fe547990307b3579568f8731f4 Mon Sep 17 00:00:00 2001 From: Tim Birkett Date: Wed, 17 Mar 2021 15:43:17 +0000 Subject: [PATCH 2/3] fix(aws): fix missing launchtemplate on instance --- eksrollup/lib/aws.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/eksrollup/lib/aws.py b/eksrollup/lib/aws.py index e4bb021..89b537b 100644 --- a/eksrollup/lib/aws.py +++ b/eksrollup/lib/aws.py @@ -247,8 +247,12 @@ def instance_outdated_launchtemplate(instance_obj, asg_lt_name, asg_lt_version): describe_launch_templates boto3 method (wrapped in get_launch_template). """ instance_id = instance_obj['InstanceId'] - lt_name = instance_obj['LaunchTemplate']['LaunchTemplateName'] - lt_version = int(instance_obj['LaunchTemplate']['Version']) + try: + lt_name = instance_obj['LaunchTemplate']['LaunchTemplateName'] + lt_version = int(instance_obj['LaunchTemplate']['Version']) + except KeyError: + logger.info("Instance id {} does not match asg launch template of '{}'".format(instance_id, asg_lt_name)) + return True if lt_name != asg_lt_name: logger.info("Instance id {} launch template of '{}' does not match asg launch template of '{}'".format(instance_id, lt_name, asg_lt_name)) From ee8b548f3161ef7303b3ef94a92257d87e7adf9c Mon Sep 17 00:00:00 2001 From: Tim Birkett Date: Wed, 17 Mar 2021 17:39:05 +0000 Subject: [PATCH 3/3] tests: add a test to detect regressions in the future --- eksrollup/lib/aws.py | 2 +- tests/test_aws_launchtemplate.py | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/eksrollup/lib/aws.py b/eksrollup/lib/aws.py index 89b537b..4880c8c 100644 --- a/eksrollup/lib/aws.py +++ b/eksrollup/lib/aws.py @@ -251,7 +251,7 @@ def instance_outdated_launchtemplate(instance_obj, asg_lt_name, asg_lt_version): lt_name = instance_obj['LaunchTemplate']['LaunchTemplateName'] lt_version = int(instance_obj['LaunchTemplate']['Version']) except KeyError: - logger.info("Instance id {} does not match asg launch template of '{}'".format(instance_id, asg_lt_name)) + logger.info("Instance id {} missing launch template does not match asg launch template of '{}'".format(instance_id, asg_lt_name)) return True if lt_name != asg_lt_name: diff --git a/tests/test_aws_launchtemplate.py b/tests/test_aws_launchtemplate.py index 732fcab..22367dc 100644 --- a/tests/test_aws_launchtemplate.py +++ b/tests/test_aws_launchtemplate.py @@ -20,6 +20,9 @@ def setUp(self): self.aws_response_mock_latest = json.load(file) with open(f"{current_dir}/fixtures/get_launch_template.json", "r") as file: self.mock_get_launch_template = json.load(file) + with open(f"{current_dir}/fixtures/aws_response.json", "r") as file: + self.aws_response_mock_no_launch_template = json.load(file) + def test_is_instance_outdated(self): response = self.aws_response_mock @@ -77,3 +80,13 @@ def test_is_instance_outdated_fail_version_latest(self): with patch('eksrollup.lib.aws.get_launch_template') as get_launch_template_mock: get_launch_template_mock.return_value = self.mock_get_launch_template self.assertTrue(instance_outdated_launchtemplate(instances[2], 'mock-lt-01', '$Latest')) + + def test_is_instance_outdated_fail_no_launch_template(self): + response = self.aws_response_mock_no_launch_template + asgs = response['AutoScalingGroups'] + for asg in asgs: + instances = asg['Instances'] + with patch('eksrollup.lib.aws.get_launch_template') as get_launch_template_mock: + get_launch_template_mock.return_value = self.mock_get_launch_template + self.assertTrue(instance_outdated_launchtemplate(instances[0], 'mock-lt-01', '$Latest')) +