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  }