From cc1a6f11f07a15ccea8db07b566155fbf1da1694 Mon Sep 17 00:00:00 2001 From: Priya Wadhwa Date: Fri, 21 Feb 2020 12:13:34 -0800 Subject: [PATCH] Delete volume if it isn't extracted properly so future runs don't try to use it --- pkg/drivers/kic/oci/volumes.go | 16 ++++++++++++++++ pkg/minikube/preload/preload.go | 1 - 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/pkg/drivers/kic/oci/volumes.go b/pkg/drivers/kic/oci/volumes.go index 36742c59d..54a1d3da8 100644 --- a/pkg/drivers/kic/oci/volumes.go +++ b/pkg/drivers/kic/oci/volumes.go @@ -106,6 +106,10 @@ func CreatePreloadedImagesVolume(k8sVersion, baseImage, profile string) (string, tarballPath := preload.TarballFilepath(k8sVersion) if err := extractTarballToVolume(tarballPath, volumeName, baseImage); err != nil { + // If the extraction didn't work, delete the corrupt docker volume + if err := deleteDockerVolume(volumeName); err != nil { + glog.Warningf("Corrupt docker volume %s was not deleted successfully. You may need to delete it manually via `docker volume rm %s` for minikube to continue to work.", volumeName, volumeName) + } return "", errors.Wrap(err, "extracting tarball to volume") } return volumeName, nil @@ -156,3 +160,15 @@ func createDockerVolume(name string) error { } return nil } + +// deleteDockerVolume deletes a docker volume with the given name +func deleteDockerVolume(name string) error { + if err := PointToHostDockerDaemon(); err != nil { + return errors.Wrap(err, "point host docker-daemon") + } + cmd := exec.Command(Docker, "volume", "rm", name) + if out, err := cmd.CombinedOutput(); err != nil { + return errors.Wrapf(err, "output %s", string(out)) + } + return nil +} diff --git a/pkg/minikube/preload/preload.go b/pkg/minikube/preload/preload.go index cf64230ec..885273667 100644 --- a/pkg/minikube/preload/preload.go +++ b/pkg/minikube/preload/preload.go @@ -85,7 +85,6 @@ func CacheTarball(k8sVersion string) error { } out.T(out.FileDownload, "Downloading preloaded images tarball for k8s {{.version}}:", out.V{"version": k8sVersion}) - os.Remove(targetFilepath) client := &getter.Client{ Src: url, Dst: targetFilepath, -- GitLab