Skip to content

Commit 1206b92

Browse files
authored
Merge pull request #2 from radimsuckr/feature/check-running-instances-ami
Check for newer versions of Launch Template
2 parents 0ec61f9 + 526481a commit 1206b92

File tree

1 file changed

+26
-12
lines changed

1 file changed

+26
-12
lines changed

functions/lambda.py

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,13 @@ def get_current_image_id():
6060
return param_value['image_id']
6161

6262

63-
def get_launch_template_name():
63+
def get_launch_template_name_and_auto_scaling_group():
6464
"""Returns Launch Template name for Auto Scaling Group"""
6565
group_description_resp = autoscaling.describe_auto_scaling_groups(AutoScalingGroupNames=(AUTO_SCALING_GROUP_NAME,))
6666
launch_template_details = group_description_resp['AutoScalingGroups'][0]['MixedInstancesPolicy']['LaunchTemplate']
6767
launch_template_name = launch_template_details['LaunchTemplateSpecification']['LaunchTemplateName']
6868
logger.info('Using Launch Template "%s"', launch_template_name)
69-
return launch_template_name
69+
return (launch_template_name, group_description_resp['AutoScalingGroups'][0])
7070

7171

7272
def is_launch_template_updated(image_id, launch_template_name):
@@ -128,16 +128,7 @@ def check_instance_refreshes(instance_refreshes):
128128
logger.info('Set the new Launch Template version as default\n\n%s', modify_resp)
129129

130130

131-
def main():
132-
image_id = get_current_image_id()
133-
launch_template_name = get_launch_template_name()
134-
if launch_template_state := is_launch_template_updated(image_id, launch_template_name):
135-
logger.info('Launch Template for Auto Scaling Group "%s" is already up to date', AUTO_SCALING_GROUP_NAME)
136-
return launch_template_state
137-
138-
logger.info('Launch Template for Auto Scaling Group "%s" is not up to date', AUTO_SCALING_GROUP_NAME)
139-
update_launch_template(image_id, launch_template_name)
140-
131+
def start_instance_refresh():
141132
try:
142133
refresh_resp = autoscaling.start_instance_refresh(
143134
AutoScalingGroupName=AUTO_SCALING_GROUP_NAME,
@@ -152,6 +143,29 @@ def main():
152143
return None
153144
else:
154145
logger.info('Started instance refresh\n\n%s', refresh_resp)
146+
return True
147+
148+
149+
def main():
150+
image_id = get_current_image_id()
151+
launch_template_name, autoscaling_group = get_launch_template_name_and_auto_scaling_group()
152+
153+
if launch_template_state := is_launch_template_updated(image_id, launch_template_name):
154+
logger.info('Launch Template for Auto Scaling Group "%s" is already up to date', AUTO_SCALING_GROUP_NAME)
155+
156+
default_lt_version = str(ec2.describe_launch_template_versions(
157+
LaunchTemplateName=launch_template_name, Versions=('$Default',),
158+
)['LaunchTemplateVersions'][0]['VersionNumber'])
159+
160+
for instance in autoscaling_group['Instances']:
161+
if instance['LaunchTemplate']['Version'] != default_lt_version:
162+
return start_instance_refresh()
163+
164+
return launch_template_state
165+
166+
logger.info('Launch Template for Auto Scaling Group "%s" is not up to date', AUTO_SCALING_GROUP_NAME)
167+
update_launch_template(image_id, launch_template_name)
168+
return start_instance_refresh()
155169

156170

157171
def handler(event, context):

0 commit comments

Comments
 (0)