@@ -99,27 +99,18 @@ def get_running_digests_sha(running_containers, repository, tagged_images) -> se
99
99
return running_digests_sha
100
100
101
101
102
- def discover_delete_images (region_name : str ):
103
- print ("Discovering images in " + region_name )
104
- ecr_client = boto3 .client ('ecr' , region_name = region_name )
105
-
106
- repositories = []
107
- describe_repo_paginator = ecr_client .get_paginator ('describe_repositories' )
108
- for describe_repo_response in describe_repo_paginator .paginate ():
109
- for repo in describe_repo_response ['repositories' ]:
110
- repositories .append (repo )
111
-
112
- ecs_client = boto3 .client ('ecs' , region_name = region_name )
113
-
114
- running_containers = []
102
+ def get_running_containers (ecs_client ):
103
+ running_containers = set () # Actually, used container images
115
104
list_clusters_paginator = ecs_client .get_paginator ('list_clusters' )
116
105
for response_clusters_list_paginator in list_clusters_paginator .paginate ():
117
- for cluster in response_clusters_list_paginator ['clusterArns' ]:
106
+ for cluster_arn in response_clusters_list_paginator ['clusterArns' ]:
107
+ print ("cluster " + cluster_arn )
108
+
118
109
list_tasks_paginator = ecs_client .get_paginator ('list_tasks' )
119
- for list_tasks_response in list_tasks_paginator .paginate (cluster = cluster , desiredStatus = 'RUNNING' ):
110
+ for list_tasks_response in list_tasks_paginator .paginate (cluster = cluster_arn , desiredStatus = 'RUNNING' ):
120
111
if list_tasks_response ['taskArns' ]:
121
112
describe_tasks_list = ecs_client .describe_tasks (
122
- cluster = cluster ,
113
+ cluster = cluster_arn ,
123
114
tasks = list_tasks_response ['taskArns' ]
124
115
)
125
116
@@ -130,8 +121,54 @@ def discover_delete_images(region_name: str):
130
121
)
131
122
for container in response ['taskDefinition' ]['containerDefinitions' ]:
132
123
if '.dkr.ecr.' in container ['image' ] and ":" in container ['image' ]:
133
- if container ['image' ] not in running_containers :
134
- running_containers .append (container ['image' ])
124
+ running_containers .add (container ['image' ])
125
+
126
+ return sorted (running_containers )
127
+
128
+
129
+ def get_running_containers_from_services (ecs_client ):
130
+ running_containers = set () # Actually, used container images
131
+ list_clusters_paginator = ecs_client .get_paginator ('list_clusters' )
132
+ for response_clusters_list_paginator in list_clusters_paginator .paginate ():
133
+ for cluster_arn in response_clusters_list_paginator ['clusterArns' ]:
134
+ print ("cluster " + cluster_arn )
135
+ # List services in the cluster
136
+ services_response = ecs_client .list_services (cluster = cluster_arn )
137
+ service_arns = services_response ['serviceArns' ]
138
+
139
+ # Describe the service to get details
140
+ services_details = ecs_client .describe_services (cluster = cluster_arn , services = service_arns )[
141
+ 'services' ] if service_arns else []
142
+
143
+ for service in services_details :
144
+ # Get task definition for the service
145
+ task_definition_arn = service ['taskDefinition' ]
146
+ task_definition_response = ecs_client .describe_task_definition (taskDefinition = task_definition_arn )
147
+ task_definition = task_definition_response ['taskDefinition' ]
148
+
149
+ # Extract container images from task definition
150
+ container_definitions = task_definition ['containerDefinitions' ]
151
+ for container_definition in container_definitions :
152
+ container_image = container_definition ['image' ]
153
+ print (f"Service: { service ['serviceName' ]} , Container Image: { container_image } " )
154
+ running_containers .add (container_image )
155
+
156
+ return sorted (running_containers )
157
+
158
+
159
+ def discover_delete_images (region_name : str ):
160
+ print ("Discovering images in " + region_name )
161
+ ecr_client = boto3 .client ('ecr' , region_name = region_name )
162
+
163
+ repositories = []
164
+ describe_repo_paginator = ecr_client .get_paginator ('describe_repositories' )
165
+ for describe_repo_response in describe_repo_paginator .paginate ():
166
+ for repo in describe_repo_response ['repositories' ]:
167
+ repositories .append (repo )
168
+
169
+ ecs_client = boto3 .client ('ecs' , region_name = region_name )
170
+
171
+ running_containers = get_running_containers (ecs_client )
135
172
136
173
# example of `image`
137
174
# {
0 commit comments