Fix kubeconfig load from multiple configuration files (#301)

* fix kubeconfig load with standards kubectl approach

* update cli docs
This commit is contained in:
Enrico Candino
2025-03-07 15:11:00 +01:00
committed by GitHub
parent 2b7202e676
commit d0810af17c
5 changed files with 25 additions and 15 deletions
+1 -1
View File
@@ -67,7 +67,7 @@ func createAction(config *CreateConfig) cli.ActionFunc {
return errors.New("invalid cluster name")
}
restConfig, err := clientcmd.BuildConfigFromFlags("", Kubeconfig)
restConfig, err := loadRESTConfig()
if err != nil {
return err
}
+1 -2
View File
@@ -9,7 +9,6 @@ import (
"github.com/sirupsen/logrus"
"github.com/urfave/cli/v2"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/tools/clientcmd"
"sigs.k8s.io/controller-runtime/pkg/client"
)
@@ -36,7 +35,7 @@ func delete(clx *cli.Context) error {
return errors.New("invalid cluster name")
}
restConfig, err := clientcmd.BuildConfigFromFlags("", Kubeconfig)
restConfig, err := loadRESTConfig()
if err != nil {
return err
}
+4 -5
View File
@@ -92,11 +92,7 @@ func NewKubeconfigCommand() *cli.Command {
}
func generate(clx *cli.Context) error {
var cluster v1alpha1.Cluster
ctx := context.Background()
restConfig, err := clientcmd.BuildConfigFromFlags("", Kubeconfig)
restConfig, err := loadRESTConfig()
if err != nil {
return err
}
@@ -113,6 +109,9 @@ func generate(clx *cli.Context) error {
Namespace: Namespace(),
}
var cluster v1alpha1.Cluster
ctx := context.Background()
if err := ctrlClient.Get(ctx, clusterKey, &cluster); err != nil {
return err
}
+16 -4
View File
@@ -2,7 +2,6 @@ package cmds
import (
"fmt"
"os"
"github.com/rancher/k3k/pkg/apis/k3k.io/v1alpha1"
"github.com/rancher/k3k/pkg/buildinfo"
@@ -10,6 +9,8 @@ import (
"github.com/urfave/cli/v2"
"k8s.io/apimachinery/pkg/runtime"
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
)
const (
@@ -26,11 +27,9 @@ var (
CommonFlags = []cli.Flag{
&cli.StringFlag{
Name: "kubeconfig",
EnvVars: []string{"KUBECONFIG"},
Usage: "kubeconfig path",
Destination: &Kubeconfig,
Value: os.Getenv("HOME") + "/.kube/config",
DefaultText: "$HOME/.kube/config",
DefaultText: "$HOME/.kube/config or $KUBECONFIG if set",
},
&cli.StringFlag{
Name: "namespace",
@@ -86,3 +85,16 @@ func Namespace() string {
return namespace
}
func loadRESTConfig() (*rest.Config, error) {
loadingRules := clientcmd.NewDefaultClientConfigLoadingRules()
configOverrides := &clientcmd.ConfigOverrides{}
if Kubeconfig != "" {
loadingRules.ExplicitPath = Kubeconfig
}
kubeConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, configOverrides)
return kubeConfig.ClientConfig()
}