diff --git a/e2e/rbd.go b/e2e/rbd.go index 05a54f714..576e4fb2c 100644 --- a/e2e/rbd.go +++ b/e2e/rbd.go @@ -393,6 +393,14 @@ var _ = Describe("RBD", func() { } }) + By("validate mount options in app pod", func() { + mountFlags := []string{"discard"} + err := checkMountOptions(pvcPath, appPath, f, mountFlags) + if err != nil { + Fail(err.Error()) + } + }) + // Make sure this should be last testcase in this file, because // it deletes pool By("Create a PVC and Delete PVC when backend pool deleted", func() { diff --git a/e2e/utils.go b/e2e/utils.go index e2b30f917..2e827d235 100644 --- a/e2e/utils.go +++ b/e2e/utils.go @@ -992,3 +992,40 @@ func pvcDeleteWhenPoolNotFound(pvcPath string, cephfs bool, f *framework.Framewo err = deletePVCAndValidatePV(f.ClientSet, pvc, deployTimeout) return err } + +func checkMountOptions(pvcPath, appPath string, f *framework.Framework, mountFlags []string) error { + pvc, err := loadPVC(pvcPath) + if pvc == nil { + return err + } + + pvc.Namespace = f.UniqueName + + app, err := loadApp(appPath) + if err != nil { + return err + } + app.Labels = map[string]string{"app": "validate-mount-opt"} + app.Namespace = f.UniqueName + + err = createPVCAndApp("", f, pvc, app) + if err != nil { + return err + } + + opt := metav1.ListOptions{ + LabelSelector: "app=validate-mount-opt", + } + + cmd := fmt.Sprintf("mount |grep %s", app.Spec.Containers[0].VolumeMounts[0].MountPath) + data, stdErr := execCommandInPod(f, cmd, app.Namespace, &opt) + Expect(stdErr).Should(BeEmpty()) + for _, f := range mountFlags { + if !strings.Contains(data, f) { + return fmt.Errorf("mount option %s not found in %s", f, data) + } + } + + err = deletePVCAndApp("", f, pvc, app) + return err +} diff --git a/pkg/rbd/nodeserver.go b/pkg/rbd/nodeserver.go index 7695e45b0..af88bed46 100644 --- a/pkg/rbd/nodeserver.go +++ b/pkg/rbd/nodeserver.go @@ -399,6 +399,7 @@ func (ns *NodeServer) mountVolumeToStagePath(ctx context.Context, req *csi.NodeS } opt := []string{"_netdev"} + opt = csicommon.ConstructMountOptions(opt, req.GetVolumeCapability()) isBlock := req.GetVolumeCapability().GetBlock() != nil if isBlock {