...

Source file src/edge-infra.dev/pkg/edge/api/utils/client.go

Documentation: edge-infra.dev/pkg/edge/api/utils

     1  package utils
     2  
     3  import (
     4  	"os"
     5  
     6  	"github.com/rs/zerolog/log"
     7  	"k8s.io/apimachinery/pkg/runtime/schema"
     8  	"k8s.io/client-go/kubernetes"
     9  	"k8s.io/client-go/kubernetes/scheme"
    10  	"k8s.io/client-go/rest"
    11  	"k8s.io/client-go/tools/clientcmd"
    12  )
    13  
    14  func NewClient(config *rest.Config, gv *schema.GroupVersion) (rest.Interface, *kubernetes.Clientset, error) {
    15  	// creates in-cluster config if available
    16  	restClient, err := GetRestClientForConfig(config, gv)
    17  	if err != nil {
    18  		return nil, nil, err
    19  	}
    20  
    21  	clientset, err := kubernetes.NewForConfig(config)
    22  	if err != nil {
    23  		return nil, nil, err
    24  	}
    25  
    26  	return restClient, clientset, nil
    27  }
    28  
    29  func GetKubeConfig(masterconfig string) (*rest.Config, error) {
    30  	config, err := rest.InClusterConfig()
    31  	if err != nil {
    32  		log.Warn().Err(err).Msg("failed to load in-cluster config, attempting to use local kubeconfig")
    33  
    34  		// create out-of-cluster config using the masterconfig that is passed in
    35  		config, err = clientcmd.BuildConfigFromFlags("", masterconfig)
    36  		if err != nil {
    37  			return nil, err
    38  		}
    39  	}
    40  	return config, err
    41  }
    42  
    43  func NewRestClient(kubeconfig *rest.Config, gv *schema.GroupVersion) (rest.Interface, error) {
    44  	restClient, err := GetRestClientForConfig(kubeconfig, gv)
    45  	if err != nil {
    46  		return nil, err
    47  	}
    48  
    49  	return restClient, nil
    50  }
    51  
    52  func NewKubeClient(kubeconfig string) (*kubernetes.Clientset, error) {
    53  	config, err := GetRestConfig(kubeconfig)
    54  	if err != nil {
    55  		return nil, err
    56  	}
    57  
    58  	clientset, err := kubernetes.NewForConfig(config)
    59  	if err != nil {
    60  		return nil, err
    61  	}
    62  
    63  	return clientset, nil
    64  }
    65  
    66  func GetRestConfig(kubeconfig string) (*rest.Config, error) {
    67  	tempConfig, err := os.CreateTemp("", "kubeconfig-")
    68  	if err != nil {
    69  		return nil, err
    70  	}
    71  
    72  	defer os.Remove(tempConfig.Name())
    73  
    74  	if _, err := tempConfig.WriteString(kubeconfig); err != nil {
    75  		return nil, err
    76  	}
    77  
    78  	return clientcmd.BuildConfigFromFlags("", tempConfig.Name())
    79  }
    80  
    81  func GetRestClientForConfig(c *rest.Config, gv *schema.GroupVersion) (rest.Interface, error) {
    82  	config := *c
    83  	config.ContentConfig.GroupVersion = gv
    84  	config.APIPath = "/apis"
    85  	config.NegotiatedSerializer = scheme.Codecs.WithoutConversion()
    86  	config.UserAgent = rest.DefaultKubernetesUserAgent()
    87  	return rest.RESTClientFor(&config)
    88  }
    89  

View as plain text