mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-20 10:20:51 +00:00
Move WaitForPersistentVolumeDeleted() to e2epv
The function is for persistent volumes and it doesn't have any reason why it stays in core test framework. So this moves the function into e2epv package for reducing e2e/framework/util.go code.
This commit is contained in:
parent
91766b86a9
commit
2158989d6f
@ -821,3 +821,21 @@ func SkipIfNoDefaultStorageClass(c clientset.Interface) {
|
|||||||
e2eskipper.Skipf("error finding default storageClass : %v", err)
|
e2eskipper.Skipf("error finding default storageClass : %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WaitForPersistentVolumeDeleted waits for a PersistentVolume to get deleted or until timeout occurs, whichever comes first.
|
||||||
|
func WaitForPersistentVolumeDeleted(c clientset.Interface, pvName string, Poll, timeout time.Duration) error {
|
||||||
|
framework.Logf("Waiting up to %v for PersistentVolume %s to get deleted", timeout, pvName)
|
||||||
|
for start := time.Now(); time.Since(start) < timeout; time.Sleep(Poll) {
|
||||||
|
pv, err := c.CoreV1().PersistentVolumes().Get(context.TODO(), pvName, metav1.GetOptions{})
|
||||||
|
if err == nil {
|
||||||
|
framework.Logf("PersistentVolume %s found and phase=%s (%v)", pvName, pv.Status.Phase, time.Since(start))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if apierrors.IsNotFound(err) {
|
||||||
|
framework.Logf("PersistentVolume %s was removed", pvName)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
framework.Logf("Get persistent volume %s in failed, ignoring for %v: %v", pvName, Poll, err)
|
||||||
|
}
|
||||||
|
return fmt.Errorf("PersistentVolume %s still exists within %v", pvName, timeout)
|
||||||
|
}
|
||||||
|
@ -304,24 +304,6 @@ func WaitForDefaultServiceAccountInNamespace(c clientset.Interface, namespace st
|
|||||||
return waitForServiceAccountInNamespace(c, namespace, "default", ServiceAccountProvisionTimeout)
|
return waitForServiceAccountInNamespace(c, namespace, "default", ServiceAccountProvisionTimeout)
|
||||||
}
|
}
|
||||||
|
|
||||||
// WaitForPersistentVolumeDeleted waits for a PersistentVolume to get deleted or until timeout occurs, whichever comes first.
|
|
||||||
func WaitForPersistentVolumeDeleted(c clientset.Interface, pvName string, Poll, timeout time.Duration) error {
|
|
||||||
Logf("Waiting up to %v for PersistentVolume %s to get deleted", timeout, pvName)
|
|
||||||
for start := time.Now(); time.Since(start) < timeout; time.Sleep(Poll) {
|
|
||||||
pv, err := c.CoreV1().PersistentVolumes().Get(context.TODO(), pvName, metav1.GetOptions{})
|
|
||||||
if err == nil {
|
|
||||||
Logf("PersistentVolume %s found and phase=%s (%v)", pvName, pv.Status.Phase, time.Since(start))
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if apierrors.IsNotFound(err) {
|
|
||||||
Logf("PersistentVolume %s was removed", pvName)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
Logf("Get persistent volume %s in failed, ignoring for %v: %v", pvName, Poll, err)
|
|
||||||
}
|
|
||||||
return fmt.Errorf("PersistentVolume %s still exists within %v", pvName, timeout)
|
|
||||||
}
|
|
||||||
|
|
||||||
// findAvailableNamespaceName random namespace name starting with baseName.
|
// findAvailableNamespaceName random namespace name starting with baseName.
|
||||||
func findAvailableNamespaceName(baseName string, c clientset.Interface) (string, error) {
|
func findAvailableNamespaceName(baseName string, c clientset.Interface) (string, error) {
|
||||||
var name string
|
var name string
|
||||||
|
@ -188,7 +188,7 @@ var _ = utils.SIGDescribe("CSI mock volume", func() {
|
|||||||
claim, err := cs.CoreV1().PersistentVolumeClaims(claim.Namespace).Get(context.TODO(), claim.Name, metav1.GetOptions{})
|
claim, err := cs.CoreV1().PersistentVolumeClaims(claim.Namespace).Get(context.TODO(), claim.Name, metav1.GetOptions{})
|
||||||
if err == nil {
|
if err == nil {
|
||||||
cs.CoreV1().PersistentVolumeClaims(claim.Namespace).Delete(context.TODO(), claim.Name, metav1.DeleteOptions{})
|
cs.CoreV1().PersistentVolumeClaims(claim.Namespace).Delete(context.TODO(), claim.Name, metav1.DeleteOptions{})
|
||||||
framework.WaitForPersistentVolumeDeleted(cs, claim.Spec.VolumeName, framework.Poll, 2*time.Minute)
|
e2epv.WaitForPersistentVolumeDeleted(cs, claim.Spec.VolumeName, framework.Poll, 2*time.Minute)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -332,6 +332,6 @@ func tearDownTestCase(c clientset.Interface, f *framework.Framework, ns string,
|
|||||||
e2epv.DeletePersistentVolume(c, pv.Name)
|
e2epv.DeletePersistentVolume(c, pv.Name)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
err := framework.WaitForPersistentVolumeDeleted(c, pv.Name, 5*time.Second, 5*time.Minute)
|
err := e2epv.WaitForPersistentVolumeDeleted(c, pv.Name, 5*time.Second, 5*time.Minute)
|
||||||
framework.ExpectNoError(err, "Persistent Volume %v not deleted by dynamic provisioner", pv.Name)
|
framework.ExpectNoError(err, "Persistent Volume %v not deleted by dynamic provisioner", pv.Name)
|
||||||
}
|
}
|
||||||
|
@ -100,7 +100,7 @@ var _ = utils.SIGDescribe("PV Protection", func() {
|
|||||||
ginkgo.By("Deleting the PV")
|
ginkgo.By("Deleting the PV")
|
||||||
err = client.CoreV1().PersistentVolumes().Delete(context.TODO(), pv.Name, *metav1.NewDeleteOptions(0))
|
err = client.CoreV1().PersistentVolumes().Delete(context.TODO(), pv.Name, *metav1.NewDeleteOptions(0))
|
||||||
framework.ExpectNoError(err, "Error deleting PV")
|
framework.ExpectNoError(err, "Error deleting PV")
|
||||||
framework.WaitForPersistentVolumeDeleted(client, pv.Name, framework.Poll, e2epv.PVDeletingTimeout)
|
e2epv.WaitForPersistentVolumeDeleted(client, pv.Name, framework.Poll, e2epv.PVDeletingTimeout)
|
||||||
})
|
})
|
||||||
|
|
||||||
ginkgo.It("Verify that PV bound to a PVC is not removed immediately", func() {
|
ginkgo.It("Verify that PV bound to a PVC is not removed immediately", func() {
|
||||||
@ -127,6 +127,6 @@ var _ = utils.SIGDescribe("PV Protection", func() {
|
|||||||
framework.ExpectNoError(err, "Error deleting PVC")
|
framework.ExpectNoError(err, "Error deleting PVC")
|
||||||
|
|
||||||
ginkgo.By("Checking that the PV is automatically removed from the system because it's no longer bound to a PVC")
|
ginkgo.By("Checking that the PV is automatically removed from the system because it's no longer bound to a PVC")
|
||||||
framework.WaitForPersistentVolumeDeleted(client, pv.Name, framework.Poll, e2epv.PVDeletingTimeout)
|
e2epv.WaitForPersistentVolumeDeleted(client, pv.Name, framework.Poll, e2epv.PVDeletingTimeout)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -210,7 +210,7 @@ func testZonalFailover(c clientset.Interface, ns string) {
|
|||||||
framework.ExpectNoError(c.CoreV1().PersistentVolumeClaims(pvc.Namespace).Delete(context.TODO(), pvc.Name, metav1.DeleteOptions{}),
|
framework.ExpectNoError(c.CoreV1().PersistentVolumeClaims(pvc.Namespace).Delete(context.TODO(), pvc.Name, metav1.DeleteOptions{}),
|
||||||
"Error deleting claim %s.", pvc.Name)
|
"Error deleting claim %s.", pvc.Name)
|
||||||
if pvc.Spec.VolumeName != "" {
|
if pvc.Spec.VolumeName != "" {
|
||||||
err = framework.WaitForPersistentVolumeDeleted(c, pvc.Spec.VolumeName, framework.Poll, pvDeletionTimeout)
|
err = e2epv.WaitForPersistentVolumeDeleted(c, pvc.Spec.VolumeName, framework.Poll, pvDeletionTimeout)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
framework.Logf("WARNING: PV %s is not yet deleted, and subsequent tests may be affected.", pvc.Spec.VolumeName)
|
framework.Logf("WARNING: PV %s is not yet deleted, and subsequent tests may be affected.", pvc.Spec.VolumeName)
|
||||||
}
|
}
|
||||||
|
@ -292,7 +292,7 @@ func (r *VolumeResource) CleanupResource() error {
|
|||||||
cleanUpErrs = append(cleanUpErrs, errors.Wrapf(err, "Failed to delete PVC %v", r.Pvc.Name))
|
cleanUpErrs = append(cleanUpErrs, errors.Wrapf(err, "Failed to delete PVC %v", r.Pvc.Name))
|
||||||
}
|
}
|
||||||
if r.Pv != nil {
|
if r.Pv != nil {
|
||||||
err = framework.WaitForPersistentVolumeDeleted(f.ClientSet, r.Pv.Name, 5*time.Second, 5*time.Minute)
|
err = e2epv.WaitForPersistentVolumeDeleted(f.ClientSet, r.Pv.Name, 5*time.Second, 5*time.Minute)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cleanUpErrs = append(cleanUpErrs, errors.Wrapf(err,
|
cleanUpErrs = append(cleanUpErrs, errors.Wrapf(err,
|
||||||
"Persistent Volume %v not deleted by dynamic provisioner", r.Pv.Name))
|
"Persistent Volume %v not deleted by dynamic provisioner", r.Pv.Name))
|
||||||
|
@ -369,7 +369,7 @@ func (t StorageClassTest) TestDynamicProvisioning() *v1.PersistentVolume {
|
|||||||
// hiccups.
|
// hiccups.
|
||||||
if pv != nil && pv.Spec.PersistentVolumeReclaimPolicy == v1.PersistentVolumeReclaimDelete {
|
if pv != nil && pv.Spec.PersistentVolumeReclaimPolicy == v1.PersistentVolumeReclaimDelete {
|
||||||
ginkgo.By(fmt.Sprintf("deleting the claim's PV %q", pv.Name))
|
ginkgo.By(fmt.Sprintf("deleting the claim's PV %q", pv.Name))
|
||||||
framework.ExpectNoError(framework.WaitForPersistentVolumeDeleted(client, pv.Name, 5*time.Second, 20*time.Minute))
|
framework.ExpectNoError(e2epv.WaitForPersistentVolumeDeleted(client, pv.Name, 5*time.Second, 20*time.Minute))
|
||||||
}
|
}
|
||||||
|
|
||||||
return pv
|
return pv
|
||||||
|
@ -86,7 +86,7 @@ var _ = utils.SIGDescribe("[Serial] Volume metrics", func() {
|
|||||||
} else {
|
} else {
|
||||||
e2epv.DeletePersistentVolumeClaim(c, newPvc.Name, newPvc.Namespace)
|
e2epv.DeletePersistentVolumeClaim(c, newPvc.Name, newPvc.Namespace)
|
||||||
if newPvc.Spec.VolumeName != "" {
|
if newPvc.Spec.VolumeName != "" {
|
||||||
err = framework.WaitForPersistentVolumeDeleted(c, newPvc.Spec.VolumeName, 5*time.Second, 5*time.Minute)
|
err = e2epv.WaitForPersistentVolumeDeleted(c, newPvc.Spec.VolumeName, 5*time.Second, 5*time.Minute)
|
||||||
framework.ExpectNoError(err, "Persistent Volume %v not deleted by dynamic provisioner", newPvc.Spec.VolumeName)
|
framework.ExpectNoError(err, "Persistent Volume %v not deleted by dynamic provisioner", newPvc.Spec.VolumeName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -415,7 +415,7 @@ var _ = utils.SIGDescribe("Dynamic Provisioning", func() {
|
|||||||
|
|
||||||
ginkgo.By(fmt.Sprintf("deleting the PV %q", pv.Name))
|
ginkgo.By(fmt.Sprintf("deleting the PV %q", pv.Name))
|
||||||
framework.ExpectNoError(e2epv.DeletePersistentVolume(c, pv.Name), "Failed to delete PV ", pv.Name)
|
framework.ExpectNoError(e2epv.DeletePersistentVolume(c, pv.Name), "Failed to delete PV ", pv.Name)
|
||||||
framework.ExpectNoError(framework.WaitForPersistentVolumeDeleted(c, pv.Name, 1*time.Second, 30*time.Second))
|
framework.ExpectNoError(e2epv.WaitForPersistentVolumeDeleted(c, pv.Name, 1*time.Second, 30*time.Second))
|
||||||
})
|
})
|
||||||
|
|
||||||
ginkgo.It("should not provision a volume in an unmanaged GCE zone.", func() {
|
ginkgo.It("should not provision a volume in an unmanaged GCE zone.", func() {
|
||||||
@ -587,7 +587,7 @@ var _ = utils.SIGDescribe("Dynamic Provisioning", func() {
|
|||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
ginkgo.By("waiting for the PV to get deleted")
|
ginkgo.By("waiting for the PV to get deleted")
|
||||||
err = framework.WaitForPersistentVolumeDeleted(c, pv.Name, 5*time.Second, e2epv.PVDeletingTimeout)
|
err = e2epv.WaitForPersistentVolumeDeleted(c, pv.Name, 5*time.Second, e2epv.PVDeletingTimeout)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -85,7 +85,7 @@ var _ = utils.SIGDescribe("PersistentVolumes [Feature:vsphere][Feature:ReclaimPo
|
|||||||
pvc = nil
|
pvc = nil
|
||||||
|
|
||||||
ginkgo.By("verify pv is deleted")
|
ginkgo.By("verify pv is deleted")
|
||||||
err = framework.WaitForPersistentVolumeDeleted(c, pv.Name, 3*time.Second, 300*time.Second)
|
err = e2epv.WaitForPersistentVolumeDeleted(c, pv.Name, 3*time.Second, 300*time.Second)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
pv = nil
|
pv = nil
|
||||||
@ -143,7 +143,7 @@ var _ = utils.SIGDescribe("PersistentVolumes [Feature:vsphere][Feature:ReclaimPo
|
|||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
ginkgo.By("Verify PV should be deleted automatically")
|
ginkgo.By("Verify PV should be deleted automatically")
|
||||||
framework.ExpectNoError(framework.WaitForPersistentVolumeDeleted(c, pv.Name, 1*time.Second, 30*time.Second))
|
framework.ExpectNoError(e2epv.WaitForPersistentVolumeDeleted(c, pv.Name, 1*time.Second, 30*time.Second))
|
||||||
pv = nil
|
pv = nil
|
||||||
volumePath = ""
|
volumePath = ""
|
||||||
})
|
})
|
||||||
|
@ -97,7 +97,7 @@ var _ = utils.SIGDescribe("PersistentVolumes [Feature:vsphere][Feature:LabelSele
|
|||||||
framework.ExpectNoError(e2epv.DeletePersistentVolumeClaim(c, pvcSsd.Name, ns), "Failed to delete PVC ", pvcSsd.Name)
|
framework.ExpectNoError(e2epv.DeletePersistentVolumeClaim(c, pvcSsd.Name, ns), "Failed to delete PVC ", pvcSsd.Name)
|
||||||
|
|
||||||
ginkgo.By("verify pvSsd is deleted")
|
ginkgo.By("verify pvSsd is deleted")
|
||||||
err = framework.WaitForPersistentVolumeDeleted(c, pvSsd.Name, 3*time.Second, 300*time.Second)
|
err = e2epv.WaitForPersistentVolumeDeleted(c, pvSsd.Name, 3*time.Second, 300*time.Second)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
volumePath = ""
|
volumePath = ""
|
||||||
|
|
||||||
|
@ -129,5 +129,5 @@ func (t *VolumeModeDowngradeTest) Teardown(f *framework.Framework) {
|
|||||||
framework.ExpectNoError(f.ClientSet.CoreV1().PersistentVolumeClaims(t.pvc.Namespace).Delete(context.TODO(), t.pvc.Name, metav1.DeleteOptions{}))
|
framework.ExpectNoError(f.ClientSet.CoreV1().PersistentVolumeClaims(t.pvc.Namespace).Delete(context.TODO(), t.pvc.Name, metav1.DeleteOptions{}))
|
||||||
|
|
||||||
ginkgo.By("Waiting for the PV to be deleted")
|
ginkgo.By("Waiting for the PV to be deleted")
|
||||||
framework.ExpectNoError(framework.WaitForPersistentVolumeDeleted(f.ClientSet, t.pv.Name, 5*time.Second, 20*time.Minute))
|
framework.ExpectNoError(e2epv.WaitForPersistentVolumeDeleted(f.ClientSet, t.pv.Name, 5*time.Second, 20*time.Minute))
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user