Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: microsoft/hcsshim
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v0.10.0
Choose a base ref
...
head repository: microsoft/hcsshim
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v0.11.0
Choose a head ref
  • 1 commit
  • 2 files changed
  • 1 contributor

Commits on Sep 6, 2023

  1. Add support for platform compatibility check for windows (#1821) (#1878)

    (cherry picked from commit 640a560)
    
    Signed-off-by: Kirtana Ashok <kiashok@microsoft.com>
    kiashok authored Sep 6, 2023
    Copy the full SHA
    750e11b View commit details
Showing with 103 additions and 0 deletions.
  1. +35 −0 osversion/platform_compat_windows.go
  2. +68 −0 osversion/platform_compat_windows_test.go
35 changes: 35 additions & 0 deletions osversion/platform_compat_windows.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package osversion

// List of stable ABI compliant ltsc releases
// Note: List must be sorted in ascending order
var compatLTSCReleases = []uint16{
V21H2Server,
}

// CheckHostAndContainerCompat checks if given host and container
// OS versions are compatible.
// It includes support for stable ABI compliant versions as well.
// Every release after WS 2022 will support the previous ltsc
// container image. Stable ABI is in preview mode for windows 11 client.
// Refer: https://learn.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-2022%2Cwindows-10#windows-server-host-os-compatibility
func CheckHostAndContainerCompat(host, ctr OSVersion) bool {
// check major minor versions of host and guest
if host.MajorVersion != ctr.MajorVersion ||
host.MinorVersion != ctr.MinorVersion {
return false
}

// If host is < WS 2022, exact version match is required
if host.Build < V21H2Server {
return host.Build == ctr.Build
}

var supportedLtscRelease uint16
for i := len(compatLTSCReleases) - 1; i >= 0; i-- {
if host.Build >= compatLTSCReleases[i] {
supportedLtscRelease = compatLTSCReleases[i]
break
}
}
return ctr.Build >= supportedLtscRelease && ctr.Build <= host.Build
}
68 changes: 68 additions & 0 deletions osversion/platform_compat_windows_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package osversion

import (
"testing"
)

// Test the platform compatibility of the different
// OS Versions considering two ltsc container image
// versions (ltsc2019, ltsc2022)
func Test_PlatformCompat(t *testing.T) {
for testName, tc := range map[string]struct {
hostOs uint16
ctrOs uint16
shouldRun bool
}{
"RS5Host_ltsc2019": {
hostOs: RS5,
ctrOs: RS5,
shouldRun: true,
},
"RS5Host_ltsc2022": {
hostOs: RS5,
ctrOs: V21H2Server,
shouldRun: false,
},
"WS2022Host_ltsc2019": {
hostOs: V21H2Server,
ctrOs: RS5,
shouldRun: false,
},
"WS2022Host_ltsc2022": {
hostOs: V21H2Server,
ctrOs: V21H2Server,
shouldRun: true,
},
"Wind11Host_ltsc2019": {
hostOs: V22H2Win11,
ctrOs: RS5,
shouldRun: false,
},
"Wind11Host_ltsc2022": {
hostOs: V22H2Win11,
ctrOs: V21H2Server,
shouldRun: true,
},
} {
// Check if ltsc2019/ltsc2022 guest images are compatible on
// the given host OS versions
//
hostOSVersion := OSVersion{
MajorVersion: 10,
MinorVersion: 0,
Build: tc.hostOs,
}
ctrOSVersion := OSVersion{
MajorVersion: 10,
MinorVersion: 0,
Build: tc.ctrOs,
}
if CheckHostAndContainerCompat(hostOSVersion, ctrOSVersion) != tc.shouldRun {
var expectedResultStr string
if !tc.shouldRun {
expectedResultStr = " NOT"
}
t.Fatalf("Failed %v: host %v should%s be able to run guest %v", testName, tc.hostOs, expectedResultStr, tc.ctrOs)
}
}
}