From 8c65e4fc1dbd4cd0f961081f7ffc4869d96d3c6c Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Fri, 26 May 2023 11:29:46 +0200 Subject: [PATCH] driver: add context to Features interface Signed-off-by: CrazyMax --- build/build.go | 8 ++++---- driver/docker-container/driver.go | 3 +-- driver/docker/driver.go | 3 +-- driver/driver.go | 2 +- driver/kubernetes/driver.go | 3 +-- driver/manager.go | 4 ++-- driver/remote/driver.go | 3 +-- 7 files changed, 11 insertions(+), 15 deletions(-) diff --git a/build/build.go b/build/build.go index 4fd3cb11..ae027b4b 100644 --- a/build/build.go +++ b/build/build.go @@ -389,7 +389,7 @@ func toSolveOpt(ctx context.Context, node builder.Node, multiDriver bool, opt Op } for _, e := range opt.CacheTo { - if e.Type != "inline" && !nodeDriver.Features()[driver.CacheExport] { + if e.Type != "inline" && !nodeDriver.Features(ctx)[driver.CacheExport] { return nil, nil, notSupported(nodeDriver, driver.CacheExport) } } @@ -527,7 +527,7 @@ func toSolveOpt(ctx context.Context, node builder.Node, multiDriver bool, opt Op // set up exporters for i, e := range opt.Exports { - if e.Type == "oci" && !nodeDriver.Features()[driver.OCIExporter] { + if e.Type == "oci" && !nodeDriver.Features(ctx)[driver.OCIExporter] { return nil, nil, notSupported(nodeDriver, driver.OCIExporter) } if e.Type == "docker" { @@ -545,7 +545,7 @@ func toSolveOpt(ctx context.Context, node builder.Node, multiDriver bool, opt Op defers = append(defers, cancel) opt.Exports[i].Output = wrapWriteCloser(w) } - } else if !nodeDriver.Features()[driver.DockerExporter] { + } else if !nodeDriver.Features(ctx)[driver.DockerExporter] { return nil, nil, notSupported(nodeDriver, driver.DockerExporter) } } @@ -614,7 +614,7 @@ func toSolveOpt(ctx context.Context, node builder.Node, multiDriver bool, opt Op for i, p := range opt.Platforms { pp[i] = platforms.Format(p) } - if len(pp) > 1 && !nodeDriver.Features()[driver.MultiPlatform] { + if len(pp) > 1 && !nodeDriver.Features(ctx)[driver.MultiPlatform] { return nil, nil, notSupported(nodeDriver, driver.MultiPlatform) } so.FrontendAttrs["platform"] = strings.Join(pp, ",") diff --git a/driver/docker-container/driver.go b/driver/docker-container/driver.go index 71469f57..f2f1ad54 100644 --- a/driver/docker-container/driver.go +++ b/driver/docker-container/driver.go @@ -387,9 +387,8 @@ func (d *Driver) Factory() driver.Factory { return d.factory } -func (d *Driver) Features() map[driver.Feature]bool { +func (d *Driver) Features(ctx context.Context) map[driver.Feature]bool { var historyAPI bool - ctx := context.Background() c, err := d.Client(ctx) if err == nil { historyAPI = driver.HistoryAPISupported(ctx, c) diff --git a/driver/docker/driver.go b/driver/docker/driver.go index 599e9b51..3b6f16e2 100644 --- a/driver/docker/driver.go +++ b/driver/docker/driver.go @@ -58,10 +58,9 @@ func (d *Driver) Client(ctx context.Context) (*client.Client, error) { })) } -func (d *Driver) Features() map[driver.Feature]bool { +func (d *Driver) Features(ctx context.Context) map[driver.Feature]bool { var useContainerdSnapshotter bool var historyAPI bool - ctx := context.Background() c, err := d.Client(ctx) if err == nil { workers, _ := c.ListWorkers(ctx) diff --git a/driver/driver.go b/driver/driver.go index b6ca5275..aa378058 100644 --- a/driver/driver.go +++ b/driver/driver.go @@ -60,7 +60,7 @@ type Driver interface { Stop(ctx context.Context, force bool) error Rm(ctx context.Context, force, rmVolume, rmDaemon bool) error Client(ctx context.Context) (*client.Client, error) - Features() map[Feature]bool + Features(ctx context.Context) map[Feature]bool IsMobyDriver() bool Config() InitConfig } diff --git a/driver/kubernetes/driver.go b/driver/kubernetes/driver.go index d8fa25b9..be8ef697 100644 --- a/driver/kubernetes/driver.go +++ b/driver/kubernetes/driver.go @@ -228,9 +228,8 @@ func (d *Driver) Factory() driver.Factory { return d.factory } -func (d *Driver) Features() map[driver.Feature]bool { +func (d *Driver) Features(ctx context.Context) map[driver.Feature]bool { var historyAPI bool - ctx := context.Background() c, err := d.Client(ctx) if err == nil { historyAPI = driver.HistoryAPISupported(ctx, c) diff --git a/driver/manager.go b/driver/manager.go index 13826cc8..0db8254f 100644 --- a/driver/manager.go +++ b/driver/manager.go @@ -161,9 +161,9 @@ func (d *cachedDriver) Client(ctx context.Context) (*client.Client, error) { return d.client, d.err } -func (d *cachedDriver) Features() map[Feature]bool { +func (d *cachedDriver) Features(ctx context.Context) map[Feature]bool { d.featuresOnce.Do(func() { - d.features = d.Driver.Features() + d.features = d.Driver.Features(ctx) }) return d.features } diff --git a/driver/remote/driver.go b/driver/remote/driver.go index 58058612..e27897ef 100644 --- a/driver/remote/driver.go +++ b/driver/remote/driver.go @@ -87,9 +87,8 @@ func (d *Driver) Client(ctx context.Context) (*client.Client, error) { return client.New(ctx, d.InitConfig.EndpointAddr, opts...) } -func (d *Driver) Features() map[driver.Feature]bool { +func (d *Driver) Features(ctx context.Context) map[driver.Feature]bool { var historyAPI bool - ctx := context.Background() c, err := d.Client(ctx) if err == nil { historyAPI = driver.HistoryAPISupported(ctx, c)