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

Windows: Disable VM cloning for TP5 image

The Windows TP5 image is not compatible with the Hyper-V isolated
container clone feature. Detect old images and pass a flag specifying that
clone should not be enabled.

Signed-off-by: John Starks <jostarks@microsoft.com>
This commit is contained in:
John Starks 2016-06-24 15:24:06 -07:00
parent e602225160
commit 8e34322253
3 changed files with 25 additions and 9 deletions

View file

@ -85,6 +85,13 @@ func (clnt *client) Create(containerID string, spec Spec, options ...CreateOptio
configuration.HvRuntime = &hcsshim.HvRuntime{ configuration.HvRuntime = &hcsshim.HvRuntime{
ImagePath: spec.Windows.HvRuntime.ImagePath, ImagePath: spec.Windows.HvRuntime.ImagePath,
} }
// Images with build verison < 14350 don't support running with clone, but
// Windows cannot automatically detect this. Explicitly block cloning in this
// case.
if build := buildFromVersion(spec.Platform.OSVersion); build > 0 && build < 14350 {
configuration.HvRuntime.SkipTemplate = true
}
} }
if configuration.HvPartition { if configuration.HvPartition {

View file

@ -2,8 +2,6 @@ package libcontainerd
import ( import (
"io" "io"
"strconv"
"strings"
"github.com/Microsoft/hcsshim" "github.com/Microsoft/hcsshim"
) )
@ -38,12 +36,7 @@ func fixStdinBackspaceBehavior(w io.WriteCloser, osversion string, tty bool) io.
if !tty { if !tty {
return w return w
} }
v := strings.Split(osversion, ".") if build := buildFromVersion(osversion); build == 0 || build >= 14350 {
if len(v) < 3 {
return w
}
if build, err := strconv.Atoi(v[2]); err != nil || build >= 14350 {
return w return w
} }

View file

@ -1,6 +1,9 @@
package libcontainerd package libcontainerd
import "strings" import (
"strconv"
"strings"
)
// setupEnvironmentVariables convert a string array of environment variables // setupEnvironmentVariables convert a string array of environment variables
// into a map as required by the HCS. Source array is in format [v1=k1] [v2=k2] etc. // into a map as required by the HCS. Source array is in format [v1=k1] [v2=k2] etc.
@ -19,3 +22,16 @@ func setupEnvironmentVariables(a []string) map[string]string {
func (s *ServicingOption) Apply(interface{}) error { func (s *ServicingOption) Apply(interface{}) error {
return nil return nil
} }
// buildFromVersion takes an image version string and returns the Windows build
// number. It returns 0 if the build number is not present.
func buildFromVersion(osver string) int {
v := strings.Split(osver, ".")
if len(v) < 3 {
return 0
}
if build, err := strconv.Atoi(v[2]); err == nil {
return build
}
return 0
}