From 7972aac9f369689dfa905ad6f249dac2fac893b3 Mon Sep 17 00:00:00 2001 From: Jordan Liggitt Date: Mon, 17 Apr 2017 14:25:34 -0400 Subject: [PATCH] Explicit namespace from kubeconfig should override in-cluster config Kubernetes-commit: 63b5650885acf6c2f4e68c8140ade2964bc2c6cb --- tools/clientcmd/merged_client_builder.go | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/tools/clientcmd/merged_client_builder.go b/tools/clientcmd/merged_client_builder.go index 92c1a5a0..f3eb6a40 100644 --- a/tools/clientcmd/merged_client_builder.go +++ b/tools/clientcmd/merged_client_builder.go @@ -22,6 +22,7 @@ import ( "github.com/golang/glog" + "k8s.io/client-go/pkg/api" restclient "k8s.io/client-go/rest" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" ) @@ -134,12 +135,26 @@ func (config *DeferredLoadingClientConfig) Namespace() (string, bool, error) { return "", false, err } - ns, ok, err := mergedKubeConfig.Namespace() + ns, overridden, err := mergedKubeConfig.Namespace() // if we get an error and it is not empty config, or if the merged config defined an explicit namespace, or // if in-cluster config is not possible, return immediately - if (err != nil && !IsEmptyConfig(err)) || ok || !config.icc.Possible() { + if (err != nil && !IsEmptyConfig(err)) || overridden || !config.icc.Possible() { // return on any error except empty config - return ns, ok, err + return ns, overridden, err + } + + if len(ns) > 0 { + // if we got a non-default namespace from the kubeconfig, use it + if ns != api.NamespaceDefault { + return ns, false, nil + } + + // if we got a default namespace, determine whether it was explicit or implicit + if raw, err := mergedKubeConfig.RawConfig(); err == nil { + if context := raw.Contexts[raw.CurrentContext]; context != nil && len(context.Namespace) > 0 { + return ns, false, nil + } + } } glog.V(4).Infof("Using in-cluster namespace")