From 381dc8fb436cbdf43fbf0cd2be2d1c8bd4fbae60 Mon Sep 17 00:00:00 2001 From: Tibor Vass Date: Tue, 15 Dec 2020 06:53:32 +0000 Subject: [PATCH] driver: do not insert "platform" as driver-opt Addresses https://github.com/docker/setup-buildx-action/issues/45 Simple repro: ``` $ buildx create --platform linux/amd64 --use $ buildx build - < --- commands/util.go | 19 ++----------------- driver/kubernetes/factory.go | 10 +--------- driver/manager.go | 5 ++++- 3 files changed, 7 insertions(+), 27 deletions(-) diff --git a/commands/util.go b/commands/util.go index 804c351a159..d6e230ebcef 100644 --- a/commands/util.go +++ b/commands/util.go @@ -4,7 +4,6 @@ import ( "context" "os" "path/filepath" - "strings" "github.com/docker/buildx/build" "github.com/docker/buildx/driver" @@ -220,7 +219,7 @@ func driversForNodeGroup(ctx context.Context, dockerCli command.Cli, ng *store.N } } - d, err := driver.GetDriver(ctx, "buildx_buildkit_"+n.Name, f, dockerapi, dockerCli.ConfigFile(), kcc, n.Flags, n.ConfigFile, assignDriverOptsByDriverInfo(n.DriverOpts, di), contextPathHash) + d, err := driver.GetDriver(ctx, "buildx_buildkit_"+n.Name, f, dockerapi, dockerCli.ConfigFile(), kcc, n.Flags, n.ConfigFile, n.DriverOpts, n.Platforms, contextPathHash) if err != nil { di.Err = err return nil @@ -238,20 +237,6 @@ func driversForNodeGroup(ctx context.Context, dockerCli command.Cli, ng *store.N return dis, nil } -// pass platform as driver opts to provide for some drive, like kubernetes -func assignDriverOptsByDriverInfo(opts map[string]string, driveInfo build.DriverInfo) map[string]string { - m := map[string]string{} - - if len(driveInfo.Platform) > 0 { - m["platform"] = strings.Join(platformutil.Format(driveInfo.Platform), ",") - } - - for key := range opts { - m[key] = opts[key] - } - return m -} - // clientForEndpoint returns a docker client for an endpoint func clientForEndpoint(dockerCli command.Cli, name string) (dockerclient.APIClient, error) { list, err := dockerCli.ContextStore().List() @@ -353,7 +338,7 @@ func getDefaultDrivers(ctx context.Context, dockerCli command.Cli, defaultOnly b } } - d, err := driver.GetDriver(ctx, "buildx_buildkit_default", nil, dockerCli.Client(), dockerCli.ConfigFile(), nil, nil, "", nil, contextPathHash) + d, err := driver.GetDriver(ctx, "buildx_buildkit_default", nil, dockerCli.Client(), dockerCli.ConfigFile(), nil, nil, "", nil, nil, contextPathHash) if err != nil { return nil, err } diff --git a/driver/kubernetes/factory.go b/driver/kubernetes/factory.go index 3e7e4cea378..de69f374808 100644 --- a/driver/kubernetes/factory.go +++ b/driver/kubernetes/factory.go @@ -9,7 +9,6 @@ import ( "github.com/docker/buildx/driver/bkimage" "github.com/docker/buildx/driver/kubernetes/manifest" "github.com/docker/buildx/driver/kubernetes/podchooser" - "github.com/docker/buildx/util/platformutil" dockerclient "github.com/docker/docker/client" "github.com/pkg/errors" "k8s.io/client-go/kubernetes" @@ -71,6 +70,7 @@ func (f *factory) New(ctx context.Context, cfg driver.InitConfig) (driver.Driver Replicas: 1, BuildkitFlags: cfg.BuildkitFlags, Rootless: false, + Platforms: cfg.Platforms, } loadbalance := LoadbalanceSticky imageOverride := "" @@ -91,14 +91,6 @@ func (f *factory) New(ctx context.Context, cfg driver.InitConfig) (driver.Driver return nil, err } deploymentOpt.Image = bkimage.DefaultRootlessImage - case "platform": - if v != "" { - platforms, err := platformutil.Parse(strings.Split(v, ",")) - if err != nil { - return nil, err - } - deploymentOpt.Platforms = platforms - } case "nodeselector": kvs := strings.Split(strings.Trim(v, `"`), ",") s := map[string]string{} diff --git a/driver/manager.go b/driver/manager.go index f573431f3d9..5a0ccd6671b 100644 --- a/driver/manager.go +++ b/driver/manager.go @@ -11,6 +11,7 @@ import ( dockerclient "github.com/docker/docker/client" "github.com/moby/buildkit/client" + specs "github.com/opencontainers/image-spec/specs-go/v1" "github.com/pkg/errors" ) @@ -55,6 +56,7 @@ type InitConfig struct { ConfigFile string DriverOpts map[string]string Auth Auth + Platforms []specs.Platform // ContextPathHash can be used for determining pods in the driver instance ContextPathHash string } @@ -101,7 +103,7 @@ func GetFactory(name string, instanceRequired bool) Factory { return nil } -func GetDriver(ctx context.Context, name string, f Factory, api dockerclient.APIClient, auth Auth, kcc KubeClientConfig, flags []string, config string, do map[string]string, contextPathHash string) (Driver, error) { +func GetDriver(ctx context.Context, name string, f Factory, api dockerclient.APIClient, auth Auth, kcc KubeClientConfig, flags []string, config string, do map[string]string, platforms []specs.Platform, contextPathHash string) (Driver, error) { ic := InitConfig{ DockerAPI: api, KubeClientConfig: kcc, @@ -110,6 +112,7 @@ func GetDriver(ctx context.Context, name string, f Factory, api dockerclient.API ConfigFile: config, DriverOpts: do, Auth: auth, + Platforms: platforms, ContextPathHash: contextPathHash, } if f == nil {