Files
monok8s/clitools/pkg/kube/clients.go
2026-04-20 02:51:02 +08:00

72 lines
2.0 KiB
Go

package kube
import (
"fmt"
monov1alpha1 "example.com/monok8s/pkg/apis/monok8s/v1alpha1"
monoclientset "example.com/monok8s/pkg/generated/clientset/versioned"
apiextensionsclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
kubernetes "k8s.io/client-go/kubernetes"
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/client-go/dynamic"
"k8s.io/client-go/rest"
)
type Clients struct {
Config *rest.Config
Kubernetes kubernetes.Interface
Dynamic dynamic.Interface
APIExtensions apiextensionsclientset.Interface
RESTClientGetter genericclioptions.RESTClientGetter
MonoKS monoclientset.Interface
}
func NewClients(flags *genericclioptions.ConfigFlags) (*Clients, error) {
cfg, err := flags.ToRESTConfig()
if err != nil {
return nil, fmt.Errorf("build rest config: %w", err)
}
kubeClient, err := kubernetes.NewForConfig(cfg)
if err != nil {
return nil, fmt.Errorf("build kubernetes client: %w", err)
}
dyn, err := dynamic.NewForConfig(cfg)
if err != nil {
return nil, fmt.Errorf("build dynamic client: %w", err)
}
ext, err := apiextensionsclientset.NewForConfig(cfg)
if err != nil {
return nil, fmt.Errorf("build apiextensions client: %w", err)
}
mono, err := monoclientset.NewForConfig(cfg)
if err != nil {
return nil, fmt.Errorf("build monok8s client: %w", err)
}
return &Clients{
Config: cfg,
Kubernetes: kubeClient,
Dynamic: dyn,
APIExtensions: ext,
RESTClientGetter: flags,
MonoKS: mono,
}, nil
}
func NewClientsFromKubeconfig(kubeconfigPath string) (*Clients, error) {
flags := genericclioptions.NewConfigFlags(false)
flags.KubeConfig = &kubeconfigPath
return NewClients(flags)
}
func Scheme() *runtime.Scheme {
scheme := runtime.NewScheme()
utilruntime.Must(clientgoscheme.AddToScheme(scheme))
utilruntime.Must(monov1alpha1.AddToScheme(scheme))
return scheme
}