Skip to content

Commit a92e4e1

Browse files
committed
add get_running_containers_from_services
original Author/Committer: Agustín Ramiro Díaz <[email protected]>
1 parent 0f57966 commit a92e4e1

File tree

1 file changed

+55
-18
lines changed

1 file changed

+55
-18
lines changed

main.py

Lines changed: 55 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)