From b42674e4fbede8ae81ecb177651e0531e0cd7c5c Mon Sep 17 00:00:00 2001 From: andyzhangx Date: Mon, 17 Mar 2025 09:04:45 +0000 Subject: [PATCH] feat: support mountOptions parameter in VolumeSnapshotClass typo --- docs/driver-parameters.md | 8 ++++++++ pkg/nfs/controllerserver.go | 6 ++++-- pkg/nfs/controllerserver_test.go | 10 ++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/docs/driver-parameters.md b/docs/driver-parameters.md index abb1f705f..3c5f8c4c4 100644 --- a/docs/driver-parameters.md +++ b/docs/driver-parameters.md @@ -28,6 +28,14 @@ volumeAttributes.server | NFS Server address | domain name `nfs-server.default.s volumeAttributes.share | NFS share path | `/` | Yes | volumeAttributes.mountPermissions | mounted folder permissions. The default is `0`, if set as non-zero, driver will perform `chmod` after mount | | No | +### `VolumeSnapshotClass` + +Name | Meaning | Available Value | Mandatory | Default value +--- | --- | --- | --- | --- +mountOptions | mount options separated by comma, e.g. `"nfsvers=4.1,sec=sys"` | | No | "" +server | NFS Server address | domain name `nfs-server.default.svc.cluster.local`
or IP address `127.0.0.1` | Yes | +share | NFS share path | `/` | Yes | + ### Tips #### `subDir` parameter supports following pv/pvc metadata conversion > if `subDir` value contains following strings, it would be converted into corresponding pv/pvc name or namespace diff --git a/pkg/nfs/controllerserver.go b/pkg/nfs/controllerserver.go index c572154bf..ff1a91673 100644 --- a/pkg/nfs/controllerserver.go +++ b/pkg/nfs/controllerserver.go @@ -376,7 +376,7 @@ func (cs *ControllerServer) CreateSnapshot(ctx context.Context, req *csi.CreateS return nil, status.Errorf(codes.NotFound, "failed to create nfsSnapshot: %v", err) } snapVol := volumeFromSnapshot(snapshot) - if err = cs.internalMount(ctx, snapVol, nil, nil); err != nil { + if err = cs.internalMount(ctx, snapVol, req.GetParameters(), nil); err != nil { return nil, status.Errorf(codes.Internal, "failed to mount snapshot nfs server: %v", err) } defer func() { @@ -392,7 +392,7 @@ func (cs *ControllerServer) CreateSnapshot(ctx context.Context, req *csi.CreateS return nil, err } - if err = cs.internalMount(ctx, srcVol, nil, nil); err != nil { + if err = cs.internalMount(ctx, srcVol, req.GetParameters(), nil); err != nil { return nil, status.Errorf(codes.Internal, "failed to mount src nfs server: %v", err) } defer func() { @@ -652,6 +652,8 @@ func newNFSSnapshot(name string, params map[string]string, vol *nfsVolume) (*nfs server = v case paramShare: baseDir = v + case mountOptionsField: + // no op default: return nil, status.Errorf(codes.InvalidArgument, "invalid parameter %q in snapshot storage class", k) } diff --git a/pkg/nfs/controllerserver_test.go b/pkg/nfs/controllerserver_test.go index 196a5aa5c..540292ee7 100644 --- a/pkg/nfs/controllerserver_test.go +++ b/pkg/nfs/controllerserver_test.go @@ -933,6 +933,7 @@ func TestCreateSnapshot(t *testing.T) { req: &csi.CreateSnapshotRequest{ SourceVolumeId: "nfs-server.default.svc.cluster.local#share#subdir#src-pv-name", Name: "snapshot-name", + Parameters: map[string]string{"mountOptions": "nfsvers=4.1,sec=sys"}, }, expResp: &csi.CreateSnapshotResponse{ Snapshot: &csi.Snapshot{ @@ -954,6 +955,15 @@ func TestCreateSnapshot(t *testing.T) { }, expectErr: true, }, + { + desc: "create snapshot with non supported parameters", + req: &csi.CreateSnapshotRequest{ + SourceVolumeId: "nfs-server.default.svc.cluster.local#share#subdir#src-pv-name", + Name: "snapshot-name", + Parameters: map[string]string{"unknown": "value"}, + }, + expectErr: true, + }, } for _, test := range cases { t.Run(test.desc, func(t *testing.T) {