diff --git a/cmd/minikube/cmd/stop.go b/cmd/minikube/cmd/stop.go index bd406e003640..d5519d0e1b21 100644 --- a/cmd/minikube/cmd/stop.go +++ b/cmd/minikube/cmd/stop.go @@ -24,15 +24,20 @@ import ( "github.com/golang/glog" "github.com/pkg/errors" "github.com/spf13/cobra" + "github.com/spf13/viper" + "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/driver" "k8s.io/minikube/pkg/minikube/exit" "k8s.io/minikube/pkg/minikube/kubeconfig" + "k8s.io/minikube/pkg/minikube/localpath" "k8s.io/minikube/pkg/minikube/machine" "k8s.io/minikube/pkg/minikube/mustload" "k8s.io/minikube/pkg/minikube/out" "k8s.io/minikube/pkg/util/retry" ) +var stopAll bool + // stopCmd represents the stop command var stopCmd = &cobra.Command{ Use: "stop", @@ -42,28 +47,54 @@ itself, leaving all files intact. The cluster can be started again with the "sta Run: runStop, } -// runStop handles the executes the flow of "minikube stop" -func runStop(cmd *cobra.Command, args []string) { - cname := ClusterFlagValue() +func init() { - api, cc := mustload.Partial(cname) - defer api.Close() + stopCmd.Flags().BoolVar(&stopAll, "all", false, "Set flag to stop all profiles") - for _, n := range cc.Nodes { - machineName := driver.MachineName(*cc, n) - nonexistent := stop(api, machineName) + if err := viper.GetViper().BindPFlags(stopCmd.Flags()); err != nil { + exit.WithError("unable to bind flags", err) + } - if !nonexistent { - out.T(out.Stopped, `Node "{{.node_name}}" stopped.`, out.V{"node_name": machineName}) + RootCmd.AddCommand(stopCmd) +} + +// runStop handles the executes the flow of "minikube stop" +func runStop(cmd *cobra.Command, args []string) { + // new code + var profilesToStop []string + if stopAll { + validProfiles, _, err := config.ListProfiles() + if err != nil { + glog.Warningf("'error loading profiles in minikube home %q: %v", localpath.MiniPath(), err) + } + for _, profile := range validProfiles { + profilesToStop = append(profilesToStop, profile.Name) } + } else { + cname := ClusterFlagValue() + profilesToStop = append(profilesToStop, cname) } + for _, profile := range profilesToStop { + // end new code + api, cc := mustload.Partial(profile) + defer api.Close() + + for _, n := range cc.Nodes { + machineName := driver.MachineName(*cc, n) + nonexistent := stop(api, machineName) + + if !nonexistent { + out.T(out.Stopped, `Node "{{.node_name}}" stopped.`, out.V{"node_name": machineName}) + } + } - if err := killMountProcess(); err != nil { - out.WarningT("Unable to kill mount process: {{.error}}", out.V{"error": err}) - } + if err := killMountProcess(); err != nil { + out.WarningT("Unable to kill mount process: {{.error}}", out.V{"error": err}) + } - if err := kubeconfig.UnsetCurrentContext(cname, kubeconfig.PathFromEnv()); err != nil { - exit.WithError("update config", err) + if err := kubeconfig.UnsetCurrentContext(profile, kubeconfig.PathFromEnv()); err != nil { + exit.WithError("update config", err) + } } } diff --git a/site/content/en/docs/commands/stop.md b/site/content/en/docs/commands/stop.md index 196661393089..6764bd71f9f8 100644 --- a/site/content/en/docs/commands/stop.md +++ b/site/content/en/docs/commands/stop.md @@ -22,6 +22,7 @@ minikube stop [flags] ### Options ``` + --all Set flag to stop all profiles -h, --help help for stop ```