1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

LCOW: Rework after 33454 merged which refactored daemon/builder interface

Signed-off-by: John Howard <jhoward@microsoft.com>
This commit is contained in:
John Howard 2017-06-20 10:34:55 -07:00
parent b21d9ab595
commit 3a09b56a10
5 changed files with 18 additions and 14 deletions

View file

@ -43,7 +43,7 @@ type Backend interface {
// ContainerCreateWorkdir creates the workdir // ContainerCreateWorkdir creates the workdir
ContainerCreateWorkdir(containerID string) error ContainerCreateWorkdir(containerID string) error
CreateImage(config []byte, parent string) (Image, error) CreateImage(config []byte, parent string, platform string) (Image, error)
ImageCacheBuilder ImageCacheBuilder
} }
@ -100,6 +100,6 @@ type Image interface {
type ReleaseableLayer interface { type ReleaseableLayer interface {
Release() error Release() error
Mount() (string, error) Mount() (string, error)
Commit() (ReleaseableLayer, error) Commit(platform string) (ReleaseableLayer, error)
DiffID() layer.DiffID DiffID() layer.DiffID
} }

View file

@ -65,7 +65,7 @@ func (b *Builder) commitContainer(dispatchState *dispatchState, id string, conta
} }
func (b *Builder) exportImage(state *dispatchState, imageMount *imageMount, runConfig *container.Config) error { func (b *Builder) exportImage(state *dispatchState, imageMount *imageMount, runConfig *container.Config) error {
newLayer, err := imageMount.Layer().Commit() newLayer, err := imageMount.Layer().Commit(b.platform)
if err != nil { if err != nil {
return err return err
} }
@ -93,7 +93,7 @@ func (b *Builder) exportImage(state *dispatchState, imageMount *imageMount, runC
return errors.Wrap(err, "failed to encode image config") return errors.Wrap(err, "failed to encode image config")
} }
exportedImage, err := b.docker.CreateImage(config, state.imageID) exportedImage, err := b.docker.CreateImage(config, state.imageID, parentImage.OS)
if err != nil { if err != nil {
return errors.Wrapf(err, "failed to export image") return errors.Wrapf(err, "failed to export image")
} }

View file

@ -78,7 +78,7 @@ func (m *MockBackend) MakeImageCache(cacheFrom []string, platform string) builde
return nil return nil
} }
func (m *MockBackend) CreateImage(config []byte, parent string) (builder.Image, error) { func (m *MockBackend) CreateImage(config []byte, parent string, platform string) (builder.Image, error) {
return nil, nil return nil, nil
} }
@ -121,7 +121,7 @@ func (l *mockLayer) Mount() (string, error) {
return "mountPath", nil return "mountPath", nil
} }
func (l *mockLayer) Commit() (builder.ReleaseableLayer, error) { func (l *mockLayer) Commit(string) (builder.ReleaseableLayer, error) {
return nil, nil return nil, nil
} }

View file

@ -2,6 +2,7 @@ package daemon
import ( import (
"io" "io"
"runtime"
"github.com/Sirupsen/logrus" "github.com/Sirupsen/logrus"
"github.com/docker/distribution/reference" "github.com/docker/distribution/reference"
@ -39,7 +40,7 @@ func (rl *releaseableLayer) Mount() (string, error) {
return rl.rwLayer.Mount("") return rl.rwLayer.Mount("")
} }
func (rl *releaseableLayer) Commit() (builder.ReleaseableLayer, error) { func (rl *releaseableLayer) Commit(platform string) (builder.ReleaseableLayer, error) {
var chainID layer.ChainID var chainID layer.ChainID
if rl.roLayer != nil { if rl.roLayer != nil {
chainID = rl.roLayer.ChainID() chainID = rl.roLayer.ChainID()
@ -50,7 +51,7 @@ func (rl *releaseableLayer) Commit() (builder.ReleaseableLayer, error) {
return nil, err return nil, err
} }
newLayer, err := rl.layerStore.Register(stream, chainID) newLayer, err := rl.layerStore.Register(stream, chainID, layer.Platform(platform))
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -139,7 +140,7 @@ func (daemon *Daemon) pullForBuilder(ctx context.Context, name string, authConfi
// leaking of layers. // leaking of layers.
func (daemon *Daemon) GetImageAndReleasableLayer(ctx context.Context, refOrID string, opts backend.GetImageAndLayerOptions) (builder.Image, builder.ReleaseableLayer, error) { func (daemon *Daemon) GetImageAndReleasableLayer(ctx context.Context, refOrID string, opts backend.GetImageAndLayerOptions) (builder.Image, builder.ReleaseableLayer, error) {
if refOrID == "" { if refOrID == "" {
layer, err := newReleasableLayerForImage(nil, daemon.layerStore) layer, err := newReleasableLayerForImage(nil, daemon.stores[opts.Platform].layerStore)
return nil, layer, err return nil, layer, err
} }
@ -163,19 +164,22 @@ func (daemon *Daemon) GetImageAndReleasableLayer(ctx context.Context, refOrID st
// CreateImage creates a new image by adding a config and ID to the image store. // CreateImage creates a new image by adding a config and ID to the image store.
// This is similar to LoadImage() except that it receives JSON encoded bytes of // This is similar to LoadImage() except that it receives JSON encoded bytes of
// an image instead of a tar archive. // an image instead of a tar archive.
func (daemon *Daemon) CreateImage(config []byte, parent string) (builder.Image, error) { func (daemon *Daemon) CreateImage(config []byte, parent string, platform string) (builder.Image, error) {
id, err := daemon.imageStore.Create(config) if platform == "" {
platform = runtime.GOOS
}
id, err := daemon.stores[platform].imageStore.Create(config)
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "failed to create image") return nil, errors.Wrapf(err, "failed to create image")
} }
if parent != "" { if parent != "" {
if err := daemon.imageStore.SetParent(id, image.ID(parent)); err != nil { if err := daemon.stores[platform].imageStore.SetParent(id, image.ID(parent)); err != nil {
return nil, errors.Wrapf(err, "failed to set parent %s", parent) return nil, errors.Wrapf(err, "failed to set parent %s", parent)
} }
} }
return daemon.imageStore.Get(id) return daemon.stores[platform].imageStore.Get(id)
} }
// IDMappings returns uid/gid mappings for the builder // IDMappings returns uid/gid mappings for the builder

View file

@ -170,7 +170,7 @@ func (daemon *Daemon) Commit(name string, c *backend.ContainerCommitConfig) (str
} }
} }
l, err := daemon.stores[container.Platform].layerStore.Register(rwTar, rootFS.ChainID(), layer.Platform(container.Platform)) l, err := daemon.stores[container.Platform].layerStore.Register(rwTar, parent.RootFS.ChainID(), layer.Platform(container.Platform))
if err != nil { if err != nil {
return "", err return "", err
} }