driver: add context to Features interface

Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
pull/1846/head
CrazyMax 2 years ago
parent d196ac347e
commit 8c65e4fc1d
No known key found for this signature in database
GPG Key ID: 3248E46B6BB8C7F7

@ -389,7 +389,7 @@ func toSolveOpt(ctx context.Context, node builder.Node, multiDriver bool, opt Op
} }
for _, e := range opt.CacheTo { 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) 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 // set up exporters
for i, e := range opt.Exports { 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) return nil, nil, notSupported(nodeDriver, driver.OCIExporter)
} }
if e.Type == "docker" { if e.Type == "docker" {
@ -545,7 +545,7 @@ func toSolveOpt(ctx context.Context, node builder.Node, multiDriver bool, opt Op
defers = append(defers, cancel) defers = append(defers, cancel)
opt.Exports[i].Output = wrapWriteCloser(w) 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) 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 { for i, p := range opt.Platforms {
pp[i] = platforms.Format(p) 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) return nil, nil, notSupported(nodeDriver, driver.MultiPlatform)
} }
so.FrontendAttrs["platform"] = strings.Join(pp, ",") so.FrontendAttrs["platform"] = strings.Join(pp, ",")

@ -387,9 +387,8 @@ func (d *Driver) Factory() driver.Factory {
return d.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 var historyAPI bool
ctx := context.Background()
c, err := d.Client(ctx) c, err := d.Client(ctx)
if err == nil { if err == nil {
historyAPI = driver.HistoryAPISupported(ctx, c) historyAPI = driver.HistoryAPISupported(ctx, c)

@ -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 useContainerdSnapshotter bool
var historyAPI bool var historyAPI bool
ctx := context.Background()
c, err := d.Client(ctx) c, err := d.Client(ctx)
if err == nil { if err == nil {
workers, _ := c.ListWorkers(ctx) workers, _ := c.ListWorkers(ctx)

@ -60,7 +60,7 @@ type Driver interface {
Stop(ctx context.Context, force bool) error Stop(ctx context.Context, force bool) error
Rm(ctx context.Context, force, rmVolume, rmDaemon bool) error Rm(ctx context.Context, force, rmVolume, rmDaemon bool) error
Client(ctx context.Context) (*client.Client, error) Client(ctx context.Context) (*client.Client, error)
Features() map[Feature]bool Features(ctx context.Context) map[Feature]bool
IsMobyDriver() bool IsMobyDriver() bool
Config() InitConfig Config() InitConfig
} }

@ -228,9 +228,8 @@ func (d *Driver) Factory() driver.Factory {
return d.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 var historyAPI bool
ctx := context.Background()
c, err := d.Client(ctx) c, err := d.Client(ctx)
if err == nil { if err == nil {
historyAPI = driver.HistoryAPISupported(ctx, c) historyAPI = driver.HistoryAPISupported(ctx, c)

@ -161,9 +161,9 @@ func (d *cachedDriver) Client(ctx context.Context) (*client.Client, error) {
return d.client, d.err 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.featuresOnce.Do(func() {
d.features = d.Driver.Features() d.features = d.Driver.Features(ctx)
}) })
return d.features return d.features
} }

@ -87,9 +87,8 @@ func (d *Driver) Client(ctx context.Context) (*client.Client, error) {
return client.New(ctx, d.InitConfig.EndpointAddr, opts...) 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 var historyAPI bool
ctx := context.Background()
c, err := d.Client(ctx) c, err := d.Client(ctx)
if err == nil { if err == nil {
historyAPI = driver.HistoryAPISupported(ctx, c) historyAPI = driver.HistoryAPISupported(ctx, c)

Loading…
Cancel
Save