Merge pull request #31078 from 8tomat8/master

fix: k8s version parsing to match original
pull/31089/head
Robert Sirchia 2 months ago committed by GitHub
commit a42b76421b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -20,11 +20,11 @@ import (
"slices" "slices"
"strconv" "strconv"
"github.com/Masterminds/semver/v3"
"k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/kubernetes/scheme"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
k8sversion "k8s.io/apimachinery/pkg/util/version"
helmversion "helm.sh/helm/v4/internal/version" helmversion "helm.sh/helm/v4/internal/version"
) )
@ -85,14 +85,16 @@ func (kv *KubeVersion) GitVersion() string { return kv.Version }
// ParseKubeVersion parses kubernetes version from string // ParseKubeVersion parses kubernetes version from string
func ParseKubeVersion(version string) (*KubeVersion, error) { func ParseKubeVersion(version string) (*KubeVersion, error) {
sv, err := semver.NewVersion(version) // Based on the original k8s version parser.
// https://github.com/kubernetes/kubernetes/blob/b266ac2c3e42c2c4843f81e20213d2b2f43e450a/staging/src/k8s.io/apimachinery/pkg/util/version/version.go#L137
sv, err := k8sversion.ParseGeneric(version)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return &KubeVersion{ return &KubeVersion{
Version: "v" + sv.String(), Version: "v" + sv.String(),
Major: strconv.FormatUint(sv.Major(), 10), Major: strconv.FormatUint(uint64(sv.Major()), 10),
Minor: strconv.FormatUint(sv.Minor(), 10), Minor: strconv.FormatUint(uint64(sv.Minor()), 10),
}, nil }, nil
} }

@ -82,3 +82,19 @@ func TestParseKubeVersion(t *testing.T) {
t.Errorf("Expected parsed KubeVersion.Minor to be 16, got %q", kv.Minor) t.Errorf("Expected parsed KubeVersion.Minor to be 16, got %q", kv.Minor)
} }
} }
func TestParseKubeVersionSuffix(t *testing.T) {
kv, err := ParseKubeVersion("v1.28+")
if err != nil {
t.Errorf("Expected v1.28+ to parse successfully")
}
if kv.Version != "v1.28" {
t.Errorf("Expected parsed KubeVersion.Version to be v1.28, got %q", kv.String())
}
if kv.Major != "1" {
t.Errorf("Expected parsed KubeVersion.Major to be 1, got %q", kv.Major)
}
if kv.Minor != "28" {
t.Errorf("Expected parsed KubeVersion.Minor to be 28, got %q", kv.Minor)
}
}

Loading…
Cancel
Save