func()

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
}