diff --git a/e2e/rbd.go b/e2e/rbd.go index 2834eaa19..18f082278 100644 --- a/e2e/rbd.go +++ b/e2e/rbd.go @@ -9,6 +9,8 @@ import ( "strings" "time" + "github.com/ceph/ceph-csi/internal/util" + . "github.com/onsi/ginkgo" // nolint v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -429,6 +431,53 @@ var _ = Describe("RBD", func() { } }) + By("Resize rbd-nbd PVC and check application directory size", func() { + kernelRelease, err := util.GetKernelVersion() + if err != nil { + e2elog.Failf("failed to get kernel version with error %v", err) + } + if util.CheckKernelSupport(kernelRelease, nbdResizeSupport) { + err := deleteResource(rbdExamplePath + "storageclass.yaml") + if err != nil { + e2elog.Failf("failed to delete storageclass with error %v", err) + } + // Storage class with rbd-nbd mounter + err = createRBDStorageClass( + f.ClientSet, + f, + defaultSCName, + nil, + map[string]string{"mounter": "rbd-nbd"}, + deletePolicy) + if err != nil { + e2elog.Failf("failed to create storageclass with error %v", err) + } + // Block PVC resize + err = resizePVCAndValidateSize(rawPvcPath, rawAppPath, f) + if err != nil { + e2elog.Failf("failed to resize block PVC with error %v", err) + } + // validate created backend rbd images + validateRBDImageCount(f, 0, defaultRBDPool) + + // FileSystem PVC resize + err = resizePVCAndValidateSize(pvcPath, appPath, f) + if err != nil { + e2elog.Failf("failed to resize filesystem PVC with error %v", err) + } + // validate created backend rbd images + validateRBDImageCount(f, 0, defaultRBDPool) + err = deleteResource(rbdExamplePath + "storageclass.yaml") + if err != nil { + e2elog.Failf("failed to delete storageclass with error %v", err) + } + err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, nil, deletePolicy) + if err != nil { + e2elog.Failf("failed to create storageclass with error %v", err) + } + } + }) + By("perform IO on rbd-nbd volume after nodeplugin restart", func() { err := deleteResource(rbdExamplePath + "storageclass.yaml") if err != nil { diff --git a/e2e/rbd_helper.go b/e2e/rbd_helper.go index eb182c9f3..3100fc996 100644 --- a/e2e/rbd_helper.go +++ b/e2e/rbd_helper.go @@ -10,6 +10,8 @@ import ( "sync" "time" + "github.com/ceph/ceph-csi/internal/util" + snapapi "github.com/kubernetes-csi/external-snapshotter/client/v4/apis/volumesnapshot/v1" v1 "k8s.io/api/core/v1" scv1 "k8s.io/api/storage/v1" @@ -26,6 +28,18 @@ const ( thickProvisionMetaKey = "rbd.csi.ceph.com/thick-provisioned" ) +// nolint:gomnd // numbers specify Kernel versions. +var nbdResizeSupport = []util.KernelVersion{ + { + Version: 5, + PatchLevel: 3, + SubLevel: 0, + ExtraVersion: 0, + Distribution: "", + Backport: false, + }, // standard 5.3+ versions +} + func imageSpec(pool, image string) string { if radosNamespace != "" { return pool + "/" + radosNamespace + "/" + image