Skip to content

Commit 1c85104

Browse files
committed
Improve autodetect logic for kubeconfig path
Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
1 parent ce42fe9 commit 1c85104

1 file changed

Lines changed: 39 additions & 10 deletions

File tree

main.go

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,10 @@ func main() {
131131

132132
// restConfig builds a *rest.Config from the --kubeconfig flag or $KUBECONFIG.
133133
func restConfig() (*rest.Config, error) {
134-
cfg := kubeCfgPath
135-
if cfg == "" {
136-
cfg = os.Getenv("KUBECONFIG")
134+
if path := resolvedKubeconfigPath(); path != "" {
135+
return clientcmd.BuildConfigFromFlags("", path)
137136
}
138-
return clientcmd.BuildConfigFromFlags("", cfg)
137+
return rest.InClusterConfig()
139138
}
140139

141140
// helmCfg returns an initialised Helm configuration bound to a namespace.
@@ -638,13 +637,25 @@ func cmdDelete() *cobra.Command {
638637

639638
// defaultNamespace returns the namespace from the kubeconfig or "default".
640639
func defaultNamespace() (string, bool, error) {
641-
cfg := kubeCfgPath
642-
if cfg == "" {
643-
cfg = os.Getenv("KUBECONFIG")
640+
path := resolvedKubeconfigPath()
641+
if path != "" {
642+
loading := &clientcmd.ClientConfigLoadingRules{ExplicitPath: path}
643+
cc := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loading, &clientcmd.ConfigOverrides{})
644+
ns, overridden, err := cc.Namespace()
645+
if err != nil {
646+
return "default", false, nil
647+
}
648+
return ns, overridden, nil
644649
}
645-
loading := &clientcmd.ClientConfigLoadingRules{ExplicitPath: cfg}
646-
cc := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loading, &clientcmd.ConfigOverrides{})
647-
return cc.Namespace()
650+
651+
// Try reading namespace from in-cluster location
652+
data, err := os.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/namespace")
653+
if err == nil {
654+
return strings.TrimSpace(string(data)), false, nil
655+
}
656+
657+
// Fallback
658+
return "default", false, nil
648659
}
649660

650661
// serverTable retrieves a metav1.Table from the API server.
@@ -1263,3 +1274,21 @@ func discoverKubeVersion(rc *rest.Config) (hchart.KubeVersion, error) {
12631274
Minor: info.Minor,
12641275
}, nil
12651276
}
1277+
1278+
func resolvedKubeconfigPath() string {
1279+
if kubeCfgPath != "" {
1280+
return kubeCfgPath
1281+
}
1282+
if env := os.Getenv("KUBECONFIG"); env != "" {
1283+
return env
1284+
}
1285+
home, err := os.UserHomeDir()
1286+
if err != nil {
1287+
return ""
1288+
}
1289+
cfg := filepath.Join(home, ".kube", "config")
1290+
if _, err := os.Stat(cfg); err == nil {
1291+
return cfg
1292+
}
1293+
return ""
1294+
}

0 commit comments

Comments
 (0)