func ParseLoadBalancers()

in ecs-cli/modules/utils/utils.go [117:184]


func ParseLoadBalancers(flagValues []string) ([]*ecs.LoadBalancer, error) {
	var list []*ecs.LoadBalancer

	for _, flagValue := range flagValues {
		m := make(map[string]string)

		validFlags := []string{containerNameParamKey, containerPortParamKey, loadBalancerNameParamKey, targetGroupArnParamKey}
		currentFlags := map[string]bool{
			"containerName": false,
			"containerPort": false,
		}

		var elbv1, elbv2 bool
		keyValPairs := strings.Split(flagValue, ",")

		for _, kv := range keyValPairs {
			pair := strings.SplitN(kv, "=", -1)

			if len(pair) != 2 {
				return nil, fmt.Errorf("There is an (key=value) initialization error, please check to see if you are using = accordingly on %s", pair[0])
			}
			key, val := pair[0], pair[1]

			if ok := contains(validFlags, key); !ok {
				return nil, fmt.Errorf("[--%s] is an invalid flag", key)
			}
			m[key] = val
			if key == "targetGroupArn" {
				elbv2 = true
			} else if key == "loadBalancerName" {
				elbv1 = true
			}
			if currentFlags[key] {
				return nil, fmt.Errorf("%s already exists", key)
			}
			currentFlags[key] = true
		}
		if elbv1 && elbv2 {
			return nil, fmt.Errorf("[--%s] and [--%s] flags cannot both be specified", "target-group-arn", "load-balancer-name")
		}
		for key, value := range currentFlags {
			if value == false {
				return nil, fmt.Errorf("--%s must be specified", key)
			}
		}

		containerPort, err := strconv.ParseInt(m["containerPort"], 10, 64)
		if err != nil {
			return nil, fmt.Errorf("Fail to parse container port %s for container %s", m["containerPort"], m["containerName"])
		}
		if elbv2 {
			list = append(list, &ecs.LoadBalancer{
				TargetGroupArn: aws.String(m["targetGroupArn"]),
				ContainerName:  aws.String(m["containerName"]),
				ContainerPort:  aws.Int64((containerPort)),
			})
		} else if elbv1 {
			list = append(list, &ecs.LoadBalancer{
				LoadBalancerName: aws.String(m["loadBalancerName"]),
				ContainerName:    aws.String(m["containerName"]),
				ContainerPort:    aws.Int64((containerPort)),
			})
		} else {
			return nil, fmt.Errorf("Target Group Arn or Load Balancer Name cannot be blank")
		}
	}
	return list, nil
}