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:
parent
e602225160
commit
8e34322253
3 changed files with 25 additions and 9 deletions
|
@ -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 {
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue