in ecs/service.go [190:276]
func (ecs *ECS) DescribeServices(serviceArns []string) []Service {
var services []Service
resp, err := ecs.svc.DescribeServices(
&awsecs.DescribeServicesInput{
Cluster: aws.String(ecs.ClusterName),
Services: aws.StringSlice(serviceArns),
},
)
if err != nil {
console.ErrorExit(err, "Could not describe ECS services")
}
for _, service := range resp.Services {
var securityGroupIds, subnetIds []*string
if config := service.NetworkConfiguration.AwsvpcConfiguration; config != nil {
securityGroupIds = config.SecurityGroups
subnetIds = config.Subnets
}
s := Service{
DesiredCount: aws.Int64Value(service.DesiredCount),
Name: aws.StringValue(service.ServiceName),
PendingCount: aws.Int64Value(service.PendingCount),
RunningCount: aws.Int64Value(service.RunningCount),
SecurityGroupIds: aws.StringValueSlice(securityGroupIds),
Status: aws.StringValue(service.Status),
SubnetIds: aws.StringValueSlice(subnetIds),
TaskDefinitionArn: aws.StringValue(service.TaskDefinition),
}
taskDefinition := ecs.DescribeTaskDefinition(aws.StringValue(service.TaskDefinition))
s.Cpu = aws.StringValue(taskDefinition.Cpu)
s.Memory = aws.StringValue(taskDefinition.Memory)
s.TaskRole = aws.StringValue(taskDefinition.TaskRoleArn)
if len(service.LoadBalancers) > 0 {
s.TargetGroupArn = aws.StringValue(service.LoadBalancers[0].TargetGroupArn)
}
if len(taskDefinition.ContainerDefinitions) > 0 {
s.Image = aws.StringValue(taskDefinition.ContainerDefinitions[0].Image)
for _, env := range taskDefinition.ContainerDefinitions[0].Environment {
s.EnvVars = append(
s.EnvVars,
EnvVar{
Key: aws.StringValue(env.Name),
Value: aws.StringValue(env.Value),
},
)
}
}
for _, event := range service.Events {
s.AddEvent(
Event{
CreatedAt: aws.TimeValue(event.CreatedAt),
Message: aws.StringValue(event.Message),
},
)
}
for _, d := range service.Deployments {
deployment := Deployment{
Status: aws.StringValue(d.Status),
DesiredCount: aws.Int64Value(d.DesiredCount),
PendingCount: aws.Int64Value(d.PendingCount),
RunningCount: aws.Int64Value(d.RunningCount),
CreatedAt: aws.TimeValue(d.CreatedAt),
Id: ecs.getDeploymentId(aws.StringValue(d.TaskDefinition)),
}
deploymentTaskDefinition := ecs.DescribeTaskDefinition(aws.StringValue(d.TaskDefinition))
deployment.Image = aws.StringValue(deploymentTaskDefinition.ContainerDefinitions[0].Image)
s.AddDeployment(deployment)
}
services = append(services, s)
}
return services
}