From 232af9aa0d1446351a752a9b9b6901ed8b41f1aa Mon Sep 17 00:00:00 2001 From: Tonis Tiigi Date: Thu, 15 Oct 2020 00:07:35 -0700 Subject: [PATCH] move moby check to driver interface Driver caching masked the method detection Signed-off-by: Tonis Tiigi --- build/build.go | 19 ++++--------------- driver/docker-container/driver.go | 4 ++++ driver/docker/driver.go | 4 +++- driver/driver.go | 1 + driver/kubernetes/driver.go | 4 ++++ 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/build/build.go b/build/build.go index 08d53130..f654d621 100644 --- a/build/build.go +++ b/build/build.go @@ -280,13 +280,6 @@ func toRepoOnly(in string) (string, error) { return strings.Join(out, ","), nil } -func isDefaultMobyDriver(d driver.Driver) bool { - _, ok := d.(interface { - IsDefaultMobyDriver() - }) - return ok -} - func toSolveOpt(ctx context.Context, d driver.Driver, multiDriver bool, opt Options, pw progress.Writer, dl dockerLoadCallback) (solveOpt *client.SolveOpt, release func(), err error) { defers := make([]func(), 0, 2) releaseF := func() { @@ -338,15 +331,11 @@ func toSolveOpt(ctx context.Context, d driver.Driver, multiDriver bool, opt Opti so.FrontendAttrs["multi-platform"] = "true" } - _, isDefaultMobyDriver := d.(interface { - IsDefaultMobyDriver() - }) - switch len(opt.Exports) { case 1: // valid case 0: - if isDefaultMobyDriver && !noDefaultLoad() { + if d.IsMobyDriver() && !noDefaultLoad() { // backwards compat for docker driver only: // this ensures the build results in a docker image. opt.Exports = []client.ExportEntry{{Type: "image", Attrs: map[string]string{}}} @@ -400,7 +389,7 @@ func toSolveOpt(ctx context.Context, d driver.Driver, multiDriver bool, opt Opti } if e.Type == "docker" { if e.Output == nil { - if isDefaultMobyDriver { + if d.IsMobyDriver() { e.Type = "image" } else { w, cancel, err := dl(e.Attrs["context"]) @@ -414,7 +403,7 @@ func toSolveOpt(ctx context.Context, d driver.Driver, multiDriver bool, opt Opti return nil, nil, notSupported(d, driver.DockerExporter) } } - if e.Type == "image" && isDefaultMobyDriver { + if e.Type == "image" && d.IsMobyDriver() { opt.Exports[i].Type = "moby" if e.Attrs["push"] != "" { if ok, _ := strconv.ParseBool(e.Attrs["push"]); ok { @@ -493,7 +482,7 @@ func Build(ctx context.Context, drivers []DriverInfo, opt map[string]Options, do var noMobyDriver driver.Driver for _, d := range drivers { - if !isDefaultMobyDriver(d.Driver) { + if !d.Driver.IsMobyDriver() { noMobyDriver = d.Driver break } diff --git a/driver/docker-container/driver.go b/driver/docker-container/driver.go index 9552b003..336aee9c 100644 --- a/driver/docker-container/driver.go +++ b/driver/docker-container/driver.go @@ -32,6 +32,10 @@ type Driver struct { env []string } +func (d *Driver) IsMobyDriver() bool { + return false +} + func (d *Driver) Bootstrap(ctx context.Context, l progress.Logger) error { return progress.Wrap("[internal] booting buildkit", l, func(sub progress.SubLogger) error { _, err := d.DockerAPI.ContainerInspect(ctx, d.Name) diff --git a/driver/docker/driver.go b/driver/docker/driver.go index 44ef69d4..57c09fa3 100644 --- a/driver/docker/driver.go +++ b/driver/docker/driver.go @@ -57,4 +57,6 @@ func (d *Driver) Factory() driver.Factory { return d.factory } -func (d *Driver) IsDefaultMobyDriver() {} +func (d *Driver) IsMobyDriver() bool { + return true +} diff --git a/driver/driver.go b/driver/driver.go index 688ec835..a80bb0ac 100644 --- a/driver/driver.go +++ b/driver/driver.go @@ -57,6 +57,7 @@ type Driver interface { Rm(ctx context.Context, force bool) error Client(ctx context.Context) (*client.Client, error) Features() map[Feature]bool + IsMobyDriver() bool } func Boot(ctx context.Context, d Driver, pw progress.Writer) (*client.Client, error) { diff --git a/driver/kubernetes/driver.go b/driver/kubernetes/driver.go index 03bbe67b..b0cee868 100644 --- a/driver/kubernetes/driver.go +++ b/driver/kubernetes/driver.go @@ -44,6 +44,10 @@ type Driver struct { podChooser podchooser.PodChooser } +func (d *Driver) IsMobyDriver() bool { + return false +} + func (d *Driver) Bootstrap(ctx context.Context, l progress.Logger) error { return progress.Wrap("[internal] booting buildkit", l, func(sub progress.SubLogger) error { _, err := d.deploymentClient.Get(ctx, d.deployment.Name, metav1.GetOptions{})