diff --git a/cmd/delete.go b/cmd/delete.go index 88e92b260ec17d57658d7eba7dd2810cf4337d0d..f7df57efdbd4e7c86d23d045ef5d3359c0d6d360 100644 --- a/cmd/delete.go +++ b/cmd/delete.go @@ -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 } diff --git a/cmd/diff.go b/cmd/diff.go index dd5bff4155b0c6d476b06ae9c1540f1ee1d94885..22664a2215d192de30e6fd926a1b180f0df2828a 100644 --- a/cmd/diff.go +++ b/cmd/diff.go @@ -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 } diff --git a/cmd/root.go b/cmd/root.go index a812cae1c08f1744d3a874742eaed63c422443c4..1b836b76ebf0dae49a7f89bb33ad521e5af5a8c0 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -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: diff --git a/cmd/update.go b/cmd/update.go index 987df5ae894bb8a75d1d9b51c141681468b7f626..41b104bde18b4c8741c2a73fe7cbc536298bbafe 100644 --- a/cmd/update.go +++ b/cmd/update.go @@ -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 }