github.com/GoogleCloudPlatform/compute-image-tools/cli_tools@v0.0.0-20240516224744-de2dabc4ed1b/gce_windows_upgrade/upgrader/upgrade_paths.go (about) 1 package upgrader 2 3 const ( 4 versionWindows2008r2 = "windows-2008r2" 5 versionWindows2012r2 = "windows-2012r2" 6 versionWindows2016 = "windows-2016" 7 versionWindows2019 = "windows-2019" 8 versionWindows2022 = "windows-2022" 9 10 licenseForWindows2008r2 = "projects/windows-cloud/global/licenses/windows-server-2008-r2-dc" 11 licenseForWindows2012r2 = "projects/windows-cloud/global/licenses/windows-server-2012-r2-dc" 12 licenseForWindows2016 = "projects/windows-cloud/global/licenses/windows-server-2016-dc" 13 licenseForWindows2019 = "projects/windows-cloud/global/licenses/windows-server-2019-dc" 14 15 licenseForWindows2012r2Upgraded = "projects/windows-cloud/global/licenses/windows-server-2012-r2-dc-in-place-upgrade" 16 licenseForWindows2016Upgraded = "projects/windows-cloud/global/licenses/windows-server-2016-dc-in-place-upgrade" 17 licenseForWindows2019Upgraded = "projects/windows-cloud/global/licenses/windows-server-2019-dc-in-place-upgrade" 18 licenseForWindows2022Upgraded = "projects/windows-cloud/global/licenses/windows-server-2022-dc-in-place-upgrade" 19 20 versionStringForWindows2008r2 = "Windows Server 2008 R2 Datacenter" 21 versionStringForWindows2012r2 = "Windows Server 2012 R2 Datacenter" 22 versionStringForWindows2016 = "Windows Server 2016 Datacenter" 23 versionStringForWindows2019 = "Windows Server 2019 Datacenter" 24 versionStringForWindows2022 = "Windows Server 2022 Datacenter" 25 ) 26 27 // SupportedVersions shows all supported OS versions of the tool. 28 var ( 29 SupportedVersions = []string{ 30 versionWindows2008r2, 31 versionWindows2012r2, 32 versionWindows2016, 33 versionWindows2019, 34 versionWindows2022, 35 } 36 37 expectedCurrentLicenseForSourceOS = map[string][]string{ 38 versionWindows2008r2: {licenseForWindows2008r2}, 39 versionWindows2012r2: {licenseForWindows2012r2, licenseForWindows2012r2Upgraded}, 40 versionWindows2016: {licenseForWindows2016, licenseForWindows2016Upgraded}, 41 versionWindows2019: {licenseForWindows2019, licenseForWindows2019Upgraded}, 42 } 43 44 licenseToAddForTargetOS = map[string]string{ 45 versionWindows2012r2: licenseForWindows2012r2Upgraded, 46 versionWindows2016: licenseForWindows2016Upgraded, 47 versionWindows2019: licenseForWindows2019Upgraded, 48 versionWindows2022: licenseForWindows2022Upgraded, 49 } 50 51 versionString = map[string]string{ 52 versionWindows2008r2: versionStringForWindows2008r2, 53 versionWindows2012r2: versionStringForWindows2012r2, 54 versionWindows2016: versionStringForWindows2016, 55 versionWindows2019: versionStringForWindows2019, 56 versionWindows2022: versionStringForWindows2022, 57 } 58 59 installFolderForTargetOS = map[string]string{ 60 versionWindows2012r2: "*2012_R2_64Bit*", 61 versionWindows2016: "*2016_64Bit*", 62 versionWindows2019: "*2019_64Bit*", 63 versionWindows2022: "*2022_64Bit*", 64 } 65 ) 66 67 type upgradePath struct { 68 enabled bool 69 expectedCurrentLicense []string 70 licenseToAdd string 71 expectedCurrentVersion string 72 expectedNewVersion string 73 installFolder string 74 } 75 76 func initUpgradePath(u map[string]map[string]*upgradePath) map[string]map[string]*upgradePath { 77 for sourceOS, targets := range u { 78 for targetOS, upgradePath := range targets { 79 upgradePath.expectedCurrentLicense = expectedCurrentLicenseForSourceOS[sourceOS] 80 upgradePath.licenseToAdd = licenseToAddForTargetOS[targetOS] 81 upgradePath.expectedCurrentVersion = versionString[sourceOS] 82 upgradePath.expectedNewVersion = versionString[targetOS] 83 upgradePath.installFolder = installFolderForTargetOS[targetOS] 84 } 85 } 86 return u 87 } 88 89 var upgradePaths = initUpgradePath(map[string]map[string]*upgradePath{ 90 versionWindows2008r2: { 91 versionWindows2012r2: {enabled: true}, 92 }, 93 versionWindows2012r2: { 94 versionWindows2016: {enabled: true}, 95 versionWindows2019: {enabled: true}, 96 versionWindows2022: {enabled: true}, 97 }, 98 versionWindows2016: { 99 versionWindows2019: {enabled: true}, 100 versionWindows2022: {enabled: true}, 101 }, 102 versionWindows2019: { 103 versionWindows2022: {enabled: true}, 104 }, 105 }) 106 107 func isSupportedOSVersion(v string) bool { 108 for _, sv := range SupportedVersions { 109 if sv == v { 110 return true 111 } 112 } 113 return false 114 } 115 116 func isSupportedUpgradePath(sourceOS, targetOS string) bool { 117 targets, ok := upgradePaths[sourceOS] 118 if !ok { 119 return false 120 } 121 upgradePath, ok := targets[targetOS] 122 if !ok { 123 return false 124 } 125 return upgradePath.enabled 126 }