Files
weave-scope/probe/cri/registry.go
gotjosh fbb027752f Refactor if/else into a switch statement
Also, extracts strings into constants
2018-11-01 20:42:27 +00:00

84 lines
1.7 KiB
Go

package cri
import (
"fmt"
"net"
"net/url"
"time"
"google.golang.org/grpc"
client "github.com/weaveworks/scope/cri/runtime"
)
const (
unixProtocol = "unix"
tcpProtocol = "tcp"
)
func dial(addr string, timeout time.Duration) (net.Conn, error) {
return net.DialTimeout(unixProtocol, addr, timeout)
}
func getAddressAndDialer(endpoint string) (string, func(addr string, timeout time.Duration) (net.Conn, error), error) {
addr, err := parseEndpointWithFallbackProtocol(endpoint, unixProtocol)
if err != nil {
return "", nil, err
}
return addr, dial, nil
}
func parseEndpointWithFallbackProtocol(endpoint string, fallbackProtocol string) (addr string, err error) {
var protocol string
protocol, addr, err = parseEndpoint(endpoint)
if err != nil {
return "", err
}
if protocol == "" {
fallbackEndpoint := fallbackProtocol + "://" + endpoint
_, addr, err = parseEndpoint(fallbackEndpoint)
if err != nil {
return "", err
}
}
return addr, err
}
func parseEndpoint(endpoint string) (string, string, error) {
u, err := url.Parse(endpoint)
if err != nil {
return "", "", err
}
switch u.Scheme {
case tcpProtocol:
return tcpProtocol, u.Host, fmt.Errorf("endpoint was not unix socket %v", u.Scheme)
case unixProtocol:
return unixProtocol, u.Path, nil
case "":
return "", "", nil
default:
return u.Scheme, "", fmt.Errorf("protocol %q not supported", u.Scheme)
}
}
// NewCRIClient creates client to CRI.
func NewCRIClient(endpoint string) (client.RuntimeServiceClient, error) {
addr, dailer, err := getAddressAndDialer(endpoint)
if err != nil {
return nil, err
}
conn, err := grpc.Dial(addr, grpc.WithInsecure(), grpc.WithDialer(dailer))
if err != nil {
return nil, err
}
return client.NewRuntimeServiceClient(conn), nil
}