diff --git a/cmd/minikube/cmd/status.go b/cmd/minikube/cmd/status.go index 64a20bcddfd1..ad050cf199df 100644 --- a/cmd/minikube/cmd/status.go +++ b/cmd/minikube/cmd/status.go @@ -45,8 +45,10 @@ var output string const ( // Additional states used by kubeconfig - Configured = "Configured" // analogous to state.Saved - Misconfigured = "Misconfigured" // analogous to state.Error + Configured = "Configured" // ~state.Saved + Misconfigured = "Misconfigured" // ~state.Error + // Additional states used for clarity + Nonexistent = "Nonexistent" // ~state.None ) // Status holds string representations of component states @@ -92,6 +94,9 @@ var statusCmd = &cobra.Command{ if err != nil { glog.Errorf("status error: %v", err) } + if st.Host == Nonexistent { + glog.Errorf("The %q cluster does not exist!", machineName) + } switch strings.ToLower(output) { case "text": @@ -125,11 +130,22 @@ func exitCode(st *Status) int { } func status(api libmachine.API, name string) (*Status, error) { - st := &Status{} + st := &Status{ + Host: Nonexistent, + APIServer: Nonexistent, + Kubelet: Nonexistent, + Kubeconfig: Nonexistent, + } + hs, err := cluster.GetHostStatus(api, name) if err != nil { return st, errors.Wrap(err, "host") } + + // Nonexistent it is! + if hs == state.None.String() { + return st, nil + } st.Host = hs if st.Host != state.Running.String() { return st, nil diff --git a/cmd/minikube/cmd/status_test.go b/cmd/minikube/cmd/status_test.go index 015e5bd48379..ef414631f832 100644 --- a/cmd/minikube/cmd/status_test.go +++ b/cmd/minikube/cmd/status_test.go @@ -31,6 +31,7 @@ func TestExitCode(t *testing.T) { {"ok", 0, &Status{Host: "Running", Kubelet: "Running", APIServer: "Running", Kubeconfig: Configured}}, {"paused", 2, &Status{Host: "Running", Kubelet: "Stopped", APIServer: "Paused", Kubeconfig: Configured}}, {"down", 7, &Status{Host: "Stopped", Kubelet: "Stopped", APIServer: "Stopped", Kubeconfig: Misconfigured}}, + {"missing", 7, &Status{Host: "Nonexistent", Kubelet: "Nonexistent", APIServer: "Nonexistent", Kubeconfig: "Nonexistent"}}, } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) {