// findTaskArn // finds the first task definition in a cluster and service. // // Returns task ARN // // TODO: // filter the resulting tasks by essential: true // and only return the essential? // either that or assume that the new image will // somewhat match the old image, and use that to pick // one of the tasks. func findTaskArn(svc *ecs.ECS, clusterArn string, serviceArn string) (string, error) { params := &ecs.DescribeServicesInput{ Services: []*string{ aws.String(serviceArn), }, Cluster: aws.String(clusterArn), } resp, err := svc.DescribeServices(params) return *resp.Services[0].TaskDefinition, err }
// Verify that the ECS service exists. func VerifyServiceExists(ecs_obj *ecs.ECS, cluster string, service string) error { params := &ecs.DescribeServicesInput{ Cluster: &cluster, Services: []*string{ // Required aws.String(service), // Required }, } _, err := ecs_obj.DescribeServices(params) if err != nil { return fmt.Errorf("Cannot verify if ECS service exists: %s", FormatAwsError(err)) } return nil }
// GetServices will return a slice of ECS Services for a given cluster func GetServices(svc *ecs.ECS, cluster *string) ([]*ecs.Service, error) { var serviceArns []*string // List clusters reqParams := &ecs.ListServicesInput{ Cluster: cluster, MaxResults: aws.Int64(10), NextToken: aws.String(""), } // Loop through tokens until no more results remain for { resp, err := svc.ListServices(reqParams) // Error check if err != nil { return nil, fmt.Errorf("ecs.ListServices: %s", err.Error()) } // Expand slice of services and append to our comprehensive list serviceArns = append(serviceArns, resp.ServiceArns...) // Cycle token if resp.NextToken != nil { reqParams.NextToken = resp.NextToken } else { // Kill loop ... out of response pages break } } // Describe the services that we just got back resp, err := svc.DescribeServices(&ecs.DescribeServicesInput{ Cluster: cluster, Services: serviceArns, }) if err != nil { return nil, fmt.Errorf("ecs.DescribeServices: %s", err.Error()) } return resp.Services, nil }