Skip to content
Snippets Groups Projects
Unverified Commit 43864466 authored by Angus Lees's avatar Angus Lees
Browse files

Allow explicit --namespace to override value in kubeconfig context

If the current kubeconfig context is declared with an
explicit (non-empty) namespace, then `mergedKubeConfig.Namespace()`
returns that *config file* namespace value, ignoring an explicit
`--namespace` command line flag.

See https://github.com/kubernetes/client-go/issues/288 for upstream
client-go bug/discussion.

This change works around the issue by just checking the Namespace
override ourselves before falling through to the regular function.

Further fixes #103
parent 0bced7b2
No related branches found
No related tags found
No related merge requests found
......@@ -50,7 +50,7 @@ var deleteCmd = &cobra.Command{
return err
}
c.DefaultNamespace, _, err = clientConfig.Namespace()
c.DefaultNamespace, err = defaultNamespace(clientConfig)
if err != nil {
return err
}
......
......@@ -48,7 +48,7 @@ var diffCmd = &cobra.Command{
return err
}
c.DefaultNamespace, _, err = clientConfig.Namespace()
c.DefaultNamespace, err = defaultNamespace(clientConfig)
if err != nil {
return err
}
......
......@@ -60,6 +60,7 @@ const (
)
var clientConfig clientcmd.ClientConfig
var overrides clientcmd.ConfigOverrides
func init() {
RootCmd.PersistentFlags().CountP(flagVerbose, "v", "Increase verbosity. May be given multiple times.")
......@@ -74,7 +75,6 @@ func init() {
// The "usual" clientcmd/kubectl flags
loadingRules := clientcmd.NewDefaultClientConfigLoadingRules()
loadingRules.DefaultClientConfig = &clientcmd.DefaultClientConfig
overrides := clientcmd.ConfigOverrides{}
kflags := clientcmd.RecommendedConfigOverrideFlags("")
RootCmd.PersistentFlags().StringVar(&loadingRules.ExplicitPath, "kubeconfig", "", "Path to a kube config. Only required if out-of-cluster")
clientcmd.BindOverrideFlags(&overrides, RootCmd.PersistentFlags(), kflags)
......@@ -108,6 +108,16 @@ var RootCmd = &cobra.Command{
},
}
// clientConfig.Namespace() is broken in client-go 3.0:
// namespace in config erroneously overrides explicit --namespace
func defaultNamespace(c clientcmd.ClientConfig) (string, error) {
if overrides.Context.Namespace != "" {
return overrides.Context.Namespace, nil
}
ns, _, err := c.Namespace()
return ns, err
}
func logLevel(verbosity int) log.Level {
switch verbosity {
case 0:
......
......@@ -91,7 +91,7 @@ local configuration. Accepts JSON, YAML, or Jsonnet.`,
return err
}
c.DefaultNamespace, _, err = clientConfig.Namespace()
c.DefaultNamespace, err = defaultNamespace(clientConfig)
if err != nil {
return err
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment