Skip to content

Instantly share code, notes, and snippets.

@hexfusion
Last active August 19, 2021 17:40
Show Gist options
  • Save hexfusion/18d2dcf5ba8fb719e6b76bda028b2b09 to your computer and use it in GitHub Desktop.
Save hexfusion/18d2dcf5ba8fb719e6b76bda028b2b09 to your computer and use it in GitHub Desktop.
func ensureDesiredUpgradeVersion(_ context.Context, clusterVersionLister configv1listers.ClusterVersionLister) (string, error){
config, err := clusterVersionLister.Get("version")
if err != nil {
return "", err
}
desiredUpdate := config.Spec.DesiredUpdate
// Wait for CVO to populate desired status if empty
//TODO ensure desired update is expected to be always populated
if desiredUpdate == nil {
return "", fmt.Errorf("cluster version desired update is not yet initialized")
}
desiredVersion := desiredUpdate.Version
desiredSemver, err := semver.Parse(desiredVersion)
if err != nil {
return "", err
}
// Wait for CVO to initialize new history if empty
if len(config.Status.History) == 0 {
return "", fmt.Errorf("cluster version history is not yet intialized" )
}
currentVersion := config.Status.History[0].Version
currentSemver, err := semver.Parse(currentVersion)
if err != nil {
return "", err
}
// verify minor upgrade is desired otherwise our job is done for now.
if ! isMinorUpgrade(currentSemver,desiredSemver) {
klog.Infof("Cluster upgrade backup controller only takes backups during minor version upgrades, current: %s, desired: %s", currentVersion, desiredVersion)
return "", fmt.Errorf("%s",metav1.StatusReasonNotFound)
}
return desiredVersion, nil
}
func isMinorUpgrade(currentVersion, desiredVersion semver.Version) bool {
if currentVersion.Minor + 1 == desiredVersion.Minor {
return true
}
return false
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment