From e8015d949064d03df55d8ac7ff17ee29996f9290 Mon Sep 17 00:00:00 2001 From: Thomas Stromberg Date: Tue, 15 Jan 2019 16:34:24 -0800 Subject: [PATCH 1/5] Fix awkwardly formatted error message: out is not a command-line. --- pkg/minikube/bootstrapper/kubeadm/kubeadm.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/minikube/bootstrapper/kubeadm/kubeadm.go b/pkg/minikube/bootstrapper/kubeadm/kubeadm.go index 0093414c13f8..0849d9860f81 100644 --- a/pkg/minikube/bootstrapper/kubeadm/kubeadm.go +++ b/pkg/minikube/bootstrapper/kubeadm/kubeadm.go @@ -170,7 +170,7 @@ func (k *KubeadmBootstrapper) StartCluster(k8s config.KubernetesConfig) error { out, err := k.c.CombinedOutput(b.String()) if err != nil { - return errors.Wrapf(err, "kubeadm init error %s running command: %s", b.String(), out) + return errors.Wrapf(err, "kubeadm init failed: %s\n%s\n", b.String(), out) } if version.LT(semver.MustParse("1.10.0-alpha.0")) { From 649b6b96411888bc5c90dfe0a4733bf0ca88a8b2 Mon Sep 17 00:00:00 2001 From: Thomas Stromberg Date: Tue, 15 Jan 2019 16:36:26 -0800 Subject: [PATCH 2/5] Return output, even if CombinedOutput fails --- pkg/minikube/bootstrapper/ssh_runner.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/minikube/bootstrapper/ssh_runner.go b/pkg/minikube/bootstrapper/ssh_runner.go index f10cb4dab5c0..255a0f31aea1 100644 --- a/pkg/minikube/bootstrapper/ssh_runner.go +++ b/pkg/minikube/bootstrapper/ssh_runner.go @@ -145,7 +145,7 @@ func (s *SSHRunner) CombinedOutput(cmd string) (string, error) { err = teeSSH(sess, cmd, &combined, &combined) out := combined.b.String() if err != nil { - return "", err + return out, err } return out, nil } From bf02c016b33c1fdc2692b24b8c53f9cf1877f5b9 Mon Sep 17 00:00:00 2001 From: Thomas Stromberg Date: Tue, 15 Jan 2019 16:37:04 -0800 Subject: [PATCH 3/5] Make failure prompt text more clear --- cmd/util/util.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/cmd/util/util.go b/cmd/util/util.go index 54604ee1aa0d..572eaf4e58ff 100644 --- a/cmd/util/util.go +++ b/cmd/util/util.go @@ -139,17 +139,22 @@ func MaybeReportErrorAndExitWithCode(errToReport error, returnCode int) { `================================================================================ An error has occurred. Would you like to opt in to sending anonymized crash information to minikube to help prevent future errors? -To opt out of these messages, run the command: - minikube config set WantReportErrorPrompt false + +To disable this prompt, run: 'minikube config set WantReportErrorPrompt false' ================================================================================`) if PromptUserForAccept(os.Stdin) { - minikubeConfig.Set(config.WantReportError, "true") - err = ReportError(errToReport, constants.ReportingURL) + err = minikubeConfig.Set(config.WantReportError, "true") + if err == nil { + err = ReportError(errToReport, constants.ReportingURL) + } + } else { + fmt.Println("Bummer, perhaps next time!") } } if err != nil { glog.Errorf(err.Error()) } + fmt.Printf("\n\nminikube failed :( exiting with error code %d\n", returnCode) os.Exit(returnCode) } @@ -181,6 +186,7 @@ func PromptUserForAccept(r io.Reader) bool { return false } case <-time.After(30 * time.Second): + fmt.Println("Prompt timed out.") return false } } From 393d1af3c632f6dc54e88bbf0c91b534fdc6653f Mon Sep 17 00:00:00 2001 From: Thomas Stromberg Date: Tue, 15 Jan 2019 16:37:28 -0800 Subject: [PATCH 4/5] mention 'minikube logs' for debugging start failures --- cmd/minikube/cmd/start.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/minikube/cmd/start.go b/cmd/minikube/cmd/start.go index 1280bb5a4aa4..b809f0eb0d43 100644 --- a/cmd/minikube/cmd/start.go +++ b/cmd/minikube/cmd/start.go @@ -341,7 +341,7 @@ func runStart(cmd *cobra.Command, args []string) { fmt.Println("Starting cluster components...") if err := k8sBootstrapper.StartCluster(kubernetesConfig); err != nil { glog.Errorln("Error starting cluster: ", err) - cmdutil.MaybeReportErrorAndExit(err) + cmdutil.MaybeReportErrorAndExit(fmt.Errorf("%s\nYou may be able to failure logs using: 'minikube logs'\n")) } } else { fmt.Println("Machine exists, restarting cluster components...") From c2bf394378f0aece9a89ebe804dbd070e9e19bc1 Mon Sep 17 00:00:00 2001 From: Thomas Stromberg Date: Wed, 16 Jan 2019 12:14:56 -0800 Subject: [PATCH 5/5] Minor improvements to output and comments --- cmd/minikube/cmd/start.go | 4 ++-- cmd/util/util.go | 5 ++++- pkg/minikube/bootstrapper/kubeadm/kubeadm.go | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/cmd/minikube/cmd/start.go b/cmd/minikube/cmd/start.go index b809f0eb0d43..bb2e93458b64 100644 --- a/cmd/minikube/cmd/start.go +++ b/cmd/minikube/cmd/start.go @@ -340,8 +340,8 @@ func runStart(cmd *cobra.Command, args []string) { if !exists || config.VMDriver == constants.DriverNone { fmt.Println("Starting cluster components...") if err := k8sBootstrapper.StartCluster(kubernetesConfig); err != nil { - glog.Errorln("Error starting cluster: ", err) - cmdutil.MaybeReportErrorAndExit(fmt.Errorf("%s\nYou may be able to failure logs using: 'minikube logs'\n")) + glog.Errorf("Error starting cluster: %v", err) + cmdutil.MaybeReportErrorAndExit(err) } } else { fmt.Println("Machine exists, restarting cluster components...") diff --git a/cmd/util/util.go b/cmd/util/util.go index 572eaf4e58ff..123d55661cc8 100644 --- a/cmd/util/util.go +++ b/cmd/util/util.go @@ -130,6 +130,7 @@ func MaybeReportErrorAndExit(errToReport error) { MaybeReportErrorAndExitWithCode(errToReport, 1) } +// MaybeReportErrorAndExitWithCode prompts the user if they would like to report a stack trace, and exits. func MaybeReportErrorAndExitWithCode(errToReport error, returnCode int) { var err error if viper.GetBool(config.WantReportError) { @@ -151,8 +152,10 @@ To disable this prompt, run: 'minikube config set WantReportErrorPrompt false' fmt.Println("Bummer, perhaps next time!") } } + + // This happens when the error was created without errors.Wrap(), and thus has no trace data. if err != nil { - glog.Errorf(err.Error()) + glog.Infof("report error failed: %v", err) } fmt.Printf("\n\nminikube failed :( exiting with error code %d\n", returnCode) os.Exit(returnCode) diff --git a/pkg/minikube/bootstrapper/kubeadm/kubeadm.go b/pkg/minikube/bootstrapper/kubeadm/kubeadm.go index 0849d9860f81..a62a63da0715 100644 --- a/pkg/minikube/bootstrapper/kubeadm/kubeadm.go +++ b/pkg/minikube/bootstrapper/kubeadm/kubeadm.go @@ -170,7 +170,7 @@ func (k *KubeadmBootstrapper) StartCluster(k8s config.KubernetesConfig) error { out, err := k.c.CombinedOutput(b.String()) if err != nil { - return errors.Wrapf(err, "kubeadm init failed: %s\n%s\n", b.String(), out) + return errors.Wrapf(err, "kubeadm init: %s\n%s\n", b.String(), out) } if version.LT(semver.MustParse("1.10.0-alpha.0")) {