-
Notifications
You must be signed in to change notification settings - Fork 0
/
client.go
107 lines (91 loc) · 2.57 KB
/
client.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package kubeclient
import (
"os"
"path/filepath"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
)
func GetClientConfig() (clientcmd.ClientConfig, error) {
loadingRules := clientcmd.NewDefaultClientConfigLoadingRules()
// if you want to change the loading rules (which files in which order), you can do so here
configOverrides := &clientcmd.ConfigOverrides{}
// if you want to change override values or bind them to flags, there are methods to help you
return clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, configOverrides), nil
}
// GetClient creates a new k8s client object from the currently configured kubecontext
func GetClient() (*kubernetes.Clientset, error) {
config, err := rest.InClusterConfig()
if err != nil {
config, err = clientcmd.BuildConfigFromFlags("", getKubeConfig())
if err != nil {
return nil, err
}
}
return kubernetes.NewForConfigOrDie(config), nil
}
func GetClientOrDie() *kubernetes.Clientset {
client, err := GetClient()
if err != nil {
panic(err)
}
return client
}
func GetKubeConfigOrInCluster() (*rest.Config, error) {
config, err := rest.InClusterConfig()
if err != nil {
config, err = clientcmd.BuildConfigFromFlags("", getKubeConfig())
if err != nil {
return nil, err
}
}
return config, nil
}
func GetKubeConfigFile(filepath string) (*rest.Config, error) {
config, err := clientcmd.BuildConfigFromFlags("", filepath)
if err != nil {
return nil, err
}
return config, nil
}
func GetClientWithConfigFromFile(filepath string) (*kubernetes.Clientset, error) {
config, err := GetKubeConfigFile(filepath)
if err != nil {
return nil, err
}
return GetClientWithConfig(config)
}
func GetClientWithConfig(kubeconfigFile *rest.Config) (*kubernetes.Clientset, error) {
// create the clientset
clientset, err := kubernetes.NewForConfig(kubeconfigFile)
if err != nil {
return nil, err
}
return clientset, nil
}
// GetKubeConfig returns the currently configured kubeconfig file location
// or error if non has been configured
func GetKubeConfig() string {
return getKubeConfig()
}
func getKubeConfig() string {
if kubeConfig := getEnv("KUBECONFIG", ""); kubeConfig != "" {
return kubeConfig
}
if home := homeDir(); home != "" {
return filepath.Join(home, ".kube", "config")
}
panic("Missing kubeconfig configuration ...")
}
func homeDir() string {
if h := os.Getenv("HOME"); h != "" {
return h
}
return os.Getenv("USERPROFILE") // windows
}
func getEnv(key, fallback string) string {
if value, ok := os.LookupEnv(key); ok {
return value
}
return fallback
}