cli_tools/gce_windows_upgrade/upgrader/upgrade_paths.go (111 lines of code) (raw):
package upgrader
const (
versionWindows2008r2 = "windows-2008r2"
versionWindows2012r2 = "windows-2012r2"
versionWindows2016 = "windows-2016"
versionWindows2019 = "windows-2019"
versionWindows2022 = "windows-2022"
licenseForWindows2008r2 = "projects/windows-cloud/global/licenses/windows-server-2008-r2-dc"
licenseForWindows2012r2 = "projects/windows-cloud/global/licenses/windows-server-2012-r2-dc"
licenseForWindows2016 = "projects/windows-cloud/global/licenses/windows-server-2016-dc"
licenseForWindows2019 = "projects/windows-cloud/global/licenses/windows-server-2019-dc"
licenseForWindows2012r2Upgraded = "projects/windows-cloud/global/licenses/windows-server-2012-r2-dc-in-place-upgrade"
licenseForWindows2016Upgraded = "projects/windows-cloud/global/licenses/windows-server-2016-dc-in-place-upgrade"
licenseForWindows2019Upgraded = "projects/windows-cloud/global/licenses/windows-server-2019-dc-in-place-upgrade"
licenseForWindows2022Upgraded = "projects/windows-cloud/global/licenses/windows-server-2022-dc-in-place-upgrade"
versionStringForWindows2008r2 = "Windows Server 2008 R2 Datacenter"
versionStringForWindows2012r2 = "Windows Server 2012 R2 Datacenter"
versionStringForWindows2016 = "Windows Server 2016 Datacenter"
versionStringForWindows2019 = "Windows Server 2019 Datacenter"
versionStringForWindows2022 = "Windows Server 2022 Datacenter"
)
// SupportedVersions shows all supported OS versions of the tool.
var (
SupportedVersions = []string{
versionWindows2008r2,
versionWindows2012r2,
versionWindows2016,
versionWindows2019,
versionWindows2022,
}
expectedCurrentLicenseForSourceOS = map[string][]string{
versionWindows2008r2: {licenseForWindows2008r2},
versionWindows2012r2: {licenseForWindows2012r2, licenseForWindows2012r2Upgraded},
versionWindows2016: {licenseForWindows2016, licenseForWindows2016Upgraded},
versionWindows2019: {licenseForWindows2019, licenseForWindows2019Upgraded},
}
licenseToAddForTargetOS = map[string]string{
versionWindows2012r2: licenseForWindows2012r2Upgraded,
versionWindows2016: licenseForWindows2016Upgraded,
versionWindows2019: licenseForWindows2019Upgraded,
versionWindows2022: licenseForWindows2022Upgraded,
}
versionString = map[string]string{
versionWindows2008r2: versionStringForWindows2008r2,
versionWindows2012r2: versionStringForWindows2012r2,
versionWindows2016: versionStringForWindows2016,
versionWindows2019: versionStringForWindows2019,
versionWindows2022: versionStringForWindows2022,
}
installFolderForTargetOS = map[string]string{
versionWindows2012r2: "*2012_R2_64Bit*",
versionWindows2016: "*2016_64Bit*",
versionWindows2019: "*2019_64Bit*",
versionWindows2022: "*2022_64Bit*",
}
)
type upgradePath struct {
enabled bool
expectedCurrentLicense []string
licenseToAdd string
expectedCurrentVersion string
expectedNewVersion string
installFolder string
}
func initUpgradePath(u map[string]map[string]*upgradePath) map[string]map[string]*upgradePath {
for sourceOS, targets := range u {
for targetOS, upgradePath := range targets {
upgradePath.expectedCurrentLicense = expectedCurrentLicenseForSourceOS[sourceOS]
upgradePath.licenseToAdd = licenseToAddForTargetOS[targetOS]
upgradePath.expectedCurrentVersion = versionString[sourceOS]
upgradePath.expectedNewVersion = versionString[targetOS]
upgradePath.installFolder = installFolderForTargetOS[targetOS]
}
}
return u
}
var upgradePaths = initUpgradePath(map[string]map[string]*upgradePath{
versionWindows2008r2: {
versionWindows2012r2: {enabled: true},
},
versionWindows2012r2: {
versionWindows2016: {enabled: true},
versionWindows2019: {enabled: true},
versionWindows2022: {enabled: true},
},
versionWindows2016: {
versionWindows2019: {enabled: true},
versionWindows2022: {enabled: true},
},
versionWindows2019: {
versionWindows2022: {enabled: true},
},
})
func isSupportedOSVersion(v string) bool {
for _, sv := range SupportedVersions {
if sv == v {
return true
}
}
return false
}
func isSupportedUpgradePath(sourceOS, targetOS string) bool {
targets, ok := upgradePaths[sourceOS]
if !ok {
return false
}
upgradePath, ok := targets[targetOS]
if !ok {
return false
}
return upgradePath.enabled
}