Files
luet/vendor/github.com/genuinetools/img/client/controller.go
Ettore Di Giacinto 7b25a54653 Update gomod and vendor
2021-01-22 16:54:19 +01:00

84 lines
2.7 KiB
Go

package client
import (
"fmt"
"path/filepath"
"github.com/containerd/containerd/remotes/docker"
"github.com/moby/buildkit/cache/remotecache"
inlineremotecache "github.com/moby/buildkit/cache/remotecache/inline"
localremotecache "github.com/moby/buildkit/cache/remotecache/local"
registryremotecache "github.com/moby/buildkit/cache/remotecache/registry"
"github.com/moby/buildkit/control"
"github.com/moby/buildkit/frontend"
"github.com/moby/buildkit/frontend/dockerfile/builder"
"github.com/moby/buildkit/frontend/gateway"
"github.com/moby/buildkit/frontend/gateway/forwarder"
"github.com/moby/buildkit/solver/bboltcachestorage"
"github.com/moby/buildkit/worker"
"github.com/moby/buildkit/worker/base"
)
func (c *Client) createController() error {
sm, err := c.getSessionManager()
if err != nil {
return fmt.Errorf("creating session manager failed: %v", err)
}
// Create the worker opts.
opt, err := c.createWorkerOpt(true)
if err != nil {
return fmt.Errorf("creating worker opt failed: %v", err)
}
// Create the new worker.
w, err := base.NewWorker(opt)
if err != nil {
return fmt.Errorf("creating worker failed: %v", err)
}
// Create the worker controller.
wc := &worker.Controller{}
if err := wc.Add(w); err != nil {
return fmt.Errorf("adding worker to worker controller failed: %v", err)
}
// Add the frontends.
frontends := map[string]frontend.Frontend{}
frontends["dockerfile.v0"] = forwarder.NewGatewayForwarder(wc, builder.Build)
frontends["gateway.v0"] = gateway.NewGatewayFrontend(wc)
// Create the cache storage
cacheStorage, err := bboltcachestorage.NewStore(filepath.Join(c.root, "cache.db"))
if err != nil {
return err
}
remoteCacheExporterFuncs := map[string]remotecache.ResolveCacheExporterFunc{
"inline": inlineremotecache.ResolveCacheExporterFunc(),
"local": localremotecache.ResolveCacheExporterFunc(sm),
"registry": registryremotecache.ResolveCacheExporterFunc(sm, docker.ConfigureDefaultRegistries()),
}
remoteCacheImporterFuncs := map[string]remotecache.ResolveCacheImporterFunc{
"local": localremotecache.ResolveCacheImporterFunc(sm),
"registry": registryremotecache.ResolveCacheImporterFunc(sm, opt.ContentStore, docker.ConfigureDefaultRegistries()),
}
// Create the controller.
controller, err := control.NewController(control.Opt{
SessionManager: sm,
WorkerController: wc,
Frontends: frontends,
ResolveCacheExporterFuncs: remoteCacheExporterFuncs,
ResolveCacheImporterFuncs: remoteCacheImporterFuncs,
CacheKeyStorage: cacheStorage,
})
if err != nil {
return fmt.Errorf("creating new controller failed: %v", err)
}
// Set the controller for the client.
c.controller = controller
return nil
}