mirror of
https://github.com/rancher/norman.git
synced 2025-09-17 07:40:10 +00:00
Refactor k8s startup to return ClientConfig
This commit is contained in:
@@ -3,20 +3,15 @@ package k8s
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
|
||||||
|
|
||||||
|
"github.com/rancher/wrangler/pkg/kubeconfig"
|
||||||
"k8s.io/client-go/rest"
|
"k8s.io/client-go/rest"
|
||||||
"k8s.io/client-go/tools/clientcmd"
|
"k8s.io/client-go/tools/clientcmd"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Auto(ctx context.Context) (bool, context.Context, *rest.Config, error) {
|
func GetConfig(ctx context.Context, k8sMode string, kubeConfig string) (bool, clientcmd.ClientConfig, error) {
|
||||||
return GetConfig(ctx, "auto", os.Getenv("KUBECONFIG"))
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetConfig(ctx context.Context, k8sMode string, kubeConfig string) (bool, context.Context, *rest.Config, error) {
|
|
||||||
var (
|
var (
|
||||||
cfg *rest.Config
|
cfg clientcmd.ClientConfig
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -26,33 +21,30 @@ func GetConfig(ctx context.Context, k8sMode string, kubeConfig string) (bool, co
|
|||||||
case "embedded":
|
case "embedded":
|
||||||
return getEmbedded(ctx)
|
return getEmbedded(ctx)
|
||||||
case "external":
|
case "external":
|
||||||
cfg, err = getExternal(kubeConfig)
|
cfg = getExternal(kubeConfig)
|
||||||
default:
|
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) {
|
func getAuto(ctx context.Context, kubeConfig string) (bool, clientcmd.ClientConfig, error) {
|
||||||
if kubeConfig != "" {
|
if isManual(kubeConfig) {
|
||||||
cfg, err := getExternal(kubeConfig)
|
return false, kubeconfig.GetNonInteractiveClientConfig(kubeConfig), nil
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return getEmbedded(ctx)
|
return getEmbedded(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getExternal(kubeConfig string) (*rest.Config, error) {
|
func isManual(kubeConfig string) bool {
|
||||||
return clientcmd.BuildConfigFromFlags("", kubeConfig)
|
if kubeConfig != "" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
_, inClusterErr := rest.InClusterConfig()
|
||||||
|
return inClusterErr == nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func getExternal(kubeConfig string) clientcmd.ClientConfig {
|
||||||
|
return kubeconfig.GetNonInteractiveClientConfig(kubeConfig)
|
||||||
}
|
}
|
||||||
|
@@ -12,7 +12,6 @@ import (
|
|||||||
|
|
||||||
"github.com/rancher/norman/pkg/kwrapper/etcd"
|
"github.com/rancher/norman/pkg/kwrapper/etcd"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"k8s.io/client-go/rest"
|
|
||||||
"k8s.io/client-go/tools/clientcmd"
|
"k8s.io/client-go/tools/clientcmd"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -20,26 +19,26 @@ var (
|
|||||||
kubeConfig = ".kube/k3s.yaml"
|
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 (
|
var (
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
|
|
||||||
etcdEndpoints, err := etcd.RunETCD(ctx, "./management-state")
|
etcdEndpoints, err := etcd.RunETCD(ctx, "./management-state")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, ctx, nil, err
|
return false, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
kubeConfig, err := k3sServer(ctx, etcdEndpoints)
|
kubeConfig, err := k3sServer(ctx, etcdEndpoints)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, ctx, nil, err
|
return false, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
os.Setenv("KUBECONFIG", kubeConfig)
|
os.Setenv("KUBECONFIG", kubeConfig)
|
||||||
restConfig, err := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
|
clientConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
|
||||||
&clientcmd.ClientConfigLoadingRules{ExplicitPath: kubeConfig}, &clientcmd.ConfigOverrides{}).ClientConfig()
|
&clientcmd.ClientConfigLoadingRules{ExplicitPath: kubeConfig}, &clientcmd.ConfigOverrides{})
|
||||||
|
|
||||||
return true, ctx, restConfig, err
|
return true, clientConfig, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func k3sServer(ctx context.Context, endpoints []string) (string, error) {
|
func k3sServer(ctx context.Context, endpoints []string) (string, error) {
|
||||||
|
Reference in New Issue
Block a user