From 3beaf98341876860b5c89283b5e6e4169f56b18e Mon Sep 17 00:00:00 2001 From: Slava Semushin Date: Fri, 21 Oct 2016 18:16:20 +0200 Subject: [PATCH] CleanupHostPathVolumes(): remove also directories from the filesystem. --- .../image_ecosystem/mongodb_replica_petset.go | 2 -- test/extended/util/framework.go | 31 +++++++++++++++++-- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/test/extended/image_ecosystem/mongodb_replica_petset.go b/test/extended/image_ecosystem/mongodb_replica_petset.go index 2b6a93909d72..92bccdbaca3e 100644 --- a/test/extended/image_ecosystem/mongodb_replica_petset.go +++ b/test/extended/image_ecosystem/mongodb_replica_petset.go @@ -34,8 +34,6 @@ var _ = g.Describe("[image_ecosystem][mongodb][Slow] openshift mongodb replicati defer func() { // We're removing only PVs because all other things will be removed // together with namespace. - // TODO: unfortunately it doesn't remove the directories on the filesystem. - // Need to figure out how to fix it. err := exutil.CleanupHostPathVolumes(oc.AdminKubeREST().PersistentVolumes(), oc.Namespace()) if err != nil { fmt.Fprintf(g.GinkgoWriter, "WARNING: couldn't cleanup persistent volumes: %v", err) diff --git a/test/extended/util/framework.go b/test/extended/util/framework.go index 43081ee670b4..e1e3e7df881e 100644 --- a/test/extended/util/framework.go +++ b/test/extended/util/framework.go @@ -1095,8 +1095,35 @@ func CleanupHostPathVolumes(c kclient.PersistentVolumeInterface, prefix string) } prefix = fmt.Sprintf("%s%s-", pvPrefix, prefix) for _, pv := range pvs.Items { - if strings.HasPrefix(pv.Name, prefix) { - c.Delete(pv.Name) + if !strings.HasPrefix(pv.Name, prefix) { + continue + } + + if err = c.Delete(pv.Name); err != nil { + fmt.Fprintf(g.GinkgoWriter, "WARNING: couldn't remove PV %s: %v\n", pv.Name, err) + continue + } + + pvInfo, err := c.Get(pv.Name) + if err != nil { + fmt.Fprintf(g.GinkgoWriter, "WARNING: couldn't get meta info for PV %s: %v\n", pv.Name, err) + continue + } + + volumeDir := pvInfo.Spec.HostPath.Path + if err = os.RemoveAll(volumeDir); err != nil { + fmt.Fprintf(g.GinkgoWriter, "WARNING: couldn't remove directory %q: %v\n", volumeDir, err) + continue + } + + parentDir := filepath.Dir(volumeDir) + if parentDir == "." || parentDir == "/" { + continue + } + + if err = os.Remove(parentDir); err != nil { + fmt.Fprintf(g.GinkgoWriter, "WARNING: couldn't remove directory %q: %v\n", parentDir, err) + continue } } return nil