Skip to content

Commit 0168440

Browse files
committed
update error aggregation
1 parent 43cb021 commit 0168440

File tree

2 files changed

+21
-23
lines changed

2 files changed

+21
-23
lines changed

pkg/cmd/cli/cli.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ func NewCommandCLI(name, fullName string, in io.Reader, out, errout io.Writer) *
169169
{
170170
Message: "Settings Commands:",
171171
Commands: []*cobra.Command{
172-
login.NewCmdLogout("logout", fullName+" logout", fullName+" login", f, in, out),
172+
login.NewCmdLogout("logout", fullName+" logout", fullName+" login", f, in, out, errout),
173173
cmd.NewCmdConfig(fullName, "config", out, errout),
174174
cmd.NewCmdWhoAmI(cmd.WhoAmIRecommendedCommandName, fullName+" "+cmd.WhoAmIRecommendedCommandName, f, out),
175175
cmd.NewCmdCompletion(fullName, f, out),

pkg/cmd/cli/cmd/login/logout.go

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ type LogoutOptions struct {
2323
StartingKubeConfig *kclientcmdapi.Config
2424
Config *restclient.Config
2525
Out io.Writer
26+
ErrOut io.Writer
2627

2728
PathOptions *kclientcmd.PathOptions
2829
}
@@ -47,9 +48,10 @@ var (
4748
)
4849

4950
// NewCmdLogout implements the OpenShift cli logout command
50-
func NewCmdLogout(name, fullName, ocLoginFullCommand string, f *osclientcmd.Factory, reader io.Reader, out io.Writer) *cobra.Command {
51+
func NewCmdLogout(name, fullName, ocLoginFullCommand string, f *osclientcmd.Factory, reader io.Reader, out, errOut io.Writer) *cobra.Command {
5152
options := &LogoutOptions{
5253
Out: out,
54+
ErrOut: errOut,
5355
}
5456

5557
cmds := &cobra.Command{
@@ -124,42 +126,38 @@ func (o LogoutOptions) RunLogout() error {
124126
return err
125127
}
126128

127-
if err := client.OAuthAccessTokens().Delete(token); err != nil {
128-
errs := []error{}
129-
130-
configErr := o.deleteTokenFromConfig()
131-
if configErr != nil {
132-
errs = append(errs, configErr)
133-
} else {
134-
fmt.Printf("Successfully removed user token from local config.\n\n")
135-
}
129+
errs := []error{}
130+
serverErr := client.OAuthAccessTokens().Delete(token)
131+
if serverErr != nil {
132+
errs = append(errs, serverErr)
133+
}
136134

137-
// append error from server
135+
if err := deleteTokenFromConfig(*o.StartingKubeConfig, o.PathOptions, token); err != nil {
138136
errs = append(errs, err)
139-
return kutilerrors.Flatten(kutilerrors.NewAggregate(errs))
137+
} else if serverErr != nil {
138+
// if token was not able to be deleted using api but was successfully removed
139+
// from client config, print brief explanation that token was still removed locally
140+
fmt.Fprintf(o.ErrOut, "%s\n\n", "An error ocurred deleting the token on the server. The token has been removed from your local configuration.")
140141
}
141142

142-
if err := o.deleteTokenFromConfig(); err != nil {
143-
return err
143+
if len(errs) > 0 {
144+
return kutilerrors.Flatten(kutilerrors.NewAggregate(errs))
144145
}
145146

146147
fmt.Fprintf(o.Out, "Logged %q out on %q\n", userInfo.Name, o.Config.Host)
147-
148148
return nil
149149
}
150150

151-
func (o LogoutOptions) deleteTokenFromConfig() error {
152-
newConfig := *o.StartingKubeConfig
153-
154-
for key, value := range newConfig.AuthInfos {
155-
if value.Token == o.Config.BearerToken {
151+
func deleteTokenFromConfig(config kclientcmdapi.Config, pathOptions *kclientcmd.PathOptions, bearerToken string) error {
152+
for key, value := range config.AuthInfos {
153+
if value.Token == bearerToken {
156154
value.Token = ""
157-
newConfig.AuthInfos[key] = value
155+
config.AuthInfos[key] = value
158156
// don't break, its possible that more than one user stanza has the same token.
159157
}
160158
}
161159

162-
if err := kclientcmd.ModifyConfig(o.PathOptions, newConfig, true); err != nil {
160+
if err := kclientcmd.ModifyConfig(pathOptions, config, true); err != nil {
163161
return err
164162
}
165163

0 commit comments

Comments
 (0)