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