remote: add additional connhelpers to buildx

Signed-off-by: Justin Chadwell <me@jedevc.com>
This commit is contained in:
Justin Chadwell 2022-05-17 16:12:07 +01:00
parent 22ac3271d2
commit 1eff9310f8
3 changed files with 38 additions and 12 deletions

View File

@ -9,6 +9,7 @@ import (
"github.com/docker/buildx/build" "github.com/docker/buildx/build"
"github.com/docker/buildx/driver" "github.com/docker/buildx/driver"
ctxkube "github.com/docker/buildx/driver/kubernetes/context" ctxkube "github.com/docker/buildx/driver/kubernetes/context"
remoteutil "github.com/docker/buildx/driver/remote/util"
"github.com/docker/buildx/store" "github.com/docker/buildx/store"
"github.com/docker/buildx/store/storeutil" "github.com/docker/buildx/store/storeutil"
"github.com/docker/buildx/util/platformutil" "github.com/docker/buildx/util/platformutil"
@ -45,12 +46,8 @@ func validateEndpoint(dockerCli command.Cli, ep string) (string, error) {
// validateBuildkitEndpoint validates that endpoint is a valid buildkit host // validateBuildkitEndpoint validates that endpoint is a valid buildkit host
func validateBuildkitEndpoint(ep string) (string, error) { func validateBuildkitEndpoint(ep string) (string, error) {
endpoint, err := url.Parse(ep) if err := remoteutil.IsValidEndpoint(ep); err != nil {
if err != nil { return "", err
return "", errors.Wrapf(err, "failed to parse endpoint %s", ep)
}
if endpoint.Scheme != "tcp" && endpoint.Scheme != "unix" {
return "", errors.Errorf("unrecognized url scheme %s", endpoint.Scheme)
} }
return ep, nil return ep, nil
} }

View File

@ -4,10 +4,15 @@ import (
"context" "context"
"net/url" "net/url"
"path/filepath" "path/filepath"
"regexp"
"strings" "strings"
// import connhelpers for special url schemes
_ "github.com/moby/buildkit/client/connhelper/dockercontainer"
_ "github.com/moby/buildkit/client/connhelper/kubepod"
_ "github.com/moby/buildkit/client/connhelper/ssh"
"github.com/docker/buildx/driver" "github.com/docker/buildx/driver"
util "github.com/docker/buildx/driver/remote/util"
dockerclient "github.com/docker/docker/client" dockerclient "github.com/docker/docker/client"
"github.com/pkg/errors" "github.com/pkg/errors"
) )
@ -15,8 +20,6 @@ import (
const prioritySupported = 20 const prioritySupported = 20
const priorityUnsupported = 90 const priorityUnsupported = 90
var schemeRegexp = regexp.MustCompile("^(tcp|unix)://")
func init() { func init() {
driver.Register(&factory{}) driver.Register(&factory{})
} }
@ -33,10 +36,10 @@ func (*factory) Usage() string {
} }
func (*factory) Priority(ctx context.Context, endpoint string, api dockerclient.APIClient) int { func (*factory) Priority(ctx context.Context, endpoint string, api dockerclient.APIClient) int {
if schemeRegexp.MatchString(endpoint) { if util.IsValidEndpoint(endpoint) != nil {
return prioritySupported return priorityUnsupported
} }
return priorityUnsupported return prioritySupported
} }
func (f *factory) New(ctx context.Context, cfg driver.InitConfig) (driver.Driver, error) { func (f *factory) New(ctx context.Context, cfg driver.InitConfig) (driver.Driver, error) {

View File

@ -0,0 +1,26 @@
package remote
import (
"net/url"
"github.com/pkg/errors"
)
var schemes = map[string]struct{}{
"tcp": {},
"unix": {},
"ssh": {},
"docker-container": {},
"kube-pod": {},
}
func IsValidEndpoint(ep string) error {
endpoint, err := url.Parse(ep)
if err != nil {
return errors.Wrapf(err, "failed to parse endpoint %s", ep)
}
if _, ok := schemes[endpoint.Scheme]; !ok {
return errors.Errorf("unrecognized url scheme %s", endpoint.Scheme)
}
return nil
}