mirror of
https://github.com/mudler/luet.git
synced 2025-09-04 16:50:50 +00:00
84 lines
2.7 KiB
Go
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
|
|
}
|