Skip to content

Commit def7593

Browse files
committed
Refactor
Signed-off-by: Alina Buzachis <[email protected]>
1 parent a0921a9 commit def7593

File tree

1 file changed

+31
-134
lines changed

1 file changed

+31
-134
lines changed

aws/terminator/compute.py

Lines changed: 31 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -620,7 +620,7 @@ def terminate(self):
620620
self.client.cancel_spot_instance_requests(SpotInstanceRequestIds=[self.id])
621621

622622

623-
class EcsCluster(Terminator):
623+
class Ecs(Terminator):
624624
@staticmethod
625625
def create(credentials):
626626
def _paginate_cluster_results(client):
@@ -635,16 +635,16 @@ def _paginate_cluster_results(client):
635635

636636
return client.describe_clusters(name=names)['clusters']
637637

638-
return Terminator._create(credentials, EcsCluster, 'ecs', _paginate_cluster_results)
638+
return Terminator._create(credentials, Ecs, 'ecs', _paginate_cluster_results)
639639

640640
@property
641641
def name(self):
642642
return self.instance['clusterName']
643643

644644
def terminate(self):
645-
def _paginate_task_results(cluster, container_instance):
645+
def _paginate_task_results(container_instance):
646646
names = self.get_paginator('list_tasks').paginate(
647-
cluster=cluster,
647+
cluster=self.name,
648648
containerInstance=container_instance,
649649
PaginationConfig={
650650
'PageSize': 100,
@@ -654,149 +654,46 @@ def _paginate_task_results(cluster, container_instance):
654654
if not names:
655655
return []
656656

657-
return self.client.describe_taks(cluster=cluster, tasks=names)['tasks']
658-
659-
# Deregister all container instances first
660-
names = self.client.get_paginator('list_container_instances').paginate(
661-
cluster=self.name,
662-
PaginationConfig={
663-
'PageSize': 100,
664-
}
665-
).build_full_result()['containerInstanceArns']
666-
667-
for name in names:
668-
# If there are tasks running on container instances, stop them first
669-
tasks = _paginate_task_results(cluster=self.name, containerInstance=name['containerInstanceArn'])
670-
for task in tasks:
671-
self.client.stop_task(cluster=self.name, task=task['taskArn'])
672-
self.client.deregister_container_instance(cluster=self.name, containerInstance=name['containerInstanceArn'])
673-
674-
self.client.delete_cluster(cluster=self.name)
675-
676-
677-
class EcsService(Terminator):
678-
@staticmethod
679-
def create(credentials):
680-
def _paginate_service_results(client):
681-
names = client.get_paginator('list_clusters').paginate(
657+
return self.client.describe_taks(cluster=self.name, tasks=names)['tasks']
658+
659+
def _paginate_container_instance_results():
660+
names = self.client.get_paginator('list_container_instances').paginate(
661+
cluster=self.name,
682662
PaginationConfig={
683663
'PageSize': 100,
684664
}
685-
).build_full_result()['clusterArns']
665+
).build_full_result()['containerInstanceArns']
686666

687667
if not names:
688668
return []
689-
690-
results = []
691-
clusters = client.describe_clusters(name=names)['clusters']
692-
for cluster in clusters:
693-
names = client.get_paginator('list_services').paginate(
694-
cluster=cluster,
695-
PaginationConfig={
696-
'PageSize': 100,
697-
}
698-
).build_full_result()['serviceArns']
699-
700-
if not names:
701-
continue
702669

703-
results.append(client.describe_services(cluster=cluster, services=names)['services'])
704-
return results
705-
706-
return Terminator._create(credentials, EcsService, 'ecs', _paginate_service_results)
707-
708-
@property
709-
def name(self):
710-
return self.instance['serviceName']
711-
712-
@property
713-
def age_limit(self):
714-
return datetime.timedelta(minutes=15)
715-
716-
@property
717-
def created_time(self):
718-
return self.instance['createdAt']
719-
720-
@property
721-
def cluster_name(self):
722-
return self.instance['clusterArn']
723-
724-
def terminate(self):
725-
self.client.delete_service(cluster=self.cluster_name, service=self.name, force=True)
726-
727-
728-
class EcsContainerInstance(Terminator):
729-
@staticmethod
730-
def create(credentials):
731-
def _paginate_container_instance_results(client):
732-
names = client.get_paginator('list_clusters').paginate(
670+
return self.client.describe_container_instances(cluster=self.name, containerInstances=names)['containerInstances']
671+
672+
def _paginate_service_results():
673+
names = self.client.get_paginator('list_services').paginate(
674+
cluster=self.name,
733675
PaginationConfig={
734676
'PageSize': 100,
735677
}
736-
).build_full_result()['clusterArns']
678+
).build_full_result()['serviceArns']
737679

738680
if not names:
739681
return []
682+
683+
return self.client.describe_services(cluster=self.name, services=names)['services']
684+
685+
container_instances = _paginate_container_instance_results()
686+
for name in container_instances:
687+
# If there are tasks running on a container instance, stop them first
688+
tasks = _paginate_task_results(cluster=self.name, containerInstance=name['containerInstanceArn'])
689+
for task in tasks:
690+
self.client.stop_task(cluster=self.name, task=task['taskArn'])
740691

741-
results = []
742-
clusters = client.describe_clusters(name=names)['clusters']
743-
for cluster in clusters:
744-
names = client.get_paginator('list_container_instances').paginate(
745-
cluster=cluster,
746-
PaginationConfig={
747-
'PageSize': 100,
748-
}
749-
).build_full_result()['containerInstanceArns']
750-
751-
if not names:
752-
continue
753-
754-
results.append(client.describe_container_instances(cluster=cluster, containerInstances=names)['containerInstances'])
755-
return results
756-
757-
return Terminator._create(credentials, EcsContainerInstance, 'ecs', _paginate_container_instance_results)
758-
759-
@property
760-
def name(self):
761-
return self.instance['containerInstanceArn']
762-
763-
@property
764-
def age_limit(self):
765-
return datetime.timedelta(minutes=15)
766-
767-
@property
768-
def created_time(self):
769-
return self.instance['registeredAt']
770-
771-
def terminate(self):
772-
def _paginate_task_results(cluster, container_instance):
773-
names = self.get_paginator('list_tasks').paginate(
774-
cluster=cluster,
775-
containerInstance=container_instance,
776-
PaginationConfig={
777-
'PageSize': 100,
778-
}
779-
).build_full_result()['taskArns']
692+
self.client.deregister_container_instance(containerInstance=name['containerInstanceArn'])
780693

781-
if not names:
782-
return []
694+
# If there are running services, delete them first
695+
services = _paginate_service_results()
696+
for name in services:
697+
self.client.delete_service(cluster=self.cluster_name, service=name['serviceName'], force=True)
783698

784-
return self.client.describe_taks(cluster=cluster, tasks=names)['tasks']
785-
786-
names = self.client.get_paginator('list_clusters').paginate(
787-
PaginationConfig={
788-
'PageSize': 100,
789-
}
790-
).build_full_result()['clusterArns']
791-
792-
if names:
793-
clusters = self.client.describe_clusters(name=names)['clusters']
794-
for cluster in clusters:
795-
# If there are tasks running on container instances, stop them first
796-
tasks = _paginate_task_results(cluster=cluster['clusterName'], containerInstance=self.name)
797-
for task in tasks:
798-
self.client.stop_task(cluster=cluster['clusterName'], task=task['taskArn'])
799-
try:
800-
self.client.deregister_container_instance(cluster=cluster['clusterName'], containerInstance=self.name)
801-
except botocore.exceptions.ClientError as ex:
802-
pass
699+
self.client.delete_cluster(cluster=self.name)

0 commit comments

Comments
 (0)