Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/driver-parameters.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ share | NFS share path | `/` | Yes |
subDir | sub directory under nfs share | | No | if sub directory does not exist, this driver would create a new one
mountPermissions | mounted folder permissions. The default is `0`, if set as non-zero, driver will perform `chmod` after mount | | No |
onDelete | when volume is deleted, keep the directory if it's `retain` | `delete`(default), `retain`, `archive` | No | `delete`
volumePrefix | prefix of volume name created by the driver | `prefix-` | No |

- VolumeID(`volumeHandle`) is the identifier of the volume handled by the driver, format of VolumeID:
```
Expand Down
8 changes: 7 additions & 1 deletion pkg/nfs/controllerserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ func (cs *ControllerServer) CreateVolume(ctx context.Context, req *csi.CreateVol
case paramShare:
case paramSubDir:
case paramOnDelete:
case paramVolumePrefix:
case pvcNamespaceKey:
case pvcNameKey:
case pvNameKey:
Expand Down Expand Up @@ -660,7 +661,7 @@ func newNFSSnapshot(name string, params map[string]string, vol *nfsVolume) (*nfs

// newNFSVolume Convert VolumeCreate parameters to an nfsVolume
func newNFSVolume(name string, size int64, params map[string]string, defaultOnDeletePolicy string) (*nfsVolume, error) {
var server, baseDir, subDir, onDelete string
var server, baseDir, subDir, onDelete, volumePrefix string
subDirReplaceMap := map[string]string{}

// validate parameters (case-insensitive)
Expand All @@ -674,6 +675,8 @@ func newNFSVolume(name string, size int64, params map[string]string, defaultOnDe
subDir = v
case paramOnDelete:
onDelete = v
case paramVolumePrefix:
volumePrefix = v
case pvcNamespaceKey:
subDirReplaceMap[pvcNamespaceMetadata] = v
case pvcNameKey:
Expand Down Expand Up @@ -712,6 +715,9 @@ func newNFSVolume(name string, size int64, params map[string]string, defaultOnDe
}

vol.id = getVolumeIDFromNfsVol(vol)
if volumePrefix != "" {
vol.id = volumePrefix + vol.id
}
return vol, nil
}

Expand Down
44 changes: 37 additions & 7 deletions pkg/nfs/controllerserver_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -137,18 +137,28 @@ func TestCreateVolume(t *testing.T) {
},
},
Parameters: map[string]string{
paramServer: testServer,
paramShare: testBaseDir,
paramSubDir: testCSIVolume,
paramServer: testServer,
paramShare: testBaseDir,
paramSubDir: testCSIVolume,
paramVolumePrefix: "prefix-",
paramOnDelete: "delete",
pvcNamespaceKey: "default",
pvcNameKey: testCSIVolume,
pvNameKey: testCSIVolume,
},
},
resp: &csi.CreateVolumeResponse{
Volume: &csi.Volume{
VolumeId: newTestVolumeWithVolumeID,
VolumeId: "prefix-" + newTestVolumeWithVolumeID,
VolumeContext: map[string]string{
paramServer: testServer,
paramShare: testBaseDir,
paramSubDir: testCSIVolume,
paramServer: testServer,
paramShare: testBaseDir,
paramSubDir: testCSIVolume,
paramOnDelete: "delete",
paramVolumePrefix: "prefix-",
pvcNamespaceKey: "default",
pvcNameKey: testCSIVolume,
pvNameKey: testCSIVolume,
},
},
},
Expand Down Expand Up @@ -648,6 +658,26 @@ func TestNewNFSVolume(t *testing.T) {
onDelete: "delete",
},
},
{
desc: "volumePrefix is specified",
name: "pv-name",
size: 100,
params: map[string]string{
paramServer: "//nfs-server.default.svc.cluster.local",
paramShare: "share",
paramSubDir: "subdir",
paramVolumePrefix: "prefix-",
},
expectVol: &nfsVolume{
id: "prefix-nfs-server.default.svc.cluster.local#share#subdir#pv-name#",
server: "//nfs-server.default.svc.cluster.local",
baseDir: "share",
subDir: "subdir",
size: 100,
uuid: "pv-name",
onDelete: "delete",
},
},
{
desc: "subDir with pv/pvc metadata is specified",
name: "pv-name",
Expand Down
3 changes: 2 additions & 1 deletion pkg/nfs/nfs.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,8 @@ type Driver struct {
const (
DefaultDriverName = "nfs.csi.k8s.io"
// Address of the NFS server
paramServer = "server"
paramServer = "server"
paramVolumePrefix = "volumeprefix"
// Base directory of the NFS server to create volumes under.
// The base directory must be a direct child of the root directory.
// The root directory is omitted from the string, for example:
Expand Down
1 change: 1 addition & 0 deletions test/e2e/e2e_suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ var (
"csi.storage.k8s.io/provisioner-secret-name": "mount-options",
"csi.storage.k8s.io/provisioner-secret-namespace": "default",
"mountPermissions": "0755",
"volumePrefix": "prefix-",
}
retainStorageClassParameters = map[string]string{
"server": nfsServerAddress,
Expand Down
Loading