mirror of
https://github.com/1Panel-dev/KubePi.git
synced 2025-10-29 01:32:38 +08:00
71 lines
1.6 KiB
Go
71 lines
1.6 KiB
Go
package kubernetes
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
v1Cluster "github.com/KubeOperator/ekko/internal/model/v1/cluster"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/version"
|
|
"k8s.io/client-go/kubernetes"
|
|
"k8s.io/client-go/rest"
|
|
"strings"
|
|
)
|
|
|
|
type Interface interface {
|
|
Ping() error
|
|
Version() (*version.Info, error)
|
|
Client() (*kubernetes.Clientset, error)
|
|
}
|
|
|
|
type Kubernetes struct {
|
|
*v1Cluster.Cluster
|
|
}
|
|
|
|
func NewKubernetes(cluster v1Cluster.Cluster) Interface {
|
|
return &Kubernetes{Cluster: &cluster}
|
|
}
|
|
|
|
func (k *Kubernetes) Client() (*kubernetes.Clientset, error) {
|
|
if k.Spec.Connect.Direction == "forward" {
|
|
kubeConf := &rest.Config{
|
|
Host: k.Spec.Connect.Forward.ApiServer,
|
|
}
|
|
if len(k.CaCertificate.CertData) > 0 {
|
|
kubeConf.CAData = k.CaCertificate.CertData
|
|
} else {
|
|
kubeConf.Insecure = true
|
|
}
|
|
switch k.Spec.Authentication.Mode {
|
|
case strings.ToLower("bearer"):
|
|
kubeConf.BearerToken = k.Spec.Authentication.BearerToken
|
|
case strings.ToLower("certificate"):
|
|
kubeConf.TLSClientConfig.CertData = k.Spec.Authentication.Certificate.CertData
|
|
kubeConf.TLSClientConfig.KeyData=k.Spec.Authentication.Certificate.KeyData
|
|
}
|
|
return kubernetes.NewForConfig(kubeConf)
|
|
|
|
}
|
|
return nil, errors.New("")
|
|
}
|
|
|
|
func (k *Kubernetes) Version() (*version.Info, error) {
|
|
client, err := k.Client()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return client.ServerVersion()
|
|
|
|
}
|
|
|
|
func (k *Kubernetes) Ping() error {
|
|
client, err := k.Client()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, err = client.CoreV1().Namespaces().List(context.TODO(), metav1.ListOptions{})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|