2018-10-22 17:52:52 +00:00
|
|
|
package k8s
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"fmt"
|
|
|
|
|
2020-02-12 21:04:31 +00:00
|
|
|
"github.com/rancher/wrangler/pkg/kubeconfig"
|
2018-10-22 17:52:52 +00:00
|
|
|
"k8s.io/client-go/rest"
|
|
|
|
"k8s.io/client-go/tools/clientcmd"
|
|
|
|
)
|
|
|
|
|
2020-02-12 21:04:31 +00:00
|
|
|
func GetConfig(ctx context.Context, k8sMode string, kubeConfig string) (bool, clientcmd.ClientConfig, error) {
|
2018-10-22 17:52:52 +00:00
|
|
|
var (
|
2020-02-12 21:04:31 +00:00
|
|
|
cfg clientcmd.ClientConfig
|
2018-10-22 17:52:52 +00:00
|
|
|
err error
|
|
|
|
)
|
|
|
|
|
|
|
|
switch k8sMode {
|
|
|
|
case "auto":
|
|
|
|
return getAuto(ctx, kubeConfig)
|
|
|
|
case "embedded":
|
|
|
|
return getEmbedded(ctx)
|
|
|
|
case "external":
|
2020-02-12 21:04:31 +00:00
|
|
|
cfg = getExternal(kubeConfig)
|
2018-10-22 17:52:52 +00:00
|
|
|
default:
|
2020-02-12 21:04:31 +00:00
|
|
|
return false, nil, fmt.Errorf("invalid k8s-mode %s", k8sMode)
|
2018-10-22 17:52:52 +00:00
|
|
|
}
|
|
|
|
|
2020-02-12 21:04:31 +00:00
|
|
|
return false, cfg, err
|
2018-10-22 17:52:52 +00:00
|
|
|
}
|
|
|
|
|
2020-02-12 21:04:31 +00:00
|
|
|
func getAuto(ctx context.Context, kubeConfig string) (bool, clientcmd.ClientConfig, error) {
|
|
|
|
if isManual(kubeConfig) {
|
|
|
|
return false, kubeconfig.GetNonInteractiveClientConfig(kubeConfig), nil
|
2018-10-22 17:52:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return getEmbedded(ctx)
|
|
|
|
}
|
|
|
|
|
2020-02-12 21:04:31 +00:00
|
|
|
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)
|
2018-10-22 17:52:52 +00:00
|
|
|
}
|