@ -19,6 +19,7 @@ import (
"fmt"
"fmt"
"slices"
"slices"
"strconv"
"strconv"
"strings"
"k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/kubernetes/scheme"
@ -39,11 +40,13 @@ var (
DefaultVersionSet = allKnownVersions ( )
DefaultVersionSet = allKnownVersions ( )
// DefaultCapabilities is the default set of capabilities.
// DefaultCapabilities is the default set of capabilities.
version = fmt . Sprintf ( "v%s.%s.0" , k8sVersionMajor , k8sVersionMinor )
DefaultCapabilities = & Capabilities {
DefaultCapabilities = & Capabilities {
KubeVersion : KubeVersion {
KubeVersion : KubeVersion {
Version : fmt . Sprintf ( "v%s.%s.0" , k8sVersionMajor , k8sVersionMinor ) ,
Version : version ,
Major : k8sVersionMajor ,
normalizedVersion : version ,
Minor : k8sVersionMinor ,
Major : k8sVersionMajor ,
Minor : k8sVersionMinor ,
} ,
} ,
APIVersions : DefaultVersionSet ,
APIVersions : DefaultVersionSet ,
HelmVersion : helmversion . Get ( ) ,
HelmVersion : helmversion . Get ( ) ,
@ -70,15 +73,22 @@ func (capabilities *Capabilities) Copy() *Capabilities {
// KubeVersion is the Kubernetes version.
// KubeVersion is the Kubernetes version.
type KubeVersion struct {
type KubeVersion struct {
Version string // Kubernetes version
Version string // Full version (e.g., v1.33.4-gke.1245000)
Major string // Kubernetes major version
normalizedVersion string // Normalized for constraint checking (e.g., v1.33.4)
Minor string // Kubernetes minor version
Major string // Kubernetes major version
Minor string // Kubernetes minor version
}
}
// String implements fmt.Stringer
// String implements fmt.Stringer.
func ( kv * KubeVersion ) String ( ) string { return kv . Version }
// Returns the normalized version used for constraint checking.
func ( kv * KubeVersion ) String ( ) string {
if kv . normalizedVersion != "" {
return kv . normalizedVersion
}
return kv . Version
}
// GitVersion returns the Kubernetes version string.
// GitVersion returns the full Kubernetes version string.
//
//
// Deprecated: use KubeVersion.Version.
// Deprecated: use KubeVersion.Version.
func ( kv * KubeVersion ) GitVersion ( ) string { return kv . Version }
func ( kv * KubeVersion ) GitVersion ( ) string { return kv . Version }
@ -91,10 +101,21 @@ func ParseKubeVersion(version string) (*KubeVersion, error) {
if err != nil {
if err != nil {
return nil , err
return nil , err
}
}
// Preserve original input (e.g., v1.33.4-gke.1245000)
gitVersion := version
if ! strings . HasPrefix ( version , "v" ) {
gitVersion = "v" + version
}
// Normalize for constraint checking (strips all suffixes)
normalizedVer := "v" + sv . String ( )
return & KubeVersion {
return & KubeVersion {
Version : "v" + sv . String ( ) ,
Version : gitVersion ,
Major : strconv . FormatUint ( uint64 ( sv . Major ( ) ) , 10 ) ,
normalizedVersion : normalizedVer ,
Minor : strconv . FormatUint ( uint64 ( sv . Minor ( ) ) , 10 ) ,
Major : strconv . FormatUint ( uint64 ( sv . Major ( ) ) , 10 ) ,
Minor : strconv . FormatUint ( uint64 ( sv . Minor ( ) ) , 10 ) ,
} , nil
} , nil
}
}