Skip to content

Commit

Permalink
llbsolver: clean up platforms validation function
Browse files Browse the repository at this point in the history
Signed-off-by: Tonis Tiigi <[email protected]>
  • Loading branch information
tonistiigi committed Jun 3, 2020
1 parent f834357 commit aa8cbe1
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 20 deletions.
4 changes: 1 addition & 3 deletions solver/llbsolver/bridge.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import (
"github.com/moby/buildkit/util/tracing"
"github.com/moby/buildkit/worker"
digest "github.com/opencontainers/go-digest"
specs "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
)
Expand All @@ -37,7 +36,6 @@ type llbBridge struct {
resolveCacheImporterFuncs map[string]remotecache.ResolveCacheImporterFunc
cms map[string]solver.CacheManager
cmsMu sync.Mutex
platforms []specs.Platform
sm *session.Manager
}

Expand Down Expand Up @@ -89,7 +87,7 @@ func (b *llbBridge) loadResult(ctx context.Context, def *pb.Definition, cacheImp
}
dpc := &detectPrunedCacheID{}

edge, err := Load(def, dpc.Load, ValidateEntitlements(ent), WithCacheSources(cms), RuntimePlatforms(b.platforms), WithValidateCaps())
edge, err := Load(def, dpc.Load, ValidateEntitlements(ent), WithCacheSources(cms), NormalizeRuntimePlatforms(), WithValidateCaps())
if err != nil {
return nil, errors.Wrap(err, "failed to load LLB")
}
Expand Down
20 changes: 14 additions & 6 deletions solver/llbsolver/ops/exec_binfmt.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,17 @@ var qemuArchMap = map[string]string{
}

type emulator struct {
path string
path string
idmap *idtools.IdentityMapping
}

func (e *emulator) Mount(ctx context.Context, readonly bool) (snapshot.Mountable, error) {
return &staticEmulatorMount{path: e.path}, nil
return &staticEmulatorMount{path: e.path, idmap: e.idmap}, nil
}

type staticEmulatorMount struct {
path string
path string
idmap *idtools.IdentityMapping
}

func (m *staticEmulatorMount) Mount() ([]mount.Mount, func() error, error) {
Expand All @@ -62,7 +64,13 @@ func (m *staticEmulatorMount) Mount() ([]mount.Mount, func() error, error) {
if err := os.Chmod(filepath.Join(tmpdir, qemuMountName), 0555); err != nil {
return nil, nil, errors.WithStack(err)
}
if err := os.Chown(filepath.Join(tmpdir, qemuMountName), 0, 0); err != nil {
var uid, gid int
if m.idmap != nil {
root := m.idmap.RootPair()
uid = root.UID
gid = root.GID
}
if err := os.Chown(filepath.Join(tmpdir, qemuMountName), uid, gid); err != nil {
return nil, nil, errors.WithStack(err)
}

Expand All @@ -77,10 +85,10 @@ func (m *staticEmulatorMount) Mount() ([]mount.Mount, func() error, error) {

}
func (m *staticEmulatorMount) IdentityMapping() *idtools.IdentityMapping {
return nil
return m.idmap
}

func getEmulator(p *pb.Platform) (*emulator, error) {
func getEmulator(p *pb.Platform, idmap *idtools.IdentityMapping) (*emulator, error) {
all := binfmt_misc.SupportedPlatforms(false)
m := make(map[string]struct{}, len(all))

Expand Down
10 changes: 0 additions & 10 deletions solver/llbsolver/solver.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import (
"github.com/moby/buildkit/util/progress"
"github.com/moby/buildkit/worker"
digest "github.com/opencontainers/go-digest"
specs "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors"
"golang.org/x/sync/errgroup"
)
Expand All @@ -43,7 +42,6 @@ type Solver struct {
eachWorker func(func(worker.Worker) error) error
frontends map[string]frontend.Frontend
resolveCacheImporterFuncs map[string]remotecache.ResolveCacheImporterFunc
platforms []specs.Platform
gatewayForwarder *controlgateway.GatewayForwarder
sm *session.Manager
entitlements []string
Expand All @@ -61,13 +59,6 @@ func New(wc *worker.Controller, f map[string]frontend.Frontend, cache solver.Cac
entitlements: ents,
}

// executing is currently only allowed on default worker
w, err := wc.GetDefault()
if err != nil {
return nil, err
}
s.platforms = w.Platforms(false)

s.solver = solver.NewSolver(solver.SolverOpt{
ResolveOpFunc: s.resolver(),
DefaultCache: cache,
Expand All @@ -93,7 +84,6 @@ func (s *Solver) Bridge(b solver.Builder) frontend.FrontendLLBBridge {
eachWorker: s.eachWorker,
resolveCacheImporterFuncs: s.resolveCacheImporterFuncs,
cms: map[string]solver.CacheManager{},
platforms: s.platforms,
sm: s.sm,
}
}
Expand Down
2 changes: 1 addition & 1 deletion solver/llbsolver/vertex.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ func WithCacheSources(cms []solver.CacheManager) LoadOpt {
}
}

func RuntimePlatforms(p []specs.Platform) LoadOpt {
func NormalizeRuntimePlatforms() LoadOpt {
var defaultPlatform *pb.Platform
return func(op *pb.Op, _ *pb.OpMetadata, opt *solver.VertexOptions) error {
if op.Platform == nil {
Expand Down

0 comments on commit aa8cbe1

Please sign in to comment.