Skip to content

Commit 565fe30

Browse files
authored
[Feature] Accept Kubeconfig ENV (#543)
1 parent 8661fb2 commit 565fe30

34 files changed

+98
-91
lines changed

main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ func newOperatorConfigAndDeps(id, namespace, name string) (operator.Config, oper
275275
if err != nil {
276276
return operator.Config{}, operator.Dependencies{}, maskAny(fmt.Errorf("Failed to create k8b api extensions client: %s", err))
277277
}
278-
crCli, err := client.NewInCluster()
278+
crCli, err := client.NewClient()
279279
if err != nil {
280280
return operator.Config{}, operator.Dependencies{}, maskAny(fmt.Errorf("Failed to created versioned client: %s", err))
281281
}

pkg/client/client.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@ var (
3434
maskAny = errors.WithStack
3535
)
3636

37-
// MustNewInCluster creates an in-cluster client, or panics
37+
// MustNewClient creates an client, or panics
3838
// when a failure is detected.
39-
func MustNewInCluster() versioned.Interface {
40-
cli, err := NewInCluster()
39+
func MustNewClient() versioned.Interface {
40+
cli, err := NewClient()
4141
if err != nil {
4242
panic(err)
4343
}
@@ -54,10 +54,10 @@ func MustNew(cfg *rest.Config) versioned.Interface {
5454
return cli
5555
}
5656

57-
// NewInCluster creates an in-cluster client, or returns an error
57+
// NewClient creates an client, or returns an error
5858
// when a failure is detected.
59-
func NewInCluster() (versioned.Interface, error) {
60-
cfg, err := k8sutil.InClusterConfig()
59+
func NewClient() (versioned.Interface, error) {
60+
cfg, err := k8sutil.NewKubeConfig()
6161
if err != nil {
6262
return nil, maskAny(err)
6363
}

pkg/deployment/resources/servicemonitor.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func (r *Resources) EnsureMonitoringClient() (*clientv1.MonitoringV1Client, erro
5757

5858
// Make a client:
5959
var restConfig *rest.Config
60-
restConfig, err := k8sutil.InClusterConfig()
60+
restConfig, err := k8sutil.NewKubeConfig()
6161
if err != nil {
6262
return nil, maskAny(err)
6363
}

pkg/util/k8sutil/client.go

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,45 @@
2323
package k8sutil
2424

2525
import (
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
3563
func 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
5785
func 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-
}

reboot.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,7 @@ func cmdRebootRun(cmd *cobra.Command, args []string) {
386386
cliLog.Fatal().Err(err).Msg("Failed to create Kubernetes client")
387387
}
388388

389-
extcli, err := extclient.NewInCluster()
389+
extcli, err := extclient.NewClient()
390390
if err != nil {
391391
cliLog.Fatal().Err(err).Msg("failed to create arango extension client")
392392
}

tests/annotations_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ func ensureAnnotations(t *testing.T, client kubernetes.Interface, depl *api.Aran
184184

185185
func TestAnnotations(t *testing.T) {
186186
longOrSkip(t)
187-
c := client.MustNewInCluster()
187+
c := client.MustNewClient()
188188
kubecli := mustNewKubeClient(t)
189189
ns := getNamespace(t)
190190

tests/auth_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ import (
4141
// with default authentication (on) using a generated JWT secret.
4242
func TestAuthenticationSingleDefaultSecret(t *testing.T) {
4343
longOrSkip(t)
44-
c := client.MustNewInCluster()
44+
c := client.MustNewClient()
4545
kubecli := mustNewKubeClient(t)
4646
ns := getNamespace(t)
4747

@@ -89,7 +89,7 @@ func TestAuthenticationSingleDefaultSecret(t *testing.T) {
8989
// with default authentication (on) using a user created JWT secret.
9090
func TestAuthenticationSingleCustomSecret(t *testing.T) {
9191
longOrSkip(t)
92-
c := client.MustNewInCluster()
92+
c := client.MustNewClient()
9393
kubecli := mustNewKubeClient(t)
9494
ns := getNamespace(t)
9595
secrets := kubecli.CoreV1().Secrets(ns)
@@ -140,7 +140,7 @@ func TestAuthenticationSingleCustomSecret(t *testing.T) {
140140
// with authentication set to `None`.
141141
func TestAuthenticationNoneSingle(t *testing.T) {
142142
longOrSkip(t)
143-
c := client.MustNewInCluster()
143+
c := client.MustNewClient()
144144
kubecli := mustNewKubeClient(t)
145145
ns := getNamespace(t)
146146

@@ -179,7 +179,7 @@ func TestAuthenticationNoneSingle(t *testing.T) {
179179
// with default authentication (on) using a generated JWT secret.
180180
func TestAuthenticationClusterDefaultSecret(t *testing.T) {
181181
longOrSkip(t)
182-
c := client.MustNewInCluster()
182+
c := client.MustNewClient()
183183
kubecli := mustNewKubeClient(t)
184184
ns := getNamespace(t)
185185

@@ -227,7 +227,7 @@ func TestAuthenticationClusterDefaultSecret(t *testing.T) {
227227
// with default authentication (on) using a user created JWT secret.
228228
func TestAuthenticationClusterCustomSecret(t *testing.T) {
229229
longOrSkip(t)
230-
c := client.MustNewInCluster()
230+
c := client.MustNewClient()
231231
kubecli := mustNewKubeClient(t)
232232
ns := getNamespace(t)
233233
secrets := kubecli.CoreV1().Secrets(ns)
@@ -280,7 +280,7 @@ func TestAuthenticationClusterCustomSecret(t *testing.T) {
280280
// with authentication set to `None`.
281281
func TestAuthenticationNoneCluster(t *testing.T) {
282282
longOrSkip(t)
283-
c := client.MustNewInCluster()
283+
c := client.MustNewClient()
284284
kubecli := mustNewKubeClient(t)
285285
ns := getNamespace(t)
286286

tests/backup_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -317,9 +317,9 @@ func compareBackup(t *testing.T, meta driver.BackupMeta, backup *backupApi.Arang
317317

318318
func TestBackupCluster(t *testing.T) {
319319
longOrSkip(t)
320-
c := client.MustNewInCluster()
320+
c := client.MustNewClient()
321321
kubecli := mustNewKubeClient(t)
322-
deploymentClient := kubeArangoClient.MustNewInCluster()
322+
deploymentClient := kubeArangoClient.MustNewClient()
323323
ns := getNamespace(t)
324324

325325
backupPolicyClient := deploymentClient.BackupV1().ArangoBackupPolicies(ns)

tests/change_args_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import (
4242
// with default settings and once ready changes the arguments of the agents.
4343
func TestChangeArgsAgents(t *testing.T) {
4444
longOrSkip(t)
45-
c := client.MustNewInCluster()
45+
c := client.MustNewClient()
4646
kubecli := mustNewKubeClient(t)
4747
ns := getNamespace(t)
4848

@@ -121,7 +121,7 @@ func TestChangeArgsAgents(t *testing.T) {
121121
// with default settings and once ready changes the arguments of the dbservers.
122122
func TestChangeArgsDBServer(t *testing.T) {
123123
longOrSkip(t)
124-
c := client.MustNewInCluster()
124+
c := client.MustNewClient()
125125
kubecli := mustNewKubeClient(t)
126126
ns := getNamespace(t)
127127

tests/cursor_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ import (
4040
// with default settings and runs some cursor requests on it.
4141
func TestCursorSingle(t *testing.T) {
4242
longOrSkip(t)
43-
c := client.MustNewInCluster()
43+
c := client.MustNewClient()
4444
kubecli := mustNewKubeClient(t)
4545
ns := getNamespace(t)
4646

@@ -84,7 +84,7 @@ func TestCursorSingle(t *testing.T) {
8484
// with default settings.
8585
func TestCursorActiveFailover(t *testing.T) {
8686
longOrSkip(t)
87-
c := client.MustNewInCluster()
87+
c := client.MustNewClient()
8888
kubecli := mustNewKubeClient(t)
8989
ns := getNamespace(t)
9090

@@ -128,7 +128,7 @@ func TestCursorActiveFailover(t *testing.T) {
128128
// with default settings.
129129
func TestCursorCluster(t *testing.T) {
130130
longOrSkip(t)
131-
c := client.MustNewInCluster()
131+
c := client.MustNewClient()
132132
kubecli := mustNewKubeClient(t)
133133
ns := getNamespace(t)
134134

0 commit comments

Comments
 (0)