2020-07-20 09:49:37 -04:00
|
|
|
// Package connhelper provides helpers for connecting to a remote daemon host
|
|
|
|
// with custom logic.
|
2019-04-03 02:23:23 -04:00
|
|
|
package connhelper
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"net"
|
|
|
|
"net/url"
|
|
|
|
)
|
|
|
|
|
|
|
|
var helpers = map[string]func(*url.URL) (*ConnectionHelper, error){}
|
|
|
|
|
|
|
|
// ConnectionHelper allows to connect to a remote host with custom stream provider binary.
|
|
|
|
type ConnectionHelper struct {
|
|
|
|
// ContextDialer can be passed to grpc.WithContextDialer
|
|
|
|
ContextDialer func(ctx context.Context, addr string) (net.Conn, error)
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetConnectionHelper returns BuildKit-specific connection helper for the given URL.
|
|
|
|
// GetConnectionHelper returns nil without error when no helper is registered for the scheme.
|
|
|
|
func GetConnectionHelper(daemonURL string) (*ConnectionHelper, error) {
|
|
|
|
u, err := url.Parse(daemonURL)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
fn, ok := helpers[u.Scheme]
|
|
|
|
if !ok {
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
return fn(u)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Register registers new connectionhelper for scheme
|
|
|
|
func Register(scheme string, fn func(*url.URL) (*ConnectionHelper, error)) {
|
|
|
|
helpers[scheme] = fn
|
|
|
|
}
|