You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
753 B
Go
46 lines
753 B
Go
package kube
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"google.golang.org/grpc/resolver"
|
|
)
|
|
|
|
const (
|
|
colon = ":"
|
|
defaultNamespace = "default"
|
|
)
|
|
|
|
var emptyService Service
|
|
|
|
type Service struct {
|
|
Namespace string
|
|
Name string
|
|
Port int
|
|
}
|
|
|
|
func ParseTarget(target resolver.Target) (Service, error) {
|
|
var service Service
|
|
service.Namespace = target.Authority
|
|
if len(service.Namespace) == 0 {
|
|
service.Namespace = defaultNamespace
|
|
}
|
|
|
|
segs := strings.SplitN(target.Endpoint, colon, 2)
|
|
if len(segs) < 2 {
|
|
return emptyService, fmt.Errorf("bad endpoint: %s", target.Endpoint)
|
|
}
|
|
|
|
service.Name = segs[0]
|
|
port, err := strconv.Atoi(segs[1])
|
|
if err != nil {
|
|
return emptyService, err
|
|
}
|
|
|
|
service.Port = port
|
|
|
|
return service, nil
|
|
}
|