fix: delete volume failure in archive mode when subDir contains /
This commit is contained in:
parent
dce3f89e62
commit
96ddd193dc
@ -244,6 +244,13 @@ func (cs *ControllerServer) DeleteVolume(ctx context.Context, req *csi.DeleteVol
|
||||
|
||||
if strings.EqualFold(nfsVol.onDelete, archive) {
|
||||
archivedInternalVolumePath := filepath.Join(getInternalMountPath(cs.Driver.workingMountDir, nfsVol), "archived-"+nfsVol.subDir)
|
||||
if strings.Contains(nfsVol.subDir, "/") {
|
||||
parentDir := filepath.Dir(archivedInternalVolumePath)
|
||||
klog.V(2).Infof("DeleteVolume: subdirectory(%s) contains '/', make sure the parent directory(%s) exists", nfsVol.subDir, parentDir)
|
||||
if err = os.MkdirAll(parentDir, 0777); err != nil {
|
||||
return nil, status.Errorf(codes.Internal, "create parent directory(%s) of %s failed with %v", parentDir, archivedInternalVolumePath, err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
// archive subdirectory under base-dir
|
||||
klog.V(2).Infof("archiving subdirectory %s --> %s", internalVolumePath, archivedInternalVolumePath)
|
||||
|
||||
@ -351,7 +351,7 @@ var _ = ginkgo.Describe("Dynamic Provisioning", func() {
|
||||
test.Run(ctx, cs, ns)
|
||||
})
|
||||
|
||||
ginkgo.It("should create a volume on demand with archive subdir on delete [nfs.csi.k8s.io]", func(ctx ginkgo.SpecContext) {
|
||||
ginkgo.It("should create a volume on demand with archive on delete [nfs.csi.k8s.io]", func(ctx ginkgo.SpecContext) {
|
||||
pods := []testsuites.PodDetails{
|
||||
{
|
||||
Cmd: "echo 'hello world' > /mnt/test-1/data && grep 'hello world' /mnt/test-1/data",
|
||||
@ -373,4 +373,27 @@ var _ = ginkgo.Describe("Dynamic Provisioning", func() {
|
||||
}
|
||||
test.Run(ctx, cs, ns)
|
||||
})
|
||||
|
||||
ginkgo.It("should create a volume on demand with archive subdir on delete [nfs.csi.k8s.io]", func(ctx ginkgo.SpecContext) {
|
||||
pods := []testsuites.PodDetails{
|
||||
{
|
||||
Cmd: "echo 'hello world' > /mnt/test-1/data && grep 'hello world' /mnt/test-1/data",
|
||||
Volumes: []testsuites.VolumeDetails{
|
||||
{
|
||||
ClaimSize: "10Gi",
|
||||
VolumeMount: testsuites.VolumeMountDetails{
|
||||
NameGenerate: "test-volume-",
|
||||
MountPathGenerate: "/mnt/test-",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
test := testsuites.DynamicallyProvisionedCmdVolumeTest{
|
||||
CSIDriver: testDriver,
|
||||
Pods: pods,
|
||||
StorageClassParameters: archiveSubDirStorageClassParameters,
|
||||
}
|
||||
test.Run(ctx, cs, ns)
|
||||
})
|
||||
})
|
||||
|
||||
@ -83,6 +83,15 @@ var (
|
||||
"mountPermissions": "0755",
|
||||
"onDelete": "archive",
|
||||
}
|
||||
archiveSubDirStorageClassParameters = map[string]string{
|
||||
"server": nfsServerAddress,
|
||||
"share": nfsShare,
|
||||
"subDir": "${pvc.metadata.namespace}/${pvc.metadata.name}",
|
||||
"csi.storage.k8s.io/provisioner-secret-name": "mount-options",
|
||||
"csi.storage.k8s.io/provisioner-secret-namespace": "default",
|
||||
"mountPermissions": "0755",
|
||||
"onDelete": "archive",
|
||||
}
|
||||
controllerServer *nfs.ControllerServer
|
||||
)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user