@@ -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