k3s/vendor/k8s.io/kubectl/pkg/cmd/config/delete_user.go

121 lines
3.2 KiB
Go

/*
Copyright 2020 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package config
import (
"fmt"
"github.com/spf13/cobra"
"k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/client-go/tools/clientcmd"
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
cmdutil "k8s.io/kubectl/pkg/cmd/util"
"k8s.io/kubectl/pkg/util/i18n"
"k8s.io/kubectl/pkg/util/templates"
)
var (
deleteUserExample = templates.Examples(`
# Delete the minikube user
kubectl config delete-user minikube`)
)
// DeleteUserOptions holds the data needed to run the command
type DeleteUserOptions struct {
user string
configAccess clientcmd.ConfigAccess
config *clientcmdapi.Config
configFile string
genericclioptions.IOStreams
}
// NewDeleteUserOptions creates the options for the command
func NewDeleteUserOptions(ioStreams genericclioptions.IOStreams, configAccess clientcmd.ConfigAccess) *DeleteUserOptions {
return &DeleteUserOptions{
configAccess: configAccess,
IOStreams: ioStreams,
}
}
// NewCmdConfigDeleteUser returns a Command instance for 'config delete-user' sub command
func NewCmdConfigDeleteUser(streams genericclioptions.IOStreams, configAccess clientcmd.ConfigAccess) *cobra.Command {
o := NewDeleteUserOptions(streams, configAccess)
cmd := &cobra.Command{
Use: "delete-user NAME",
DisableFlagsInUseLine: true,
Short: i18n.T("Delete the specified user from the kubeconfig"),
Long: i18n.T("Delete the specified user from the kubeconfig"),
Example: deleteUserExample,
Run: func(cmd *cobra.Command, args []string) {
cmdutil.CheckErr(o.Complete(cmd, args))
cmdutil.CheckErr(o.Validate())
cmdutil.CheckErr(o.Run())
},
}
return cmd
}
// Complete sets up the command to run
func (o *DeleteUserOptions) Complete(cmd *cobra.Command, args []string) error {
config, err := o.configAccess.GetStartingConfig()
if err != nil {
return err
}
o.config = config
if len(args) != 1 {
return cmdutil.UsageErrorf(cmd, "user to delete is required")
}
o.user = args[0]
configFile := o.configAccess.GetDefaultFilename()
if o.configAccess.IsExplicitFile() {
configFile = o.configAccess.GetExplicitFile()
}
o.configFile = configFile
return nil
}
// Validate ensures the command has enough info to run
func (o *DeleteUserOptions) Validate() error {
_, ok := o.config.AuthInfos[o.user]
if !ok {
return fmt.Errorf("cannot delete user %s, not in %s", o.user, o.configFile)
}
return nil
}
// Run performs the command
func (o *DeleteUserOptions) Run() error {
delete(o.config.AuthInfos, o.user)
if err := clientcmd.ModifyConfig(o.configAccess, *o.config, true); err != nil {
return err
}
fmt.Fprintf(o.Out, "deleted user %s from %s\n", o.user, o.configFile)
return nil
}