func()

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
}