package v1alpha1 import ( "fmt" "k8s.io/apimachinery/pkg/util/version" ) // SupportedMinorVersionIncrement represents the minor version skew for kubernetes version upgrades. const SupportedMinorVersionIncrement = 1 // ValidateVersionSkew validates Kubernetes version skew between valid non-nil versions. func ValidateVersionSkew(oldVersion, newVersion *version.Version) error { if newVersion.LessThan(oldVersion) { return fmt.Errorf("kubernetes version downgrade is not supported (%s) -> (%s)", oldVersion, newVersion) } newVersionMinor := newVersion.Minor() oldVersionMinor := oldVersion.Minor() minorVersionDifference := int(newVersionMinor) - int(oldVersionMinor) if minorVersionDifference < 0 || minorVersionDifference > SupportedMinorVersionIncrement { return fmt.Errorf("only +%d minor version skew is supported, minor version skew detected %v", SupportedMinorVersionIncrement, minorVersionDifference) } return nil }