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 }