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

system: add back lcow validation function

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
Tonis Tiigi 2018-06-27 11:53:20 -07:00
parent 0b50d6c315
commit f099771665
5 changed files with 34 additions and 3 deletions

View file

@ -24,6 +24,7 @@ import (
"github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/pkg/ioutils"
"github.com/docker/docker/pkg/progress" "github.com/docker/docker/pkg/progress"
"github.com/docker/docker/pkg/streamformatter" "github.com/docker/docker/pkg/streamformatter"
"github.com/docker/docker/pkg/system"
"github.com/docker/go-units" "github.com/docker/go-units"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
@ -77,6 +78,9 @@ func newImageBuildOptions(ctx context.Context, r *http.Request) (*types.ImageBui
if err != nil { if err != nil {
return nil, err return nil, err
} }
if err := system.ValidatePlatform(sp); err != nil {
return nil, err
}
options.Platform = &sp options.Platform = &sp
} }
} }

View file

@ -16,6 +16,7 @@ import (
"github.com/docker/docker/errdefs" "github.com/docker/docker/errdefs"
"github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/pkg/ioutils"
"github.com/docker/docker/pkg/streamformatter" "github.com/docker/docker/pkg/streamformatter"
"github.com/docker/docker/pkg/system"
"github.com/docker/docker/registry" "github.com/docker/docker/registry"
specs "github.com/opencontainers/image-spec/specs-go/v1" specs "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors" "github.com/pkg/errors"
@ -49,6 +50,9 @@ func (s *imageRouter) postImagesCreate(ctx context.Context, w http.ResponseWrite
if err != nil { if err != nil {
return err return err
} }
if err := system.ValidatePlatform(sp); err != nil {
return err
}
platform = &sp platform = &sp
} }
} }

View file

@ -165,6 +165,9 @@ func initializeStage(d dispatchRequest, cmd *instructions.Stage) error {
if err != nil { if err != nil {
return errors.Wrapf(err, "failed to parse platform %s", v) return errors.Wrapf(err, "failed to parse platform %s", v)
} }
if err := system.ValidatePlatform(p); err != nil {
return err
}
platform = &p platform = &p
} }

View file

@ -11,6 +11,7 @@ import (
"reflect" "reflect"
"runtime" "runtime"
"github.com/containerd/containerd/platforms"
"github.com/docker/distribution" "github.com/docker/distribution"
"github.com/docker/distribution/reference" "github.com/docker/distribution/reference"
"github.com/docker/docker/image" "github.com/docker/docker/image"
@ -421,7 +422,11 @@ func checkCompatibleOS(imageOS string) error {
if runtime.GOOS != "windows" && imageOS == "windows" { if runtime.GOOS != "windows" && imageOS == "windows" {
return fmt.Errorf("cannot load %s image on %s", imageOS, runtime.GOOS) return fmt.Errorf("cannot load %s image on %s", imageOS, runtime.GOOS)
} }
// Finally, check the image OS is supported for the platform.
// TODO(@arm64b): Leave this sanity check to the containerd code in the future p, err := platforms.Parse(imageOS)
return nil if err != nil {
return err
}
return system.ValidatePlatform(p)
} }

View file

@ -3,6 +3,9 @@ package system // import "github.com/docker/docker/pkg/system"
import ( import (
"runtime" "runtime"
"strings" "strings"
specs "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors"
) )
// IsOSSupported determines if an operating system is supported by the host // IsOSSupported determines if an operating system is supported by the host
@ -15,3 +18,15 @@ func IsOSSupported(os string) bool {
} }
return false return false
} }
// ValidatePlatform determines if a platform structure is valid.
// TODO This is a temporary windows-only function, should be replaced by
// comparison of worker capabilities
func ValidatePlatform(platform specs.Platform) error {
if runtime.GOOS == "windows" {
if !(platform.OS == runtime.GOOS || (LCOWSupported() && platform.OS == "linux")) {
return errors.Errorf("unsupported os %s", platform.OS)
}
}
return nil
}