Files
monok8s/clitools/pkg/kube/clients.go

51 lines
1.5 KiB
Go

package kube
import (
"fmt"
monov1alpha1 "undecided.project/monok8s/pkg/apis/monok8s/v1alpha1"
apiextensionsclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
"k8s.io/apimachinery/pkg/runtime"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/client-go/dynamic"
kubernetes "k8s.io/client-go/kubernetes"
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest"
)
type Clients struct {
Config *rest.Config
Kubernetes kubernetes.Interface
Dynamic dynamic.Interface
APIExtensions apiextensionsclientset.Interface
RESTClientGetter genericclioptions.RESTClientGetter
}
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)
}
return &Clients{Config: cfg, Kubernetes: kubeClient, Dynamic: dyn, APIExtensions: ext, RESTClientGetter: flags}, nil
}
func Scheme() *runtime.Scheme {
scheme := runtime.NewScheme()
utilruntime.Must(clientgoscheme.AddToScheme(scheme))
utilruntime.Must(monov1alpha1.AddToScheme(scheme))
return scheme
}