@@ -72,173 +72,200 @@ func (c *Command) Run() error {
7272
7373 // ECS
7474 console .Info ("ECS" )
75- {
76- // ECS cluster
77- ecsClusterName := core .DefaultECSClusterName (clusterName )
78- ecsCluster , err := c .awsClient .ECS ().RetrieveCluster (ecsClusterName )
79- if err != nil {
80- return console .ExitWithErrorString ("Failed to retrieve ECS Cluster [%s]: %s" , ecsClusterName , err .Error ())
81- }
82- if ecsCluster == nil || conv .S (ecsCluster .Status ) != "ACTIVE" {
83- console .DetailWithResourceNote ("ECS Cluster" , ecsClusterName , "(not found)" , true )
84- ecsCluster = nil
85- } else {
86- console .DetailWithResource ("ECS Cluster" , ecsClusterName )
87- }
8875
89- // ECS Task Definition
90- ecsTaskDefinitionName := core .DefaultECSTaskDefinitionName ( appName )
91- ecsTaskDefinition , err := c .awsClient .ECS ().RetrieveTaskDefinition ( ecsTaskDefinitionName )
92- if err != nil {
93- return console .ExitWithErrorString ("Failed to retrieve ECS Task Definition [%s]: %s" , ecsTaskDefinitionName , err .Error ())
94- }
95- if ecsTaskDefinition == nil {
96- console .DetailWithResourceNote ("ECS Task Definition " , ecsTaskDefinitionName , "(not found)" , true )
97- } else {
98- console . DetailWithResource ( "ECS Task Definition" ,
99- fmt . Sprintf ( "%s:%d " , conv . S ( ecsTaskDefinition . Family ), conv . I64 ( ecsTaskDefinition . Revision )) )
100- }
76+ // ECS cluster
77+ ecsClusterName := core .DefaultECSClusterName ( clusterName )
78+ ecsCluster , err := c .awsClient .ECS ().RetrieveCluster ( ecsClusterName )
79+ if err != nil {
80+ return console .ExitWithErrorString ("Failed to retrieve ECS Cluster [%s]: %s" , ecsClusterName , err .Error ())
81+ }
82+ if ecsCluster == nil || conv . S ( ecsCluster . Status ) != "ACTIVE" {
83+ console .DetailWithResourceNote ("ECS Cluster " , ecsClusterName , "(not found)" , true )
84+ return nil // stop here
85+ } else {
86+ console . DetailWithResource ( "ECS Cluster " , ecsClusterName )
87+ }
10188
102- // ECS Service
103- ecsServiceActive := false
104- ecsServiceName := core .DefaultECSServiceName (appName )
105- if ecsCluster != nil {
106- ecsService , err := c .awsClient .ECS ().RetrieveService (ecsClusterName , ecsServiceName )
107- if err != nil {
108- return console .ExitWithErrorString ("Failed to retrieve ECS Service [%s]: %s" , ecsServiceName , err .Error ())
109- }
110- if ecsService == nil {
111- console .DetailWithResourceNote ("ECS Service" , ecsServiceName , "(not found)" , true )
112- } else if conv .S (ecsService .Status ) == "ACTIVE" {
113- ecsServiceActive = true
114- console .DetailWithResource ("ECS Service" , ecsServiceName )
115- } else {
116- console .DetailWithResourceNote ("ECS Service" , ecsServiceName , fmt .Sprintf ("(%s)" , conv .S (ecsService .Status )), true )
117- ecsService = nil
89+ // ECS Service
90+ ecsServiceName := core .DefaultECSServiceName (appName )
91+ ecsService , err := c .awsClient .ECS ().RetrieveService (ecsClusterName , ecsServiceName )
92+ if err != nil {
93+ return console .ExitWithErrorString ("Failed to retrieve ECS Service [%s]: %s" , ecsServiceName , err .Error ())
94+ }
95+ if ecsService == nil {
96+ console .DetailWithResourceNote ("ECS Service" , ecsServiceName , "(not found)" , true )
97+ return nil // stop here
98+ } else if conv .S (ecsService .Status ) == "ACTIVE" {
99+ console .DetailWithResource ("ECS Service" , ecsServiceName )
100+ } else {
101+ console .DetailWithResourceNote ("ECS Service" , ecsServiceName , fmt .Sprintf ("(%s)" , conv .S (ecsService .Status )), true )
102+ return nil // stop here
103+ }
104+
105+ // ECS Task Definition
106+ ecsTaskDefinitionName := conv .S (ecsService .TaskDefinition )
107+ ecsTaskDefinition , err := c .awsClient .ECS ().RetrieveTaskDefinition (ecsTaskDefinitionName )
108+ if err != nil {
109+ return console .ExitWithErrorString ("Failed to retrieve ECS Task Definition [%s]: %s" , ecsTaskDefinitionName , err .Error ())
110+ }
111+ if ecsTaskDefinition == nil {
112+ console .DetailWithResourceNote ("ECS Task Definition" , ecsTaskDefinitionName , "(not found)" , true )
113+ return nil // stop here
114+ } else {
115+ console .DetailWithResource ("ECS Task Definition" ,
116+ fmt .Sprintf ("%s:%d" , conv .S (ecsTaskDefinition .Family ), conv .I64 (ecsTaskDefinition .Revision )))
117+ }
118+
119+ // Tasks count / status
120+ isDeploying := false
121+ if ecsService .Deployments != nil {
122+ for _ , d := range ecsService .Deployments {
123+ switch conv .S (d .Status ) {
124+ case "ACTIVE" :
125+ isDeploying = true
126+ case "PRIMARY" :
118127 }
128+ }
129+ }
130+ if isDeploying {
131+ console .DetailWithResourceNote ("Tasks (current/desired/pending)" , fmt .Sprintf ("%d/%d/%d" ,
132+ conv .I64 (ecsService .RunningCount ),
133+ conv .I64 (ecsService .DesiredCount ),
134+ conv .I64 (ecsService .PendingCount )),
135+ "(deploying)" , true )
136+ } else {
137+ console .DetailWithResource ("Tasks (current/desired/pending)" , fmt .Sprintf ("%d/%d/%d" ,
138+ conv .I64 (ecsService .RunningCount ),
139+ conv .I64 (ecsService .DesiredCount ),
140+ conv .I64 (ecsService .PendingCount )))
141+ }
119142
120- // ECS Service Details
121- if ecsService != nil {
122- for _ , lb := range ecsService .LoadBalancers {
123- elbTargetGroup , err := c .awsClient .ELB ().RetrieveTargetGroup (conv .S (lb .TargetGroupArn ))
124- if err != nil {
125- return console .ExitWithErrorString ("Failed to retrieve ELB Target Group [%s]: %s" , conv .S (lb .TargetGroupArn ), err .Error ())
126- }
143+ // Container Definition
144+ for _ , containerDefinition := range ecsTaskDefinition .ContainerDefinitions {
145+ console .Info ("Container Definition" )
127146
128- console .DetailWithResource ("ELB Target Group" , fmt .Sprintf ("%s:%d" ,
129- conv .S (elbTargetGroup .TargetGroupName ),
130- conv .I64 (lb .ContainerPort )))
131- }
147+ console .DetailWithResource ("Name" , conv .S (containerDefinition .Name ))
148+ console .DetailWithResource ("Image" , conv .S (containerDefinition .Image ))
132149
133- isDeploying := false
134- if ecsService .Deployments != nil {
135- for _ , d := range ecsService .Deployments {
136- switch conv .S (d .Status ) {
137- case "ACTIVE" :
138- isDeploying = true
139- case "PRIMARY" :
140- }
141- }
142- }
150+ cpu := float64 (conv .I64 (containerDefinition .Cpu )) / 1024.0
151+ console .DetailWithResource ("CPU" , fmt .Sprintf ("%.2f" , cpu ))
143152
144- if isDeploying {
145- console .DetailWithResourceNote ("Tasks (current/desired/pending)" , fmt .Sprintf ("%d/%d/%d" ,
146- conv .I64 (ecsService .RunningCount ),
147- conv .I64 (ecsService .DesiredCount ),
148- conv .I64 (ecsService .PendingCount )),
149- "(deploying)" , true )
150- } else {
151- console .DetailWithResource ("Tasks (current/desired/pending)" , fmt .Sprintf ("%d/%d/%d" ,
152- conv .I64 (ecsService .RunningCount ),
153- conv .I64 (ecsService .DesiredCount ),
154- conv .I64 (ecsService .PendingCount )))
155- }
156- }
153+ memory := conv .I64 (containerDefinition .Memory )
154+ console .DetailWithResource ("Memory" , fmt .Sprintf ("%dm" , memory ))
155+
156+ for _ , pm := range containerDefinition .PortMappings {
157+ console .DetailWithResource ("Port Mapping (protocol:container:host)" , fmt .Sprintf ("%s:%d:%d" ,
158+ conv .S (pm .Protocol ), conv .I64 (pm .ContainerPort ), conv .I64 (pm .HostPort )))
157159 }
158160
159- // Container Definition
160- if ecsServiceActive && ecsTaskDefinition != nil {
161- for _ , containerDefinition := range ecsTaskDefinition .ContainerDefinitions {
162- console .Info ("Container Definition" )
161+ for _ , ev := range containerDefinition .Environment {
162+ console .DetailWithResource ("Env" , fmt .Sprintf ("%s=%s" ,
163+ conv .S (ev .Name ), conv .S (ev .Value )))
164+ }
165+ }
166+
167+ // Tasks
168+ taskARNs , err := c .awsClient .ECS ().ListServiceTaskARNs (ecsClusterName , ecsServiceName )
169+ if err != nil {
170+ return console .ExitWithErrorString ("Failed to list ECS Tasks for ECS Service [%s]: %s" , ecsServiceName , err .Error ())
171+ }
172+ tasks , err := c .awsClient .ECS ().RetrieveTasks (ecsClusterName , taskARNs )
173+ if err != nil {
174+ return console .ExitWithErrorString ("Failed to retrieve ECS Tasks for ECS Service [%s]: %s" , ecsServiceName , err .Error ())
175+ }
176+
177+ // retrieve container instance info
178+ containerInstanceARNs := []string {}
179+ for _ , task := range tasks {
180+ containerInstanceARNs = append (containerInstanceARNs , conv .S (task .ContainerInstanceArn ))
181+ }
182+ containerInstances , err := c .awsClient .ECS ().RetrieveContainerInstances (ecsClusterName , containerInstanceARNs )
183+ if err != nil {
184+ return console .ExitWithErrorString ("Failed to retrieve ECS Container Instances: %s" , err .Error ())
185+ }
163186
164- console .DetailWithResource ("Name" , conv .S (containerDefinition .Name ))
165- console .DetailWithResource ("Image" , conv .S (containerDefinition .Image ))
187+ // retrieve EC2 Instance info
188+ ec2InstanceIDs := []string {}
189+ for _ , ci := range containerInstances {
190+ ec2InstanceIDs = append (ec2InstanceIDs , conv .S (ci .Ec2InstanceId ))
191+ }
192+ ec2Instances , err := c .awsClient .EC2 ().RetrieveInstances (ec2InstanceIDs )
193+ if err != nil {
194+ return console .ExitWithErrorString ("Failed to retrieve EC2 Instances: %s" , err .Error ())
195+ }
166196
167- cpu := float64 ( conv . I64 ( containerDefinition . Cpu )) / 1024.0
168- console .DetailWithResource ( "CPU" , fmt . Sprintf ( "%.2f" , cpu ) )
197+ for _ , task := range tasks {
198+ console .Info ( "ECS Task" )
169199
170- memory := conv .I64 ( containerDefinition . Memory )
171- console .DetailWithResource ("Memory" , fmt . Sprintf ( "%dm" , memory ) )
200+ taskDefinition := aws . GetECSTaskDefinitionFamilyAndRevisionFromARN ( conv .S ( task . TaskDefinitionArn ) )
201+ console .DetailWithResource ("Task Definition" , taskDefinition )
172202
173- for _ , pm := range containerDefinition .PortMappings {
174- console .DetailWithResource ("Port Mapping (protocol:container:host)" , fmt .Sprintf ("%s:%d:%d" ,
175- conv .S (pm .Protocol ), conv .I64 (pm .ContainerPort ), conv .I64 (pm .HostPort )))
176- }
203+ console .DetailWithResource ("Status (current/desired)" , fmt .Sprintf ("%s/%s" ,
204+ conv .S (task .LastStatus ), conv .S (task .DesiredStatus )))
177205
178- for _ , ev := range containerDefinition .Environment {
179- console .DetailWithResource ("Env" , fmt .Sprintf ("%s=%s" ,
180- conv .S (ev .Name ), conv .S (ev .Value )))
206+ for _ , ci := range containerInstances {
207+ if conv .S (task .ContainerInstanceArn ) == conv .S (ci .ContainerInstanceArn ) {
208+ console .DetailWithResource ("EC2 Instance ID" , conv .S (ci .Ec2InstanceId ))
209+
210+ for _ , ec2Instance := range ec2Instances {
211+ if conv .S (ci .Ec2InstanceId ) == conv .S (ec2Instance .InstanceId ) {
212+ if ! utils .IsBlank (conv .S (ec2Instance .PrivateIpAddress )) {
213+ console .DetailWithResource (" Private IP" , conv .S (ec2Instance .PrivateIpAddress ))
214+ }
215+ if ! utils .IsBlank (conv .S (ec2Instance .PublicIpAddress )) {
216+ console .DetailWithResource (" Public IP" , conv .S (ec2Instance .PublicIpAddress ))
217+ }
218+ break
219+ }
181220 }
221+ break
182222 }
183223 }
224+ }
184225
185- // Tasks
186- if ecsServiceActive {
187- // retrieve ECS tasks info
188- taskARNs , err := c .awsClient .ECS ().ListServiceTaskARNs (ecsClusterName , ecsServiceName )
189- if err != nil {
190- return console .ExitWithErrorString ("Failed to list ECS Tasks for ECS Service [%s]: %s" , ecsServiceName , err .Error ())
191- }
192- tasks , err := c .awsClient .ECS ().RetrieveTasks (ecsClusterName , taskARNs )
193- if err != nil {
194- return console .ExitWithErrorString ("Failed to retrieve ECS Tasks for ECS Service [%s]: %s" , ecsServiceName , err .Error ())
195- }
226+ // Load Balancer
227+ if ecsService .LoadBalancers != nil && len (ecsService .LoadBalancers ) > 0 {
228+ for _ , lb := range ecsService .LoadBalancers {
229+ console .Info ("Load Balancer" )
196230
197- // retrieve container instance info
198- containerInstanceARNs := []string {}
199- for _ , task := range tasks {
200- containerInstanceARNs = append (containerInstanceARNs , conv .S (task .ContainerInstanceArn ))
201- }
202- containerInstances , err := c .awsClient .ECS ().RetrieveContainerInstances (ecsClusterName , containerInstanceARNs )
231+ elbTargetGroup , err := c .awsClient .ELB ().RetrieveTargetGroup (conv .S (lb .TargetGroupArn ))
203232 if err != nil {
204- return console .ExitWithErrorString ("Failed to retrieve ECS Container Instances : %s" , err .Error ())
233+ return console .ExitWithErrorString ("Failed to retrieve ELB Target Group [%s] : %s" , conv . S ( lb . TargetGroupArn ) , err .Error ())
205234 }
206235
207- // retrieve EC2 Instance info
208- ec2InstanceIDs := []string {}
209- for _ , ci := range containerInstances {
210- ec2InstanceIDs = append (ec2InstanceIDs , conv .S (ci .Ec2InstanceId ))
211- }
212- ec2Instances , err := c .awsClient .EC2 ().RetrieveInstances (ec2InstanceIDs )
213- if err != nil {
214- return console .ExitWithErrorString ("Failed to retrieve EC2 Instances: %s" , err .Error ())
215- }
236+ console .DetailWithResource ("Container Port" , fmt .Sprintf ("%d" , conv .I64 (lb .ContainerPort )))
237+ console .DetailWithResource ("ELB Target Group" , conv .S (elbTargetGroup .TargetGroupName ))
216238
217- for _ , task := range tasks {
218- console .Info ("ECS Task" )
219-
220- taskDefinition := aws .GetECSTaskDefinitionFamilyAndRevisionFromARN (conv .S (task .TaskDefinitionArn ))
221- console .DetailWithResource ("Task Definition" , taskDefinition )
222-
223- console .DetailWithResource ("Status (current/desired)" , fmt .Sprintf ("%s/%s" ,
224- conv .S (task .LastStatus ), conv .S (task .DesiredStatus )))
225-
226- for _ , ci := range containerInstances {
227- if conv .S (task .ContainerInstanceArn ) == conv .S (ci .ContainerInstanceArn ) {
228- console .DetailWithResource ("EC2 Instance ID" , conv .S (ci .Ec2InstanceId ))
229-
230- for _ , ec2Instance := range ec2Instances {
231- if conv .S (ci .Ec2InstanceId ) == conv .S (ec2Instance .InstanceId ) {
232- if ! utils .IsBlank (conv .S (ec2Instance .PrivateIpAddress )) {
233- console .DetailWithResource (" Private IP" , conv .S (ec2Instance .PrivateIpAddress ))
234- }
235- if ! utils .IsBlank (conv .S (ec2Instance .PublicIpAddress )) {
236- console .DetailWithResource (" Public IP" , conv .S (ec2Instance .PublicIpAddress ))
237- }
238- break
239- }
239+ if elbTargetGroup .LoadBalancerArns != nil {
240+ for _ , elbARN := range elbTargetGroup .LoadBalancerArns {
241+ elbLoadBalancer , err := c .awsClient .ELB ().RetrieveLoadBalancer (conv .S (elbARN ))
242+ if err != nil {
243+ return console .ExitWithErrorString ("Failed to retrieve ELB Load Balancer [%s]: %s" , elbARN , err .Error ())
244+ }
245+
246+ console .DetailWithResource ("ELB Load Balancer" , conv .S (elbLoadBalancer .LoadBalancerName ))
247+ console .DetailWithResource (" Scheme" , conv .S (elbLoadBalancer .Scheme ))
248+ //console.DetailWithResource(" DNS", conv.S(elbLoadBalancer.DNSName))
249+ if elbLoadBalancer .State != nil {
250+ console .DetailWithResource (" State" , fmt .Sprintf ("%s %s" ,
251+ conv .S (elbLoadBalancer .State .Code ),
252+ conv .S (elbLoadBalancer .State .Reason )))
253+ }
254+
255+ // listeners
256+ listeners , err := c .awsClient .ELB ().RetrieveLoadBalancerListeners (conv .S (elbARN ))
257+ if err != nil {
258+ return console .ExitWithErrorString ("Failed to retrieve Listeners for ELB Load Balancer [%s]: %s" , elbARN , err .Error ())
259+ }
260+ for _ , listener := range listeners {
261+ if listener .DefaultActions != nil &&
262+ len (listener .DefaultActions ) > 0 &&
263+ conv .S (listener .DefaultActions [0 ].TargetGroupArn ) == conv .S (elbTargetGroup .TargetGroupArn ) {
264+ console .DetailWithResource (" Endpoint" , fmt .Sprintf ("%s://%s:%d" ,
265+ strings .ToLower (conv .S (listener .Protocol )),
266+ conv .S (elbLoadBalancer .DNSName ),
267+ conv .I64 (listener .Port )))
240268 }
241- break
242269 }
243270 }
244271 }
0 commit comments