Merge pull request #107978 from brianpursley/config-cleanup

kubectl config subcommand cleanup: set-cluster, set-context, set-credentials
This commit is contained in:
Kubernetes Prow Robot 2022-03-24 02:58:54 -07:00 committed by GitHub
commit 8bd198260e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 85 additions and 81 deletions

View File

@ -57,7 +57,7 @@ func NewCmdConfig(pathOptions *clientcmd.PathOptions, streams genericclioptions.
// TODO(juanvallejo): update all subcommands to work with genericclioptions.IOStreams
cmd.AddCommand(NewCmdConfigView(streams, pathOptions))
cmd.AddCommand(NewCmdConfigSetCluster(streams.Out, pathOptions))
cmd.AddCommand(NewCmdConfigSetAuthInfo(streams.Out, pathOptions))
cmd.AddCommand(NewCmdConfigSetCredentials(streams.Out, pathOptions))
cmd.AddCommand(NewCmdConfigSetContext(streams.Out, pathOptions))
cmd.AddCommand(NewCmdConfigSet(streams.Out, pathOptions))
cmd.AddCommand(NewCmdConfigUnset(streams.Out, pathOptions))

View File

@ -33,7 +33,7 @@ import (
"k8s.io/kubectl/pkg/util/templates"
)
type createClusterOptions struct {
type setClusterOptions struct {
configAccess clientcmd.ConfigAccess
name string
server cliflag.StringFlag
@ -45,19 +45,19 @@ type createClusterOptions struct {
}
var (
createClusterLong = templates.LongDesc(i18n.T(`
setClusterLong = templates.LongDesc(i18n.T(`
Set a cluster entry in kubeconfig.
Specifying a name that already exists will merge new fields on top of existing values for those fields.`))
createClusterExample = templates.Examples(`
setClusterExample = templates.Examples(`
# Set only the server field on the e2e cluster entry without touching other values
kubectl config set-cluster e2e --server=https://1.2.3.4
# Embed certificate authority data for the e2e cluster entry
kubectl config set-cluster e2e --embed-certs --certificate-authority=~/.kube/e2e/kubernetes.ca.crt
# Disable cert checking for the dev cluster entry
# Disable cert checking for the e2e cluster entry
kubectl config set-cluster e2e --insecure-skip-tls-verify=true
# Set custom TLS server name to use for validation for the e2e cluster entry
@ -69,14 +69,14 @@ var (
// NewCmdConfigSetCluster returns a Command instance for 'config set-cluster' sub command
func NewCmdConfigSetCluster(out io.Writer, configAccess clientcmd.ConfigAccess) *cobra.Command {
options := &createClusterOptions{configAccess: configAccess}
options := &setClusterOptions{configAccess: configAccess}
cmd := &cobra.Command{
Use: fmt.Sprintf("set-cluster NAME [--%v=server] [--%v=path/to/certificate/authority] [--%v=true] [--%v=example.com]", clientcmd.FlagAPIServer, clientcmd.FlagCAFile, clientcmd.FlagInsecure, clientcmd.FlagTLSServerName),
DisableFlagsInUseLine: true,
Short: i18n.T("Set a cluster entry in kubeconfig"),
Long: createClusterLong,
Example: createClusterExample,
Long: setClusterLong,
Example: setClusterExample,
Run: func(cmd *cobra.Command, args []string) {
cmdutil.CheckErr(options.complete(cmd))
cmdutil.CheckErr(options.run())
@ -99,7 +99,7 @@ func NewCmdConfigSetCluster(out io.Writer, configAccess clientcmd.ConfigAccess)
return cmd
}
func (o createClusterOptions) run() error {
func (o setClusterOptions) run() error {
err := o.validate()
if err != nil {
return err
@ -124,8 +124,7 @@ func (o createClusterOptions) run() error {
return nil
}
// cluster builds a Cluster object from the options
func (o *createClusterOptions) modifyCluster(existingCluster clientcmdapi.Cluster) clientcmdapi.Cluster {
func (o *setClusterOptions) modifyCluster(existingCluster clientcmdapi.Cluster) clientcmdapi.Cluster {
modifiedCluster := existingCluster
if o.server.Provided() {
@ -169,7 +168,7 @@ func (o *createClusterOptions) modifyCluster(existingCluster clientcmdapi.Cluste
return modifiedCluster
}
func (o *createClusterOptions) complete(cmd *cobra.Command) error {
func (o *setClusterOptions) complete(cmd *cobra.Command) error {
args := cmd.Flags().Args()
if len(args) != 1 {
return helpErrorf(cmd, "Unexpected args: %v", args)
@ -179,7 +178,7 @@ func (o *createClusterOptions) complete(cmd *cobra.Command) error {
return nil
}
func (o createClusterOptions) validate() error {
func (o setClusterOptions) validate() error {
if len(o.name) == 0 {
return errors.New("you must specify a non-empty cluster name")
}

View File

@ -26,7 +26,7 @@ import (
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
)
type createClusterTest struct {
type setClusterTest struct {
description string
config clientcmdapi.Config
args []string
@ -37,7 +37,7 @@ type createClusterTest struct {
func TestCreateCluster(t *testing.T) {
conf := clientcmdapi.Config{}
test := createClusterTest{
test := setClusterTest{
description: "Testing 'kubectl config set-cluster' with a new cluster",
config: conf,
args: []string{"my-cluster"},
@ -57,7 +57,7 @@ func TestCreateCluster(t *testing.T) {
func TestCreateClusterWithProxy(t *testing.T) {
conf := clientcmdapi.Config{}
test := createClusterTest{
test := setClusterTest{
description: "Testing 'kubectl config set-cluster' with a new cluster",
config: conf,
args: []string{"my-cluster"},
@ -86,7 +86,7 @@ func TestModifyCluster(t *testing.T) {
"my-cluster": {Server: "https://192.168.0.1", TLSServerName: "to-be-cleared"},
},
}
test := createClusterTest{
test := setClusterTest{
description: "Testing 'kubectl config set-cluster' with an existing cluster",
config: conf,
args: []string{"my-cluster"},
@ -110,7 +110,7 @@ func TestModifyClusterWithProxy(t *testing.T) {
"my-cluster": {Server: "https://192.168.0.1", TLSServerName: "to-be-cleared"},
},
}
test := createClusterTest{
test := setClusterTest{
description: "Testing 'kubectl config set-cluster' with an existing cluster",
config: conf,
args: []string{"my-cluster"},
@ -140,7 +140,7 @@ func TestModifyClusterWithProxyOverride(t *testing.T) {
},
},
}
test := createClusterTest{
test := setClusterTest{
description: "Testing 'kubectl config set-cluster' with an existing cluster",
config: conf,
args: []string{"my-cluster"},
@ -164,7 +164,7 @@ func TestModifyClusterServerAndTLS(t *testing.T) {
"my-cluster": {Server: "https://192.168.0.1"},
},
}
test := createClusterTest{
test := setClusterTest{
description: "Testing 'kubectl config set-cluster' with an existing cluster",
config: conf,
args: []string{"my-cluster"},
@ -182,7 +182,7 @@ func TestModifyClusterServerAndTLS(t *testing.T) {
test.run(t)
}
func (test createClusterTest) run(t *testing.T) {
func (test setClusterTest) run(t *testing.T) {
fakeKubeFile, err := ioutil.TempFile(os.TempDir(), "")
if err != nil {
t.Fatalf("unexpected error: %v", err)

View File

@ -32,7 +32,7 @@ import (
"k8s.io/kubectl/pkg/util/templates"
)
type createContextOptions struct {
type setContextOptions struct {
configAccess clientcmd.ConfigAccess
name string
currContext bool
@ -42,26 +42,26 @@ type createContextOptions struct {
}
var (
createContextLong = templates.LongDesc(i18n.T(`
setContextLong = templates.LongDesc(i18n.T(`
Set a context entry in kubeconfig.
Specifying a name that already exists will merge new fields on top of existing values for those fields.`))
createContextExample = templates.Examples(`
setContextExample = templates.Examples(`
# Set the user field on the gce context entry without touching other values
kubectl config set-context gce --user=cluster-admin`)
)
// NewCmdConfigSetContext returns a Command instance for 'config set-context' sub command
func NewCmdConfigSetContext(out io.Writer, configAccess clientcmd.ConfigAccess) *cobra.Command {
options := &createContextOptions{configAccess: configAccess}
options := &setContextOptions{configAccess: configAccess}
cmd := &cobra.Command{
Use: fmt.Sprintf("set-context [NAME | --current] [--%v=cluster_nickname] [--%v=user_nickname] [--%v=namespace]", clientcmd.FlagClusterName, clientcmd.FlagAuthInfoName, clientcmd.FlagNamespace),
DisableFlagsInUseLine: true,
Short: i18n.T("Set a context entry in kubeconfig"),
Long: createContextLong,
Example: createContextExample,
Long: setContextLong,
Example: setContextExample,
ValidArgsFunction: util.ContextCompletionFunc,
Run: func(cmd *cobra.Command, args []string) {
cmdutil.CheckErr(options.complete(cmd))
@ -83,7 +83,7 @@ func NewCmdConfigSetContext(out io.Writer, configAccess clientcmd.ConfigAccess)
return cmd
}
func (o createContextOptions) run() (string, bool, error) {
func (o setContextOptions) run() (string, bool, error) {
err := o.validate()
if err != nil {
return "", false, err
@ -116,7 +116,7 @@ func (o createContextOptions) run() (string, bool, error) {
return name, exists, nil
}
func (o *createContextOptions) modifyContext(existingContext clientcmdapi.Context) clientcmdapi.Context {
func (o *setContextOptions) modifyContext(existingContext clientcmdapi.Context) clientcmdapi.Context {
modifiedContext := existingContext
if o.cluster.Provided() {
@ -132,7 +132,7 @@ func (o *createContextOptions) modifyContext(existingContext clientcmdapi.Contex
return modifiedContext
}
func (o *createContextOptions) complete(cmd *cobra.Command) error {
func (o *setContextOptions) complete(cmd *cobra.Command) error {
args := cmd.Flags().Args()
if len(args) > 1 {
return helpErrorf(cmd, "Unexpected args: %v", args)
@ -143,7 +143,7 @@ func (o *createContextOptions) complete(cmd *cobra.Command) error {
return nil
}
func (o createContextOptions) validate() error {
func (o setContextOptions) validate() error {
if len(o.name) == 0 && !o.currContext {
return errors.New("you must specify a non-empty context name or --current")
}

View File

@ -26,7 +26,7 @@ import (
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
)
type createContextTest struct {
type setContextTest struct {
description string
testContext string // name of the context being modified
config clientcmdapi.Config //initiate kubectl config
@ -38,7 +38,7 @@ type createContextTest struct {
func TestCreateContext(t *testing.T) {
conf := clientcmdapi.Config{}
test := createContextTest{
test := setContextTest{
testContext: "shaker-context",
description: "Testing for create a new context",
config: conf,
@ -61,7 +61,7 @@ func TestModifyContext(t *testing.T) {
Contexts: map[string]*clientcmdapi.Context{
"shaker-context": {AuthInfo: "blue-user", Cluster: "big-cluster", Namespace: "saw-ns"},
"not-this": {AuthInfo: "blue-user", Cluster: "big-cluster", Namespace: "saw-ns"}}}
test := createContextTest{
test := setContextTest{
testContext: "shaker-context",
description: "Testing for modify a already exist context",
config: conf,
@ -86,7 +86,7 @@ func TestModifyCurrentContext(t *testing.T) {
Contexts: map[string]*clientcmdapi.Context{
"shaker-context": {AuthInfo: "blue-user", Cluster: "big-cluster", Namespace: "saw-ns"},
"not-this": {AuthInfo: "blue-user", Cluster: "big-cluster", Namespace: "saw-ns"}}}
test := createContextTest{
test := setContextTest{
testContext: "shaker-context",
description: "Testing for modify a current context",
config: conf,
@ -106,7 +106,7 @@ func TestModifyCurrentContext(t *testing.T) {
test.run(t)
}
func (test createContextTest) run(t *testing.T) {
func (test setContextTest) run(t *testing.T) {
fakeKubeFile, err := ioutil.TempFile(os.TempDir(), "")
if err != nil {
t.Fatalf("unexpected error: %v", err)

View File

@ -35,7 +35,7 @@ import (
"k8s.io/kubectl/pkg/util/templates"
)
type createAuthInfoOptions struct {
type setCredentialsOptions struct {
configAccess clientcmd.ConfigAccess
name string
clientCertificate cliflag.StringFlag
@ -67,7 +67,7 @@ const (
)
var (
createAuthInfoLong = fmt.Sprintf(templates.LongDesc(i18n.T(`
setCredentialsLong = fmt.Sprintf(templates.LongDesc(i18n.T(`
Set a user entry in kubeconfig.
Specifying a name that already exists will merge new fields on top of existing values.
@ -83,7 +83,7 @@ var (
Bearer token and basic auth are mutually exclusive.`)), clientcmd.FlagCertFile, clientcmd.FlagKeyFile, clientcmd.FlagBearerToken, clientcmd.FlagUsername, clientcmd.FlagPassword)
createAuthInfoExample = templates.Examples(`
setCredentialsExample = templates.Examples(`
# Set only the "client-key" field on the "cluster-admin"
# entry, without touching other values
kubectl config set-credentials cluster-admin --client-key=~/.kube/admin.key
@ -116,13 +116,19 @@ var (
kubectl config set-credentials cluster-admin --exec-env=var-to-remove-`)
)
// NewCmdConfigSetAuthInfo returns an Command option instance for 'config set-credentials' sub command
func NewCmdConfigSetAuthInfo(out io.Writer, configAccess clientcmd.ConfigAccess) *cobra.Command {
options := &createAuthInfoOptions{configAccess: configAccess}
return newCmdConfigSetAuthInfo(out, options)
// NewCmdConfigSetCredentials returns a Command instance for 'config set-credentials' sub command
func NewCmdConfigSetCredentials(out io.Writer, configAccess clientcmd.ConfigAccess) *cobra.Command {
options := &setCredentialsOptions{configAccess: configAccess}
return newCmdConfigSetCredentials(out, options)
}
func newCmdConfigSetAuthInfo(out io.Writer, options *createAuthInfoOptions) *cobra.Command {
// NewCmdConfigSetAuthInfo returns a Command instance for 'config set-credentials' sub command
// DEPRECATED: Use NewCmdConfigSetCredentials instead
func NewCmdConfigSetAuthInfo(out io.Writer, configAccess clientcmd.ConfigAccess) *cobra.Command {
return NewCmdConfigSetCredentials(out, configAccess)
}
func newCmdConfigSetCredentials(out io.Writer, options *setCredentialsOptions) *cobra.Command {
cmd := &cobra.Command{
Use: fmt.Sprintf(
"set-credentials NAME [--%v=path/to/certfile] "+
@ -150,10 +156,10 @@ func newCmdConfigSetAuthInfo(out io.Writer, options *createAuthInfoOptions) *cob
),
DisableFlagsInUseLine: true,
Short: i18n.T("Set a user entry in kubeconfig"),
Long: createAuthInfoLong,
Example: createAuthInfoExample,
Long: setCredentialsLong,
Example: setCredentialsExample,
Run: func(cmd *cobra.Command, args []string) {
err := options.complete(cmd, out)
err := options.complete(cmd)
if err != nil {
cmd.Help()
cmdutil.CheckErr(err)
@ -182,7 +188,7 @@ func newCmdConfigSetAuthInfo(out io.Writer, options *createAuthInfoOptions) *cob
return cmd
}
func (o createAuthInfoOptions) run() error {
func (o setCredentialsOptions) run() error {
err := o.validate()
if err != nil {
return err
@ -207,8 +213,7 @@ func (o createAuthInfoOptions) run() error {
return nil
}
// authInfo builds an AuthInfo object from the options
func (o *createAuthInfoOptions) modifyAuthInfo(existingAuthInfo clientcmdapi.AuthInfo) clientcmdapi.AuthInfo {
func (o *setCredentialsOptions) modifyAuthInfo(existingAuthInfo clientcmdapi.AuthInfo) clientcmdapi.AuthInfo {
modifiedAuthInfo := existingAuthInfo
var setToken, setBasic bool
@ -356,21 +361,21 @@ func (o *createAuthInfoOptions) modifyAuthInfo(existingAuthInfo clientcmdapi.Aut
return modifiedAuthInfo
}
func (o *createAuthInfoOptions) complete(cmd *cobra.Command, out io.Writer) error {
func (o *setCredentialsOptions) complete(cmd *cobra.Command) error {
args := cmd.Flags().Args()
if len(args) != 1 {
return fmt.Errorf("Unexpected args: %v", args)
return fmt.Errorf("unexpected args: %v", args)
}
authProviderArgs, err := cmd.Flags().GetStringSlice(flagAuthProviderArg)
if err != nil {
return fmt.Errorf("Error: %s", err)
return err
}
if len(authProviderArgs) > 0 {
newPairs, removePairs, err := cmdutil.ParsePairs(authProviderArgs, flagAuthProviderArg, true)
if err != nil {
return fmt.Errorf("Error: %s", err)
return err
}
o.authProviderArgs = newPairs
o.authProviderArgsToRemove = removePairs
@ -378,7 +383,7 @@ func (o *createAuthInfoOptions) complete(cmd *cobra.Command, out io.Writer) erro
execArgs, err := cmd.Flags().GetStringSlice(flagExecArg)
if err != nil {
return fmt.Errorf("Error: %s", err)
return err
}
if len(execArgs) > 0 {
o.execArgs = execArgs
@ -386,12 +391,12 @@ func (o *createAuthInfoOptions) complete(cmd *cobra.Command, out io.Writer) erro
execEnv, err := cmd.Flags().GetStringArray(flagExecEnv)
if err != nil {
return fmt.Errorf("Error: %s", err)
return err
}
if len(execEnv) > 0 {
newPairs, removePairs, err := cmdutil.ParsePairs(execEnv, flagExecEnv, true)
if err != nil {
return fmt.Errorf("Error: %s", err)
return err
}
o.execEnv = newPairs
o.execEnvToRemove = removePairs
@ -401,7 +406,7 @@ func (o *createAuthInfoOptions) complete(cmd *cobra.Command, out io.Writer) erro
return nil
}
func (o createAuthInfoOptions) validate() error {
func (o setCredentialsOptions) validate() error {
if len(o.name) == 0 {
return errors.New("you must specify a non-empty user name")
}

View File

@ -34,7 +34,7 @@ func stringFlagFor(s string) cliflag.StringFlag {
return f
}
func TestCreateAuthInfoOptions(t *testing.T) {
func TestSetCredentialsOptions(t *testing.T) {
tests := []struct {
name string
flags []string
@ -42,14 +42,14 @@ func TestCreateAuthInfoOptions(t *testing.T) {
wantCompleteErr bool
wantValidateErr bool
wantOptions *createAuthInfoOptions
wantOptions *setCredentialsOptions
}{
{
name: "test1",
flags: []string{
"me",
},
wantOptions: &createAuthInfoOptions{
wantOptions: &setCredentialsOptions{
name: "me",
},
},
@ -59,7 +59,7 @@ func TestCreateAuthInfoOptions(t *testing.T) {
"me",
"--token=foo",
},
wantOptions: &createAuthInfoOptions{
wantOptions: &setCredentialsOptions{
name: "me",
token: stringFlagFor("foo"),
},
@ -71,7 +71,7 @@ func TestCreateAuthInfoOptions(t *testing.T) {
"--username=jane",
"--password=bar",
},
wantOptions: &createAuthInfoOptions{
wantOptions: &setCredentialsOptions{
name: "me",
username: stringFlagFor("jane"),
password: stringFlagFor("bar"),
@ -96,7 +96,7 @@ func TestCreateAuthInfoOptions(t *testing.T) {
"--auth-provider-arg=client-secret=bar",
"me",
},
wantOptions: &createAuthInfoOptions{
wantOptions: &setCredentialsOptions{
name: "me",
authProvider: stringFlagFor("oidc"),
authProviderArgs: map[string]string{
@ -114,7 +114,7 @@ func TestCreateAuthInfoOptions(t *testing.T) {
"--auth-provider-arg=client-secret-",
"me",
},
wantOptions: &createAuthInfoOptions{
wantOptions: &setCredentialsOptions{
name: "me",
authProvider: stringFlagFor("oidc"),
authProviderArgs: map[string]string{},
@ -131,7 +131,7 @@ func TestCreateAuthInfoOptions(t *testing.T) {
"--auth-provider-arg=client-secret-",
"me",
},
wantOptions: &createAuthInfoOptions{
wantOptions: &setCredentialsOptions{
name: "me",
authProviderArgs: map[string]string{},
authProviderArgsToRemove: []string{
@ -162,7 +162,7 @@ func TestCreateAuthInfoOptions(t *testing.T) {
"--exec-command=example-client-go-exec-plugin",
"me",
},
wantOptions: &createAuthInfoOptions{
wantOptions: &setCredentialsOptions{
name: "me",
execCommand: stringFlagFor("example-client-go-exec-plugin"),
},
@ -175,7 +175,7 @@ func TestCreateAuthInfoOptions(t *testing.T) {
"--exec-arg=arg2",
"me",
},
wantOptions: &createAuthInfoOptions{
wantOptions: &setCredentialsOptions{
name: "me",
execCommand: stringFlagFor("example-client-go-exec-plugin"),
execArgs: []string{"arg1", "arg2"},
@ -191,7 +191,7 @@ func TestCreateAuthInfoOptions(t *testing.T) {
"--exec-env=env-remove2-",
"me",
},
wantOptions: &createAuthInfoOptions{
wantOptions: &setCredentialsOptions{
name: "me",
execCommand: stringFlagFor("example-client-go-exec-plugin"),
execEnv: map[string]string{"key1": "val1", "key2": "val2"},
@ -204,8 +204,8 @@ func TestCreateAuthInfoOptions(t *testing.T) {
t.Run(tt.name, func(t *testing.T) {
buff := new(bytes.Buffer)
opts := new(createAuthInfoOptions)
cmd := newCmdConfigSetAuthInfo(buff, opts)
opts := new(setCredentialsOptions)
cmd := newCmdConfigSetCredentials(buff, opts)
if err := cmd.ParseFlags(tt.flags); err != nil {
if !tt.wantParseErr {
t.Errorf("case %s: parsing error for flags %q: %v: %s", tt.name, tt.flags, err, buff)
@ -217,7 +217,7 @@ func TestCreateAuthInfoOptions(t *testing.T) {
return
}
if err := opts.complete(cmd, buff); err != nil {
if err := opts.complete(cmd); err != nil {
if !tt.wantCompleteErr {
t.Errorf("case %s: complete() error for flags %q: %s", tt.name, tt.flags, buff)
}
@ -381,8 +381,8 @@ func TestModifyExistingAuthInfo(t *testing.T) {
t.Run(tt.name, func(t *testing.T) {
buff := new(bytes.Buffer)
opts := new(createAuthInfoOptions)
cmd := newCmdConfigSetAuthInfo(buff, opts)
opts := new(setCredentialsOptions)
cmd := newCmdConfigSetCredentials(buff, opts)
if err := cmd.ParseFlags(tt.flags); err != nil {
if !tt.wantParseErr {
t.Errorf("case %s: parsing error for flags %q: %v: %s", tt.name, tt.flags, err, buff)
@ -394,7 +394,7 @@ func TestModifyExistingAuthInfo(t *testing.T) {
return
}
if err := opts.complete(cmd, buff); err != nil {
if err := opts.complete(cmd); err != nil {
if !tt.wantCompleteErr {
t.Errorf("case %s: complete() error for flags %q: %s", tt.name, tt.flags, buff)
}
@ -426,7 +426,7 @@ func TestModifyExistingAuthInfo(t *testing.T) {
}
}
type createAuthInfoTest struct {
type setCredentialsTest struct {
description string
config clientcmdapi.Config
args []string
@ -435,10 +435,10 @@ type createAuthInfoTest struct {
expectedConfig clientcmdapi.Config
}
func TestCreateAuthInfo(t *testing.T) {
func TestSetCredentials(t *testing.T) {
conf := clientcmdapi.Config{}
test := createAuthInfoTest{
description: "Testing for create aythinfo",
test := setCredentialsTest{
description: "Testing set credentials",
config: conf,
args: []string{"cluster-admin"},
flags: []string{
@ -453,7 +453,7 @@ func TestCreateAuthInfo(t *testing.T) {
}
test.run(t)
}
func (test createAuthInfoTest) run(t *testing.T) {
func (test setCredentialsTest) run(t *testing.T) {
fakeKubeFile, err := ioutil.TempFile(os.TempDir(), "")
if err != nil {
t.Fatalf("unexpected error: %v", err)
@ -468,7 +468,7 @@ func (test createAuthInfoTest) run(t *testing.T) {
pathOptions.GlobalFile = fakeKubeFile.Name()
pathOptions.EnvVar = ""
buf := bytes.NewBuffer([]byte{})
cmd := NewCmdConfigSetAuthInfo(buf, pathOptions)
cmd := NewCmdConfigSetCredentials(buf, pathOptions)
cmd.SetArgs(test.args)
cmd.Flags().Parse(test.flags)
if err := cmd.Execute(); err != nil {