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
}