fix: add namespace autocompletion for kubectl config set-context command
Signed-off-by: TessaIO <ahmedgrati1999@gmail.com>
This commit is contained in:
		@@ -480,7 +480,7 @@ func NewKubectlCommand(o KubectlOptions) *cobra.Command {
 | 
				
			|||||||
	registerCompletionFuncForGlobalFlags(cmds, f)
 | 
						registerCompletionFuncForGlobalFlags(cmds, f)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cmds.AddCommand(alpha)
 | 
						cmds.AddCommand(alpha)
 | 
				
			||||||
	cmds.AddCommand(cmdconfig.NewCmdConfig(clientcmd.NewDefaultPathOptions(), o.IOStreams))
 | 
						cmds.AddCommand(cmdconfig.NewCmdConfig(f, clientcmd.NewDefaultPathOptions(), o.IOStreams))
 | 
				
			||||||
	cmds.AddCommand(plugin.NewCmdPlugin(o.IOStreams))
 | 
						cmds.AddCommand(plugin.NewCmdPlugin(o.IOStreams))
 | 
				
			||||||
	cmds.AddCommand(version.NewCmdVersion(f, o.IOStreams))
 | 
						cmds.AddCommand(version.NewCmdVersion(f, o.IOStreams))
 | 
				
			||||||
	cmds.AddCommand(apiresources.NewCmdAPIVersions(f, o.IOStreams))
 | 
						cmds.AddCommand(apiresources.NewCmdAPIVersions(f, o.IOStreams))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,6 +23,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/spf13/cobra"
 | 
						"github.com/spf13/cobra"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"k8s.io/cli-runtime/pkg/genericclioptions"
 | 
				
			||||||
	"k8s.io/cli-runtime/pkg/genericiooptions"
 | 
						"k8s.io/cli-runtime/pkg/genericiooptions"
 | 
				
			||||||
	"k8s.io/client-go/tools/clientcmd"
 | 
						"k8s.io/client-go/tools/clientcmd"
 | 
				
			||||||
	cmdutil "k8s.io/kubectl/pkg/cmd/util"
 | 
						cmdutil "k8s.io/kubectl/pkg/cmd/util"
 | 
				
			||||||
@@ -31,7 +32,7 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewCmdConfig creates a command object for the "config" action, and adds all child commands to it.
 | 
					// NewCmdConfig creates a command object for the "config" action, and adds all child commands to it.
 | 
				
			||||||
func NewCmdConfig(pathOptions *clientcmd.PathOptions, streams genericiooptions.IOStreams) *cobra.Command {
 | 
					func NewCmdConfig(restClientGetter genericclioptions.RESTClientGetter, pathOptions *clientcmd.PathOptions, streams genericiooptions.IOStreams) *cobra.Command {
 | 
				
			||||||
	if len(pathOptions.ExplicitFileFlag) == 0 {
 | 
						if len(pathOptions.ExplicitFileFlag) == 0 {
 | 
				
			||||||
		pathOptions.ExplicitFileFlag = clientcmd.RecommendedConfigPathFlag
 | 
							pathOptions.ExplicitFileFlag = clientcmd.RecommendedConfigPathFlag
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -58,7 +59,7 @@ func NewCmdConfig(pathOptions *clientcmd.PathOptions, streams genericiooptions.I
 | 
				
			|||||||
	cmd.AddCommand(NewCmdConfigView(streams, pathOptions))
 | 
						cmd.AddCommand(NewCmdConfigView(streams, pathOptions))
 | 
				
			||||||
	cmd.AddCommand(NewCmdConfigSetCluster(streams.Out, pathOptions))
 | 
						cmd.AddCommand(NewCmdConfigSetCluster(streams.Out, pathOptions))
 | 
				
			||||||
	cmd.AddCommand(NewCmdConfigSetCredentials(streams.Out, pathOptions))
 | 
						cmd.AddCommand(NewCmdConfigSetCredentials(streams.Out, pathOptions))
 | 
				
			||||||
	cmd.AddCommand(NewCmdConfigSetContext(streams.Out, pathOptions))
 | 
						cmd.AddCommand(NewCmdConfigSetContext(restClientGetter, streams.Out, pathOptions))
 | 
				
			||||||
	cmd.AddCommand(NewCmdConfigSet(streams.Out, pathOptions))
 | 
						cmd.AddCommand(NewCmdConfigSet(streams.Out, pathOptions))
 | 
				
			||||||
	cmd.AddCommand(NewCmdConfigUnset(streams.Out, pathOptions))
 | 
						cmd.AddCommand(NewCmdConfigUnset(streams.Out, pathOptions))
 | 
				
			||||||
	cmd.AddCommand(NewCmdConfigCurrentContext(streams.Out, pathOptions))
 | 
						cmd.AddCommand(NewCmdConfigCurrentContext(streams.Out, pathOptions))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,6 +30,7 @@ import (
 | 
				
			|||||||
	"k8s.io/client-go/tools/clientcmd"
 | 
						"k8s.io/client-go/tools/clientcmd"
 | 
				
			||||||
	clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
 | 
						clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
 | 
				
			||||||
	utiltesting "k8s.io/client-go/util/testing"
 | 
						utiltesting "k8s.io/client-go/util/testing"
 | 
				
			||||||
 | 
						cmdtesting "k8s.io/kubectl/pkg/cmd/testing"
 | 
				
			||||||
	cmdutil "k8s.io/kubectl/pkg/cmd/util"
 | 
						cmdutil "k8s.io/kubectl/pkg/cmd/util"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -948,8 +949,11 @@ func testConfigCommand(args []string, startingConfig clientcmdapi.Config, t *tes
 | 
				
			|||||||
	argsToUse = append(argsToUse, "--kubeconfig="+fakeKubeFile.Name())
 | 
						argsToUse = append(argsToUse, "--kubeconfig="+fakeKubeFile.Name())
 | 
				
			||||||
	argsToUse = append(argsToUse, args...)
 | 
						argsToUse = append(argsToUse, args...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						tf := cmdtesting.NewTestFactory().WithNamespace("test")
 | 
				
			||||||
 | 
						defer tf.Cleanup()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	streams, _, buf, _ := genericiooptions.NewTestIOStreams()
 | 
						streams, _, buf, _ := genericiooptions.NewTestIOStreams()
 | 
				
			||||||
	cmd := NewCmdConfig(clientcmd.NewDefaultPathOptions(), streams)
 | 
						cmd := NewCmdConfig(tf, clientcmd.NewDefaultPathOptions(), streams)
 | 
				
			||||||
	// "context" is a global flag, inherited from base kubectl command in the real world
 | 
						// "context" is a global flag, inherited from base kubectl command in the real world
 | 
				
			||||||
	cmd.PersistentFlags().String("context", "", "The name of the kubeconfig context to use")
 | 
						cmd.PersistentFlags().String("context", "", "The name of the kubeconfig context to use")
 | 
				
			||||||
	cmd.SetArgs(argsToUse)
 | 
						cmd.SetArgs(argsToUse)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,6 +23,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/spf13/cobra"
 | 
						"github.com/spf13/cobra"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"k8s.io/cli-runtime/pkg/genericclioptions"
 | 
				
			||||||
	"k8s.io/client-go/tools/clientcmd"
 | 
						"k8s.io/client-go/tools/clientcmd"
 | 
				
			||||||
	clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
 | 
						clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
 | 
				
			||||||
	cliflag "k8s.io/component-base/cli/flag"
 | 
						cliflag "k8s.io/component-base/cli/flag"
 | 
				
			||||||
@@ -53,7 +54,7 @@ var (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewCmdConfigSetContext returns a Command instance for 'config set-context' sub command
 | 
					// NewCmdConfigSetContext returns a Command instance for 'config set-context' sub command
 | 
				
			||||||
func NewCmdConfigSetContext(out io.Writer, configAccess clientcmd.ConfigAccess) *cobra.Command {
 | 
					func NewCmdConfigSetContext(restClientGetter genericclioptions.RESTClientGetter, out io.Writer, configAccess clientcmd.ConfigAccess) *cobra.Command {
 | 
				
			||||||
	options := &setContextOptions{configAccess: configAccess}
 | 
						options := &setContextOptions{configAccess: configAccess}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cmd := &cobra.Command{
 | 
						cmd := &cobra.Command{
 | 
				
			||||||
@@ -79,6 +80,12 @@ func NewCmdConfigSetContext(out io.Writer, configAccess clientcmd.ConfigAccess)
 | 
				
			|||||||
	cmd.Flags().Var(&options.cluster, clientcmd.FlagClusterName, clientcmd.FlagClusterName+" for the context entry in kubeconfig")
 | 
						cmd.Flags().Var(&options.cluster, clientcmd.FlagClusterName, clientcmd.FlagClusterName+" for the context entry in kubeconfig")
 | 
				
			||||||
	cmd.Flags().Var(&options.authInfo, clientcmd.FlagAuthInfoName, clientcmd.FlagAuthInfoName+" for the context entry in kubeconfig")
 | 
						cmd.Flags().Var(&options.authInfo, clientcmd.FlagAuthInfoName, clientcmd.FlagAuthInfoName+" for the context entry in kubeconfig")
 | 
				
			||||||
	cmd.Flags().Var(&options.namespace, clientcmd.FlagNamespace, clientcmd.FlagNamespace+" for the context entry in kubeconfig")
 | 
						cmd.Flags().Var(&options.namespace, clientcmd.FlagNamespace, clientcmd.FlagNamespace+" for the context entry in kubeconfig")
 | 
				
			||||||
 | 
						cmdutil.CheckErr(cmd.RegisterFlagCompletionFunc(
 | 
				
			||||||
 | 
							"namespace",
 | 
				
			||||||
 | 
							func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
 | 
				
			||||||
 | 
								return completion.CompGetResource(cmdutil.NewFactory(restClientGetter), "namespace", toComplete), cobra.ShellCompDirectiveNoFileComp
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return cmd
 | 
						return cmd
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,10 +21,10 @@ import (
 | 
				
			|||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	utiltesting "k8s.io/client-go/util/testing"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"k8s.io/client-go/tools/clientcmd"
 | 
						"k8s.io/client-go/tools/clientcmd"
 | 
				
			||||||
	clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
 | 
						clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
 | 
				
			||||||
 | 
						utiltesting "k8s.io/client-go/util/testing"
 | 
				
			||||||
 | 
						cmdtesting "k8s.io/kubectl/pkg/cmd/testing"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type setContextTest struct {
 | 
					type setContextTest struct {
 | 
				
			||||||
@@ -122,7 +122,11 @@ func (test setContextTest) run(t *testing.T) {
 | 
				
			|||||||
	pathOptions.GlobalFile = fakeKubeFile.Name()
 | 
						pathOptions.GlobalFile = fakeKubeFile.Name()
 | 
				
			||||||
	pathOptions.EnvVar = ""
 | 
						pathOptions.EnvVar = ""
 | 
				
			||||||
	buf := bytes.NewBuffer([]byte{})
 | 
						buf := bytes.NewBuffer([]byte{})
 | 
				
			||||||
	cmd := NewCmdConfigSetContext(buf, pathOptions)
 | 
					
 | 
				
			||||||
 | 
						tf := cmdtesting.NewTestFactory().WithNamespace("test")
 | 
				
			||||||
 | 
						defer tf.Cleanup()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cmd := NewCmdConfigSetContext(tf, buf, pathOptions)
 | 
				
			||||||
	cmd.SetArgs(test.args)
 | 
						cmd.SetArgs(test.args)
 | 
				
			||||||
	cmd.Flags().Parse(test.flags)
 | 
						cmd.Flags().Parse(test.flags)
 | 
				
			||||||
	if err := cmd.Execute(); err != nil {
 | 
						if err := cmd.Execute(); err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user