From db23825bfc98c309f8ebcb61e92ccb0924ceddb7 Mon Sep 17 00:00:00 2001 From: Priya Wadhwa Date: Wed, 30 Sep 2020 15:17:58 -0400 Subject: [PATCH] Move exit.Message function so that we aren't exiting from a library --- cmd/minikube/cmd/start.go | 9 +++++++++ pkg/drivers/kic/kic.go | 8 ++++---- pkg/drivers/kic/oci/errors.go | 3 +++ pkg/minikube/node/start.go | 2 +- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/cmd/minikube/cmd/start.go b/cmd/minikube/cmd/start.go index 10f9c8636f..a729883cb3 100644 --- a/cmd/minikube/cmd/start.go +++ b/cmd/minikube/cmd/start.go @@ -197,6 +197,9 @@ func runStart(cmd *cobra.Command, args []string) { machine.MaybeDisplayAdvice(err, ds.Name) if specified { // If the user specified a driver, don't fallback to anything else + if errors.Cause(err) == oci.ErrInsufficientDockerStorage { + exit.Message(reason.RsrcInsufficientDockerStorage, "preload extraction failed: \"No space left on device\"") + } exit.Error(reason.GuestProvision, "error provisioning host", err) } else { success := false @@ -224,6 +227,9 @@ func runStart(cmd *cobra.Command, args []string) { } } if !success { + if errors.Cause(err) == oci.ErrInsufficientDockerStorage { + exit.Message(reason.RsrcInsufficientDockerStorage, "preload extraction failed: \"No space left on device\"") + } exit.Error(reason.GuestProvision, "error provisioning host", err) } } @@ -248,6 +254,9 @@ func runStart(cmd *cobra.Command, args []string) { stopProfile(existing.Name) starter, err = provisionWithDriver(cmd, ds, existing) if err != nil { + if errors.Cause(err) == oci.ErrInsufficientDockerStorage { + exit.Message(reason.RsrcInsufficientDockerStorage, "preload extraction failed: \"No space left on device\"") + } exit.Error(reason.GuestProvision, "error provisioning host", err) } } diff --git a/pkg/drivers/kic/kic.go b/pkg/drivers/kic/kic.go index 16a8703d21..b1407257c7 100644 --- a/pkg/drivers/kic/kic.go +++ b/pkg/drivers/kic/kic.go @@ -37,8 +37,6 @@ import ( "k8s.io/minikube/pkg/minikube/constants" "k8s.io/minikube/pkg/minikube/cruntime" "k8s.io/minikube/pkg/minikube/download" - "k8s.io/minikube/pkg/minikube/exit" - "k8s.io/minikube/pkg/minikube/reason" "k8s.io/minikube/pkg/minikube/sysinit" "k8s.io/minikube/pkg/util/retry" ) @@ -126,6 +124,7 @@ func (d *Driver) Create() error { var waitForPreload sync.WaitGroup waitForPreload.Add(1) + var pErr error go func() { defer waitForPreload.Done() // If preload doesn't exist, don't bother extracting tarball to volume @@ -137,7 +136,8 @@ func (d *Driver) Create() error { // Extract preloaded images to container if err := oci.ExtractTarballToVolume(d.NodeConfig.OCIBinary, download.TarballPath(d.NodeConfig.KubernetesVersion, d.NodeConfig.ContainerRuntime), params.Name, d.NodeConfig.ImageDigest); err != nil { if strings.Contains(err.Error(), "No space left on device") { - exit.Message(reason.RsrcInsufficientDockerStorage, "preload extraction failed: \"No space left on device\"") + pErr = oci.ErrInsufficientDockerStorage + return } glog.Infof("Unable to extract preloaded tarball to volume: %v", err) } else { @@ -154,7 +154,7 @@ func (d *Driver) Create() error { } waitForPreload.Wait() - return nil + return pErr } // prepareSSH will generate keys and copy to the container so minikube ssh works diff --git a/pkg/drivers/kic/oci/errors.go b/pkg/drivers/kic/oci/errors.go index 8c30201f97..292ef601fb 100644 --- a/pkg/drivers/kic/oci/errors.go +++ b/pkg/drivers/kic/oci/errors.go @@ -45,6 +45,9 @@ var ErrExitedUnexpectedly = errors.New("container exited unexpectedly") // ErrDaemonInfo is thrown when docker/podman info is failing or not responding var ErrDaemonInfo = errors.New("daemon info not responding") +// ErrInsufficientDockerStorage is thrown when there is not more storage for docker +var ErrInsufficientDockerStorage = &FailFastError{errors.New("insufficient docker storage, no space left on device")} + // LogContainerDebug will print relevant docker/podman infos after a container fails func LogContainerDebug(ociBin string, name string) string { rr, err := containerInspect(ociBin, name) diff --git a/pkg/minikube/node/start.go b/pkg/minikube/node/start.go index 6982f10135..036998b33c 100644 --- a/pkg/minikube/node/start.go +++ b/pkg/minikube/node/start.go @@ -383,7 +383,7 @@ func startHost(api libmachine.API, cc *config.ClusterConfig, n *config.Node, del } } - if _, ff := err.(*oci.FailFastError); ff { + if err, ff := errors.Cause(err).(*oci.FailFastError); ff { glog.Infof("will skip retrying to create machine because error is not retriable: %v", err) return host, exists, err }