1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00
moby--moby/image/compat.go
John Starks 194eaa5c0f Add os_version and os_features to Image
These fields are needed to specify the exact version of Windows that an
image can run on. They may be useful for other platforms in the future.

This also changes image.store.Create to validate that the loaded image is
supported on the current machine. This change affects Linux as well, since
it now validates the architecture and OS fields.

Signed-off-by: John Starks <jostarks@microsoft.com>
2016-04-04 13:14:57 -07:00

38 lines
1.1 KiB
Go

package image
import (
"fmt"
"runtime"
"strings"
)
func archMatches(arch string) bool {
// Special case x86_64 as an alias for amd64
return arch == runtime.GOARCH || (arch == "x86_64" && runtime.GOARCH == "amd64")
}
// ValidateOSCompatibility validates that an image with the given properties can run on this machine.
func ValidateOSCompatibility(os string, arch string, osVersion string, osFeatures []string) error {
if os != "" && os != runtime.GOOS {
return fmt.Errorf("image is for OS %s, expected %s", os, runtime.GOOS)
}
if arch != "" && !archMatches(arch) {
return fmt.Errorf("image is for architecture %s, expected %s", arch, runtime.GOARCH)
}
if osVersion != "" {
thisOSVersion := getOSVersion()
if thisOSVersion != osVersion {
return fmt.Errorf("image is for OS version '%s', expected '%s'", osVersion, thisOSVersion)
}
}
var missing []string
for _, f := range osFeatures {
if !hasOSFeature(f) {
missing = append(missing, f)
}
}
if len(missing) > 0 {
return fmt.Errorf("image requires missing OS features: %s", strings.Join(missing, ", "))
}
return nil
}