44from click .termui import prompt
55import os
66
7- ecs_client = boto3 .client ("ecs" )
87class EcsTools :
98 _services = {}
109 _tasks = {}
10+
11+ def __init__ (self , region ):
12+ self .region = region
13+ self .ecs_client = boto3 .client ("ecs" , region = self .region )
14+
1115 @property
1216 def clusters (self ):
1317 if not hasattr (self , "_clusters" ):
14- paginator = ecs_client .get_paginator ("list_clusters" )
18+ paginator = self . ecs_client .get_paginator ("list_clusters" )
1519 response_iterator = paginator .paginate (
1620 PaginationConfig = {
1721 "PageSize" : 10 ,
@@ -27,7 +31,7 @@ def clusters(self):
2731 def get_services (self , cluster ):
2832 if cluster not in self ._services :
2933 self ._services [cluster ] = []
30- paginator = ecs_client .get_paginator ("list_services" )
34+ paginator = self . ecs_client .get_paginator ("list_services" )
3135
3236 response_iterator = paginator .paginate (
3337 cluster = cluster ,
@@ -44,7 +48,7 @@ def get_tasks(self, cluster, service):
4448 task_key = cluster + service
4549 if task_key not in self ._tasks :
4650 self ._tasks [task_key ] = []
47- paginator = ecs_client .get_paginator ("list_tasks" )
51+ paginator = self . ecs_client .get_paginator ("list_tasks" )
4852 response_iterator = paginator .paginate (
4953 cluster = cluster ,
5054 serviceName = service ,
@@ -58,7 +62,7 @@ def get_tasks(self, cluster, service):
5862 return self ._tasks [task_key ]
5963
6064 def describe_task (self , cluster , task_arn ):
61- response = ecs_client .describe_tasks (
65+ response = self . ecs_client .describe_tasks (
6266 cluster = cluster ,
6367 tasks = [
6468 task_arn ,
@@ -68,7 +72,7 @@ def describe_task(self, cluster, task_arn):
6872 return task
6973
7074 def execute_command (self ,cluster , container , task_arn , command = "bash" ):
71- return ecs_client .execute_command (
75+ return self . ecs_client .execute_command (
7276 cluster = cluster ,
7377 container = container ["name" ],
7478 command = command ,
@@ -107,7 +111,6 @@ def get_cluster_options(self):
107111 return "\n " .join (options )
108112
109113
110- ecs_tools = EcsTools ()
111114
112115
113116@click .group ()
@@ -117,8 +120,10 @@ def cli():
117120
118121
119122@cli .command ()
120- # @click.option("--cluster", type=click.Choice(ecs_tools.clusters), required=True, prompt=True)
121- def ecs_shell ():
123+ @click .option ("--region" , required = True , default = os .getenv ("AWS_DEFAULT_REGION" , "eu-west-2" ))
124+ def ecs_shell (region ):
125+ ecs_tools = EcsTools (region )
126+
122127 "Shell into an ECS task container"
123128 click .secho (ecs_tools .get_cluster_options (), fg = "cyan" )
124129 cluster = ecs_tools .clusters [int (click .prompt ("Please select a cluster" ))]
0 commit comments