2323package k8sutil
2424
2525import (
26- "net "
26+ "fmt "
2727 "os"
2828
29+ "github.com/arangodb/kube-arangodb/pkg/util"
30+ "k8s.io/client-go/tools/clientcmd"
31+
2932 apiextensionsclient "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
3033 "k8s.io/client-go/kubernetes"
3134 "k8s.io/client-go/rest"
3235)
3336
37+ const Kubeconfig util.EnvironmentVariable = "KUBECONFIG"
38+
39+ // NewKubeConfig loads config from KUBECONFIG or as incluster
40+ func NewKubeConfig () (* rest.Config , error ) {
41+ // If KUBECONFIG is defined use this variable
42+ if kubeconfig , ok := Kubeconfig .Lookup (); ok {
43+ return clientcmd .BuildConfigFromFlags ("" , kubeconfig )
44+ }
45+
46+ // Try to load incluster config
47+ if cfg , err := rest .InClusterConfig (); err == nil {
48+ return cfg , nil
49+ } else if err != rest .ErrNotInCluster {
50+ return nil , err
51+ }
52+
53+ // At the end try to use default path
54+ home , err := os .UserHomeDir ()
55+ if err != nil {
56+ return nil , err
57+ }
58+
59+ return clientcmd .BuildConfigFromFlags ("" , fmt .Sprintf ("%s/.kube/config" , home ))
60+ }
61+
3462// NewKubeClient creates a new k8s client
3563func NewKubeClient () (kubernetes.Interface , error ) {
36- cfg , err := InClusterConfig ()
64+ cfg , err := NewKubeConfig ()
3765 if err != nil {
3866 return nil , maskAny (err )
3967 }
@@ -55,7 +83,7 @@ func MustNewKubeClient() kubernetes.Interface {
5583
5684// NewKubeExtClient creates a new k8s api extensions client
5785func NewKubeExtClient () (apiextensionsclient.Interface , error ) {
58- cfg , err := InClusterConfig ()
86+ cfg , err := NewKubeConfig ()
5987 if err != nil {
6088 return nil , maskAny (err )
6189 }
@@ -65,24 +93,3 @@ func NewKubeExtClient() (apiextensionsclient.Interface, error) {
6593 }
6694 return c , nil
6795}
68-
69- // InClusterConfig loads the environment into a rest config.
70- func InClusterConfig () (* rest.Config , error ) {
71- // Work around https://github.com/kubernetes/kubernetes/issues/40973
72- // See https://github.com/coreos/etcd-operator/issues/731#issuecomment-283804819
73- if len (os .Getenv ("KUBERNETES_SERVICE_HOST" )) == 0 {
74- addrs , err := net .LookupHost ("kubernetes.default.svc" )
75- if err != nil {
76- return nil , maskAny (err )
77- }
78- os .Setenv ("KUBERNETES_SERVICE_HOST" , addrs [0 ])
79- }
80- if len (os .Getenv ("KUBERNETES_SERVICE_PORT" )) == 0 {
81- os .Setenv ("KUBERNETES_SERVICE_PORT" , "443" )
82- }
83- cfg , err := rest .InClusterConfig ()
84- if err != nil {
85- return nil , maskAny (err )
86- }
87- return cfg , nil
88- }
0 commit comments