diff --git a/cli/cluster/cluster.go b/cli/cluster/cluster.go index 64a8b76a29ce..faf61dcbd915 100644 --- a/cli/cluster/cluster.go +++ b/cli/cluster/cluster.go @@ -98,6 +98,29 @@ func DeleteHost(api libmachine.API) error { return m.ToError() } +// GetHostStatus gets the status of the host VM. +func GetHostStatus(api libmachine.API) (string, error) { + dne := "Does Not Exist" + exists, err := api.Exists(constants.MachineName) + if err != nil { + return "", err + } + if !exists { + return dne, nil + } + + host, err := api.Load(constants.MachineName) + if err != nil { + return "", err + } + + s, err := host.Driver.GetState() + if s.String() == "" { + return dne, err + } + return s.String(), err +} + type sshAble interface { RunSSHCommand(string) (string, error) } diff --git a/cli/cluster/cluster_test.go b/cli/cluster/cluster_test.go index 55eaa73f6260..d35f6dc49ed8 100644 --- a/cli/cluster/cluster_test.go +++ b/cli/cluster/cluster_test.go @@ -233,3 +233,25 @@ func TestDeleteHostMultipleErrors(t *testing.T) { } } } + +func TestGetHostStatus(t *testing.T) { + api := &tests.MockAPI{} + + checkState := func(expected string) { + s, err := GetHostStatus(api) + if err != nil { + t.Fatalf("Unexpected error getting status: %s", s) + } + if s != expected { + t.Fatalf("Expected status: %s, got %s", s, expected) + } + } + + checkState("Does Not Exist") + + createHost(api) + checkState(state.Running.String()) + + StopHost(api) + checkState(state.Stopped.String()) +} diff --git a/cli/cmd/delete.go b/cli/cmd/delete.go index 83bf76d39bac..6f93f6256688 100644 --- a/cli/cmd/delete.go +++ b/cli/cmd/delete.go @@ -1,16 +1,15 @@ -// Copyright © 2016 NAME HERE -// -// 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. +/* +Copyright 2015 The Kubernetes Authors All rights reserved. +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 cmd diff --git a/cli/cmd/status.go b/cli/cmd/status.go new file mode 100644 index 000000000000..491bafa5f042 --- /dev/null +++ b/cli/cmd/status.go @@ -0,0 +1,45 @@ +/* +Copyright 2015 The Kubernetes Authors All rights reserved. +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 cmd + +import ( + "log" + "os" + + "github.com/docker/machine/libmachine" + "github.com/kubernetes/minikube/cli/cluster" + "github.com/kubernetes/minikube/cli/constants" + "github.com/spf13/cobra" +) + +// statusCmd represents the status command +var statusCmd = &cobra.Command{ + Use: "status", + Short: "Gets the status of a local kubernetes cluster.", + Long: `Gets the status of a local kubernetes cluster.`, + Run: func(cmd *cobra.Command, args []string) { + api := libmachine.NewClient(constants.Minipath, constants.MakeMiniPath("certs")) + defer api.Close() + s, err := cluster.GetHostStatus(api) + if err != nil { + log.Println("Error getting machine status:", err) + os.Exit(1) + } + log.Println("Status:", s) + }, +} + +func init() { + RootCmd.AddCommand(statusCmd) +}