From 732b9611fa24a1544fdfe110c69a6ee40ef097d8 Mon Sep 17 00:00:00 2001 From: Darren Shepherd Date: Wed, 12 Feb 2020 14:04:31 -0700 Subject: [PATCH] Refactor k8s startup to return ClientConfig --- pkg/kwrapper/k8s/config.go | 46 +++++++++++++++-------------------- pkg/kwrapper/k8s/k3s_linux.go | 13 +++++----- 2 files changed, 25 insertions(+), 34 deletions(-) diff --git a/pkg/kwrapper/k8s/config.go b/pkg/kwrapper/k8s/config.go index 8b10a0dd..21b1e519 100644 --- a/pkg/kwrapper/k8s/config.go +++ b/pkg/kwrapper/k8s/config.go @@ -3,20 +3,15 @@ package k8s import ( "context" "fmt" - "io/ioutil" - "os" + "github.com/rancher/wrangler/pkg/kubeconfig" "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" ) -func Auto(ctx context.Context) (bool, context.Context, *rest.Config, error) { - return GetConfig(ctx, "auto", os.Getenv("KUBECONFIG")) -} - -func GetConfig(ctx context.Context, k8sMode string, kubeConfig string) (bool, context.Context, *rest.Config, error) { +func GetConfig(ctx context.Context, k8sMode string, kubeConfig string) (bool, clientcmd.ClientConfig, error) { var ( - cfg *rest.Config + cfg clientcmd.ClientConfig err error ) @@ -26,33 +21,30 @@ func GetConfig(ctx context.Context, k8sMode string, kubeConfig string) (bool, co case "embedded": return getEmbedded(ctx) case "external": - cfg, err = getExternal(kubeConfig) + cfg = getExternal(kubeConfig) default: - return false, nil, nil, fmt.Errorf("invalid k8s-mode %s", k8sMode) + return false, nil, fmt.Errorf("invalid k8s-mode %s", k8sMode) } - return false, ctx, cfg, err + return false, cfg, err } -func getAuto(ctx context.Context, kubeConfig string) (bool, context.Context, *rest.Config, error) { - if kubeConfig != "" { - cfg, err := getExternal(kubeConfig) - return false, ctx, cfg, err - } - - if config, err := rest.InClusterConfig(); err == nil { - if config.BearerToken == "" { - tokenBytes, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/token") - if err == nil { - config.BearerToken = string(tokenBytes) - } - } - return false, ctx, config, nil +func getAuto(ctx context.Context, kubeConfig string) (bool, clientcmd.ClientConfig, error) { + if isManual(kubeConfig) { + return false, kubeconfig.GetNonInteractiveClientConfig(kubeConfig), nil } return getEmbedded(ctx) } -func getExternal(kubeConfig string) (*rest.Config, error) { - return clientcmd.BuildConfigFromFlags("", kubeConfig) +func isManual(kubeConfig string) bool { + if kubeConfig != "" { + return true + } + _, inClusterErr := rest.InClusterConfig() + return inClusterErr == nil +} + +func getExternal(kubeConfig string) clientcmd.ClientConfig { + return kubeconfig.GetNonInteractiveClientConfig(kubeConfig) } diff --git a/pkg/kwrapper/k8s/k3s_linux.go b/pkg/kwrapper/k8s/k3s_linux.go index cf30c9c9..6f52be1e 100644 --- a/pkg/kwrapper/k8s/k3s_linux.go +++ b/pkg/kwrapper/k8s/k3s_linux.go @@ -12,7 +12,6 @@ import ( "github.com/rancher/norman/pkg/kwrapper/etcd" "github.com/sirupsen/logrus" - "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" ) @@ -20,26 +19,26 @@ var ( kubeConfig = ".kube/k3s.yaml" ) -func getEmbedded(ctx context.Context) (bool, context.Context, *rest.Config, error) { +func getEmbedded(ctx context.Context) (bool, clientcmd.ClientConfig, error) { var ( err error ) etcdEndpoints, err := etcd.RunETCD(ctx, "./management-state") if err != nil { - return false, ctx, nil, err + return false, nil, err } kubeConfig, err := k3sServer(ctx, etcdEndpoints) if err != nil { - return false, ctx, nil, err + return false, nil, err } os.Setenv("KUBECONFIG", kubeConfig) - restConfig, err := clientcmd.NewNonInteractiveDeferredLoadingClientConfig( - &clientcmd.ClientConfigLoadingRules{ExplicitPath: kubeConfig}, &clientcmd.ConfigOverrides{}).ClientConfig() + clientConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig( + &clientcmd.ClientConfigLoadingRules{ExplicitPath: kubeConfig}, &clientcmd.ConfigOverrides{}) - return true, ctx, restConfig, err + return true, clientConfig, nil } func k3sServer(ctx context.Context, endpoints []string) (string, error) {