penguin/monok8s

k8s image for Mono Gateway Dev Kit

clitools/pkg/kube/clients.go

raw ยท 1768 bytes

package kube

import (
	"fmt"

	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"
	monov1alpha1 "undecided.project/monok8s/pkg/apis/monok8s/v1alpha1"

	"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
}

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 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
}