github.com/netdata/go.d.plugin@v0.58.1/pkg/k8sclient/k8sclient.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package k8sclient 4 5 import ( 6 "errors" 7 "os" 8 "path/filepath" 9 10 "k8s.io/client-go/kubernetes" 11 "k8s.io/client-go/kubernetes/fake" 12 "k8s.io/client-go/rest" 13 "k8s.io/client-go/tools/clientcmd" 14 15 _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" 16 ) 17 18 const ( 19 EnvFakeClient = "KUBERNETES_FAKE_CLIENTSET" 20 defaultUserAgent = "Netdata/k8s-client" 21 ) 22 23 func New(userAgent string) (kubernetes.Interface, error) { 24 if userAgent == "" { 25 userAgent = defaultUserAgent 26 } 27 28 switch { 29 case os.Getenv(EnvFakeClient) != "": 30 return fake.NewSimpleClientset(), nil 31 case os.Getenv("KUBERNETES_SERVICE_HOST") != "" && os.Getenv("KUBERNETES_SERVICE_PORT") != "": 32 return newInCluster(userAgent) 33 default: 34 return newOutOfCluster(userAgent) 35 } 36 } 37 38 func newInCluster(userAgent string) (*kubernetes.Clientset, error) { 39 config, err := rest.InClusterConfig() 40 if err != nil { 41 return nil, err 42 } 43 44 config.UserAgent = userAgent 45 46 return kubernetes.NewForConfig(config) 47 } 48 49 func newOutOfCluster(userAgent string) (*kubernetes.Clientset, error) { 50 home := homeDir() 51 if home == "" { 52 return nil, errors.New("couldn't find home directory") 53 } 54 55 path := filepath.Join(home, ".kube", "config") 56 config, err := clientcmd.BuildConfigFromFlags("", path) 57 if err != nil { 58 return nil, err 59 } 60 61 config.UserAgent = userAgent 62 63 return kubernetes.NewForConfig(config) 64 } 65 66 func homeDir() string { 67 if h := os.Getenv("HOME"); h != "" { 68 return h 69 } 70 return os.Getenv("USERPROFILE") // windows 71 }