diff --git a/pkg/oc/bootstrap/docker/openshift/login.go b/pkg/oc/bootstrap/docker/openshift/login.go index 2d17b8b4f97b..d7dfe00f950a 100644 --- a/pkg/oc/bootstrap/docker/openshift/login.go +++ b/pkg/oc/bootstrap/docker/openshift/login.go @@ -18,7 +18,7 @@ import ( ) // Login logs into the specified server using given credentials and CA file -func Login(username, password, server, configDir string, f *clientcmd.Factory, c *cobra.Command, out io.Writer) error { +func Login(username, password, server, configDir string, f *clientcmd.Factory, c *cobra.Command, out, errOut io.Writer) error { existingConfig, err := f.OpenShiftClientConfig().RawConfig() if err != nil { if !os.IsNotExist(err) { @@ -72,6 +72,7 @@ func Login(username, password, server, configDir string, f *clientcmd.Factory, c Username: username, Password: password, Out: output, + ErrOut: errOut, StartingKubeConfig: newConfig, PathOptions: config.NewPathOptions(c), } diff --git a/pkg/oc/bootstrap/docker/up.go b/pkg/oc/bootstrap/docker/up.go index 0d554f313534..b72af6f5ecdc 100644 --- a/pkg/oc/bootstrap/docker/up.go +++ b/pkg/oc/bootstrap/docker/up.go @@ -1112,7 +1112,7 @@ func (c *ClientStartConfig) RegisterTemplateServiceBroker(out io.Writer) error { // Login logs into the new server and sets up a default user and project func (c *ClientStartConfig) Login(out io.Writer) error { server := c.OpenShiftHelper().Master(c.ServerIP) - return openshift.Login(initialUser, initialPassword, server, c.LocalConfigDir, c.originalFactory, c.command, out) + return openshift.Login(initialUser, initialPassword, server, c.LocalConfigDir, c.originalFactory, c.command, out, out) } // CreateProject creates a new project for the current user diff --git a/pkg/oc/cli/cli.go b/pkg/oc/cli/cli.go index 68797546c626..a93111926948 100644 --- a/pkg/oc/cli/cli.go +++ b/pkg/oc/cli/cli.go @@ -86,7 +86,7 @@ func NewCommandCLI(name, fullName string, in io.Reader, out, errout io.Writer) * f := clientcmd.New(cmds.PersistentFlags()) - loginCmd := login.NewCmdLogin(fullName, f, in, out) + loginCmd := login.NewCmdLogin(fullName, f, in, out, errout) secretcmds := secrets.NewCmdSecrets(secrets.SecretsRecommendedName, fullName+" "+secrets.SecretsRecommendedName, f, in, out, errout, fullName+" edit") groups := ktemplates.CommandGroups{ diff --git a/pkg/oc/cli/cmd/login/login.go b/pkg/oc/cli/cmd/login/login.go index d259ffcbaa86..a139a2a77d6f 100644 --- a/pkg/oc/cli/cmd/login/login.go +++ b/pkg/oc/cli/cmd/login/login.go @@ -46,10 +46,11 @@ var ( ) // NewCmdLogin implements the OpenShift cli login command -func NewCmdLogin(fullName string, f *osclientcmd.Factory, reader io.Reader, out io.Writer) *cobra.Command { +func NewCmdLogin(fullName string, f *osclientcmd.Factory, reader io.Reader, out, errOut io.Writer) *cobra.Command { options := &LoginOptions{ Reader: reader, Out: out, + ErrOut: errOut, } cmds := &cobra.Command{ diff --git a/pkg/oc/cli/cmd/login/loginoptions.go b/pkg/oc/cli/cmd/login/loginoptions.go index d047854a5dcc..73f8fe01059a 100644 --- a/pkg/oc/cli/cmd/login/loginoptions.go +++ b/pkg/oc/cli/cmd/login/loginoptions.go @@ -7,7 +7,6 @@ import ( "fmt" "io" "net" - "net/http" "os" "path/filepath" "time" @@ -56,6 +55,7 @@ type LoginOptions struct { Config *restclient.Config Reader io.Reader Out io.Writer + ErrOut io.Writer // cert data to be used when authenticating CertFile string @@ -226,15 +226,10 @@ func (o *LoginOptions) gatherAuthInfo() error { token, err := tokencmd.RequestToken(o.Config, o.Reader, o.Username, o.Password) if err != nil { suggestion := "verify you have provided the correct host and port and that the server is currently running." + fmt.Fprintf(o.ErrOut, "error: %v - %v\n", err, suggestion) - // if internal error occurs, suggest making sure - // client is connecting to the right host:port - if statusErr, ok := err.(*kerrors.StatusError); ok { - if statusErr.Status().Code == http.StatusInternalServerError { - return fmt.Errorf("error: The server was unable to respond - %v", suggestion) - } - } - return fmt.Errorf("%v - %v", err, suggestion) + // return error as-is, as method caller expects to check its type + return err } clientConfig.BearerToken = token diff --git a/test/integration/login_test.go b/test/integration/login_test.go index 6d0985bdcd60..e8d39036e422 100644 --- a/test/integration/login_test.go +++ b/test/integration/login_test.go @@ -139,7 +139,8 @@ func newLoginOptions(server string, username string, password string, insecure b Password: password, InsecureTLS: insecure, - Out: ioutil.Discard, + Out: ioutil.Discard, + ErrOut: ioutil.Discard, } return loginOptions diff --git a/test/integration/oauth_oidc_test.go b/test/integration/oauth_oidc_test.go index 5604c7c87dec..772d0b4a6208 100644 --- a/test/integration/oauth_oidc_test.go +++ b/test/integration/oauth_oidc_test.go @@ -162,6 +162,7 @@ func TestOAuthOIDC(t *testing.T) { StartingKubeConfig: &clientcmdapi.Config{}, Reader: bytes.NewBufferString("mylogin\nmypassword\n"), Out: loginOutput, + ErrOut: ioutil.Discard, } if err := loginOptions.GatherInfo(); err != nil { t.Fatalf("Error logging in: %v\n%v", err, loginOutput.String()) diff --git a/test/integration/oauth_request_header_test.go b/test/integration/oauth_request_header_test.go index fe4fa55b33a4..ad54ecb21904 100644 --- a/test/integration/oauth_request_header_test.go +++ b/test/integration/oauth_request_header_test.go @@ -310,6 +310,7 @@ func TestOAuthRequestHeader(t *testing.T) { StartingKubeConfig: &clientcmdapi.Config{}, Reader: bytes.NewBufferString("myusername\nmypassword\n"), Out: loginOutput, + ErrOut: ioutil.Discard, } if err := loginOptions.GatherInfo(); err != nil { t.Fatalf("Error trying to determine server info: %v\n%v", err, loginOutput.String())