Fix resource leaking PDs for volume mode test

fixes #74380
This commit is contained in:
Masaki Kimura 2019-02-25 23:55:38 +00:00
parent 1eb2acca99
commit c5155f81a0
2 changed files with 20 additions and 32 deletions

View File

@ -232,14 +232,18 @@ func (r *genericVolumeTestResource) cleanupResource() {
case testpatterns.DynamicPV: case testpatterns.DynamicPV:
By("Deleting pvc") By("Deleting pvc")
// We only delete the PVC so that PV (and disk) can be cleaned up by dynamic provisioner // We only delete the PVC so that PV (and disk) can be cleaned up by dynamic provisioner
if r.pv.Spec.PersistentVolumeReclaimPolicy != v1.PersistentVolumeReclaimDelete { if r.pv != nil && r.pv.Spec.PersistentVolumeReclaimPolicy != v1.PersistentVolumeReclaimDelete {
framework.Failf("Test framework does not currently support Dynamically Provisioned Persistent Volume %v specified with reclaim policy that isnt %v", framework.Failf("Test framework does not currently support Dynamically Provisioned Persistent Volume %v specified with reclaim policy that isnt %v",
r.pv.Name, v1.PersistentVolumeReclaimDelete) r.pv.Name, v1.PersistentVolumeReclaimDelete)
} }
err := framework.DeletePersistentVolumeClaim(f.ClientSet, r.pvc.Name, f.Namespace.Name) if r.pvc != nil {
framework.ExpectNoError(err, "Failed to delete PVC %v", r.pvc.Name) err := framework.DeletePersistentVolumeClaim(f.ClientSet, r.pvc.Name, f.Namespace.Name)
err = framework.WaitForPersistentVolumeDeleted(f.ClientSet, r.pv.Name, 5*time.Second, 5*time.Minute) framework.ExpectNoError(err, "Failed to delete PVC %v", r.pvc.Name)
framework.ExpectNoError(err, "Persistent Volume %v not deleted by dynamic provisioner", r.pv.Name) if r.pv != nil {
err = framework.WaitForPersistentVolumeDeleted(f.ClientSet, r.pv.Name, 5*time.Second, 5*time.Minute)
framework.ExpectNoError(err, "Persistent Volume %v not deleted by dynamic provisioner", r.pv.Name)
}
}
default: default:
framework.Failf("Found PVC (%v) or PV (%v) but not running Preprovisioned or Dynamic test pattern", r.pvc, r.pv) framework.Failf("Found PVC (%v) or PV (%v) but not running Preprovisioned or Dynamic test pattern", r.pvc, r.pv)
} }

View File

@ -25,7 +25,6 @@ import (
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
storagev1 "k8s.io/api/storage/v1" storagev1 "k8s.io/api/storage/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
utilerrors "k8s.io/apimachinery/pkg/util/errors"
clientset "k8s.io/client-go/kubernetes" clientset "k8s.io/client-go/kubernetes"
"k8s.io/kubernetes/test/e2e/framework" "k8s.io/kubernetes/test/e2e/framework"
"k8s.io/kubernetes/test/e2e/storage/testpatterns" "k8s.io/kubernetes/test/e2e/storage/testpatterns"
@ -67,12 +66,10 @@ func (t *volumeModeTestSuite) defineTests(driver TestDriver, pattern testpattern
config *PerTestConfig config *PerTestConfig
testCleanup func() testCleanup func()
cs clientset.Interface cs clientset.Interface
ns *v1.Namespace ns *v1.Namespace
sc *storagev1.StorageClass // genericVolumeTestResource contains pv, pvc, sc, etc., owns cleaning that up
pvc *v1.PersistentVolumeClaim genericVolumeTestResource
pv *v1.PersistentVolume
volume TestVolume
} }
var ( var (
dInfo = driver.GetDriverInfo() dInfo = driver.GetDriverInfo()
@ -104,6 +101,12 @@ func (t *volumeModeTestSuite) defineTests(driver TestDriver, pattern testpattern
volumeNodeAffinity *v1.VolumeNodeAffinity volumeNodeAffinity *v1.VolumeNodeAffinity
) )
l.genericVolumeTestResource = genericVolumeTestResource{
driver: driver,
config: l.config,
pattern: pattern,
}
// Create volume for pre-provisioned volume tests // Create volume for pre-provisioned volume tests
l.volume = CreateVolume(driver, l.config, pattern.VolType) l.volume = CreateVolume(driver, l.config, pattern.VolType)
@ -144,26 +147,7 @@ func (t *volumeModeTestSuite) defineTests(driver TestDriver, pattern testpattern
} }
cleanup := func() { cleanup := func() {
if l.pv != nil || l.pvc != nil { l.cleanupResource()
By("Deleting pv and pvc")
errs := framework.PVPVCCleanup(f.ClientSet, f.Namespace.Name, l.pv, l.pvc)
if len(errs) > 0 {
framework.Logf("Failed to delete PV and/or PVC: %v", utilerrors.NewAggregate(errs))
}
l.pv = nil
l.pvc = nil
}
if l.sc != nil {
By("Deleting sc")
deleteStorageClass(f.ClientSet, l.sc.Name)
l.sc = nil
}
if l.volume != nil {
l.volume.DeleteVolume()
l.volume = nil
}
if l.testCleanup != nil { if l.testCleanup != nil {
l.testCleanup() l.testCleanup()