@@ -99,27 +99,18 @@ def get_running_digests_sha(running_containers, repository, tagged_images) -> se
9999 return running_digests_sha
100100
101101
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
115104 list_clusters_paginator = ecs_client .get_paginator ('list_clusters' )
116105 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+
118109 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' ):
120111 if list_tasks_response ['taskArns' ]:
121112 describe_tasks_list = ecs_client .describe_tasks (
122- cluster = cluster ,
113+ cluster = cluster_arn ,
123114 tasks = list_tasks_response ['taskArns' ]
124115 )
125116
@@ -130,8 +121,54 @@ def discover_delete_images(region_name: str):
130121 )
131122 for container in response ['taskDefinition' ]['containerDefinitions' ]:
132123 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 )
135172
136173 # example of `image`
137174 # {
0 commit comments