@@ -42,6 +42,19 @@ def get_ci_ec2_instances_by_state(ec2_client, ci_machines_prefix, requested_stat
4242 return count , state_instances
4343
4444
45+ def get_vname_timeout_secs (instance ):
46+ vm_name = ""
47+ timeout_secs = None
48+ for tag_dict in instance ["Tags" ]:
49+ key = tag_dict ["Key" ]
50+ key_v = tag_dict ["Value" ]
51+ if key == "Name" :
52+ vm_name = key_v
53+ if key == "timeout_secs" :
54+ timeout_secs = int (key_v )
55+ return vm_name , timeout_secs
56+
57+
4558def watchdog_dangling_ec2_instances (
4659 ec2_client , terminate_after_secs , ci_machines_prefix , dry_run
4760):
@@ -55,42 +68,64 @@ def watchdog_dangling_ec2_instances(
5568 instance_id = instance ["InstanceId" ]
5669 state = instance ["State" ]["Name" ]
5770 if state != "terminated" :
58- for tag_dict in instance ["Tags" ]:
59- key = tag_dict ["Key" ]
60- key_v = tag_dict ["Value" ]
61- if key == "Name" :
62- if ci_machines_prefix in key_v :
63- total_instances = total_instances + 1
64- elapsed = current_datetime - launch_time
65- will_terminate = False
66- if elapsed .total_seconds () > terminate_after_secs :
67- will_terminate = True
68-
69- logging .info (
70- "Temporary machine {} {}. terminate? {}" .format (
71- key_v , elapsed , will_terminate
72- )
73- )
74- if will_terminate :
75- logging .warning (
76- "Requesting to terminate instance with id {} given it " .format (
77- instance_id
78- )
79- + "surpassed the maximum allowed ci duration"
80- )
81- response = ec2_client .terminate_instances (
82- InstanceIds = [
83- instance_id ,
84- ]
85- )
86- logging .info (
87- "Request to terminate instance with id {} reply: {}" .format (
88- instance_id , response
89- )
90- )
71+ vm_name , timeout_secs = get_vname_timeout_secs (instance )
72+ if timeout_secs is None :
73+ timeout_secs = terminate_after_secs
74+ total_instances = termination_check (
75+ ci_machines_prefix ,
76+ current_datetime ,
77+ ec2_client ,
78+ instance_id ,
79+ launch_time ,
80+ timeout_secs ,
81+ total_instances ,
82+ vm_name ,
83+ )
9184 logging .info ("Detected a total of {} ci.bechmark VMs" .format (total_instances ))
9285
9386
87+ def termination_check (
88+ ci_machines_prefix ,
89+ current_datetime ,
90+ ec2_client ,
91+ instance_id ,
92+ launch_time ,
93+ terminate_after_secs ,
94+ total_instances ,
95+ vm_name ,
96+ ):
97+ if ci_machines_prefix in vm_name :
98+ total_instances = total_instances + 1
99+ elapsed = current_datetime - launch_time
100+ will_terminate = False
101+ if elapsed .total_seconds () > terminate_after_secs :
102+ will_terminate = True
103+
104+ logging .info (
105+ "Temporary machine {} {}. terminate? {}" .format (
106+ vm_name , elapsed , will_terminate
107+ )
108+ )
109+ if will_terminate :
110+ logging .warning (
111+ "Requesting to terminate instance with id {} given it " .format (
112+ instance_id
113+ )
114+ + "surpassed the maximum allowed ci duration"
115+ )
116+ response = ec2_client .terminate_instances (
117+ InstanceIds = [
118+ instance_id ,
119+ ]
120+ )
121+ logging .info (
122+ "Request to terminate instance with id {} reply: {}" .format (
123+ instance_id , response
124+ )
125+ )
126+ return total_instances
127+
128+
94129def watchdog_command_logic (args , project_name , project_version ):
95130 logging .info (
96131 "Using: {project_name} {project_version}" .format (
0 commit comments