@@ -60,13 +60,13 @@ def get_current_image_id():
60
60
return param_value ['image_id' ]
61
61
62
62
63
- def get_launch_template_name ():
63
+ def get_launch_template_name_and_auto_scaling_group ():
64
64
"""Returns Launch Template name for Auto Scaling Group"""
65
65
group_description_resp = autoscaling .describe_auto_scaling_groups (AutoScalingGroupNames = (AUTO_SCALING_GROUP_NAME ,))
66
66
launch_template_details = group_description_resp ['AutoScalingGroups' ][0 ]['MixedInstancesPolicy' ]['LaunchTemplate' ]
67
67
launch_template_name = launch_template_details ['LaunchTemplateSpecification' ]['LaunchTemplateName' ]
68
68
logger .info ('Using Launch Template "%s"' , launch_template_name )
69
- return launch_template_name
69
+ return ( launch_template_name , group_description_resp [ 'AutoScalingGroups' ][ 0 ])
70
70
71
71
72
72
def is_launch_template_updated (image_id , launch_template_name ):
@@ -128,16 +128,7 @@ def check_instance_refreshes(instance_refreshes):
128
128
logger .info ('Set the new Launch Template version as default\n \n %s' , modify_resp )
129
129
130
130
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 ():
141
132
try :
142
133
refresh_resp = autoscaling .start_instance_refresh (
143
134
AutoScalingGroupName = AUTO_SCALING_GROUP_NAME ,
@@ -152,6 +143,29 @@ def main():
152
143
return None
153
144
else :
154
145
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 ()
155
169
156
170
157
171
def handler (event , context ):
0 commit comments