mirror of
https://github.com/projectcapsule/capsule.git
synced 2026-03-04 02:30:23 +00:00
68 lines
1.4 KiB
Go
68 lines
1.4 KiB
Go
// Copyright 2020-2023 Project Capsule Authors.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package utils
|
|
|
|
import (
|
|
"path/filepath"
|
|
|
|
"k8s.io/apimachinery/pkg/util/version"
|
|
"k8s.io/client-go/kubernetes"
|
|
"k8s.io/client-go/rest"
|
|
"k8s.io/client-go/tools/clientcmd"
|
|
"k8s.io/client-go/util/homedir"
|
|
)
|
|
|
|
var versionsWithNodeFix = []string{"v1.18.18", "v1.19.10", "v1.20.6", "v1.21.0"}
|
|
|
|
func NodeWebhookSupported(currentVersion *version.Version) (bool, error) {
|
|
versions := make([]*version.Version, 0, len(versionsWithNodeFix))
|
|
|
|
for _, v := range versionsWithNodeFix {
|
|
ver, err := version.ParseGeneric(v)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
|
|
versions = append(versions, ver)
|
|
}
|
|
|
|
for _, v := range versions {
|
|
if currentVersion.Major() == v.Major() {
|
|
if currentVersion.Minor() < v.Minor() {
|
|
return false, nil
|
|
}
|
|
|
|
if currentVersion.Minor() == v.Minor() && currentVersion.Patch() < v.Patch() {
|
|
return false, nil
|
|
}
|
|
}
|
|
}
|
|
|
|
return true, nil
|
|
}
|
|
|
|
func GetK8sVersion() (*version.Version, error) {
|
|
cfg, err := rest.InClusterConfig()
|
|
if err != nil {
|
|
kubeconfig := filepath.Join(homedir.HomeDir(), ".kube", "config")
|
|
cfg, err = clientcmd.BuildConfigFromFlags("", kubeconfig)
|
|
}
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
client, err := kubernetes.NewForConfig(cfg)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
v, err := client.Discovery().ServerVersion()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return version.ParseGeneric(v.String())
|
|
}
|