fix: add namespace autocompletion for kubectl config set-context command
Signed-off-by: TessaIO <ahmedgrati1999@gmail.com> Kubernetes-commit: 62be85249e27e58a92ab3a1caf672159dc3cfd7f
This commit is contained in:
parent
a421f02b7c
commit
25c985cf66
|
@ -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 {
|
||||||
|
|
Loading…
Reference in New Issue