in ecs-cli/modules/cli/compose/entity/service/service.go [83:158]
func (s *Service) LoadContext() error {
maxPercent, err := getInt64FromCLIContext(s.Context(), flags.DeploymentMaxPercentFlag)
if err != nil {
return err
}
minHealthyPercent, err := getInt64FromCLIContext(s.Context(), flags.DeploymentMinHealthyPercentFlag)
if err != nil {
return err
}
s.deploymentConfig = &ecs.DeploymentConfiguration{
MaximumPercent: maxPercent,
MinimumHealthyPercent: minHealthyPercent,
}
// Load Balancer
targetGroups := s.Context().CLIContext.StringSlice(flags.TargetGroupsFlag)
role := s.Context().CLIContext.String(flags.RoleFlag)
targetGroupArn := s.Context().CLIContext.String(flags.TargetGroupArnFlag)
loadBalancerName := s.Context().CLIContext.String(flags.LoadBalancerNameFlag)
containerName := s.Context().CLIContext.String(flags.ContainerNameFlag)
containerPort, err := getInt64FromCLIContext(s.Context(), flags.ContainerPortFlag)
if err != nil {
return err
}
// Health Check Grace Period
healthCheckGP, err := getInt64FromCLIContext(s.Context(), flags.HealthCheckGracePeriodFlag)
if err != nil {
return err
}
s.healthCheckGP = healthCheckGP
// Validates LoadBalancerName and TargetGroupArn cannot exist at the same time.
// Other validation is taken care of by the API call. This currently
// includes errors on absence of container name and port if target
// group or ELB name is specified or if the load balancing resources
// specified do not exist.
// TODO: Add validation on targetGroupArn or loadBalancerName being
// present if containerName or containerPort are specified
if (targetGroupArn != "" || loadBalancerName != "" || containerName != "" || containerPort != nil) && len(targetGroups) != 0 {
return errors.Errorf("[--%s] cannot be used with [--%s], [--%s], [--%s] or [--%s]", flags.TargetGroupsFlag, flags.LoadBalancerNameFlag, flags.TargetGroupArnFlag, flags.ContainerNameFlag, flags.ContainerPortFlag)
} else if targetGroupArn != "" || loadBalancerName != "" || containerName != "" || containerPort != nil {
if targetGroupArn != "" && loadBalancerName != "" {
return errors.Errorf("[--%s] and [--%s] flags cannot both be specified", flags.LoadBalancerNameFlag, flags.TargetGroupArnFlag)
}
if targetGroupArn == "" && loadBalancerName == "" {
return errors.Errorf("Must specify either [--%s] or [--%s] flag for your service", flags.LoadBalancerNameFlag, flags.TargetGroupArnFlag)
}
if containerName == "" {
return errors.Errorf("[--%s] is required if [--%s] or [--%s] is specified", flags.ContainerNameFlag, flags.LoadBalancerNameFlag, flags.TargetGroupArnFlag)
}
if containerPort == nil {
return errors.Errorf("[--%s] is required if [--%s] or [--%s] is specified", flags.ContainerPortFlag, flags.LoadBalancerNameFlag, flags.TargetGroupArnFlag)
}
loadBalancer := &ecs.LoadBalancer{
ContainerName: aws.String(containerName),
ContainerPort: containerPort,
}
if targetGroupArn != "" {
loadBalancer.TargetGroupArn = aws.String(targetGroupArn)
}
if loadBalancerName != "" {
loadBalancer.LoadBalancerName = aws.String(loadBalancerName)
}
s.loadBalancers = []*ecs.LoadBalancer{loadBalancer}
} else if len(targetGroups) != 0 {
loadBalancers, err := utils.ParseLoadBalancers(targetGroups)
if err != nil {
return err
}
s.loadBalancers = append(s.loadBalancers, loadBalancers...)
}
s.role = role
return nil
}