Fix the removal of block PVC devices not working
This commit is contained in:
@@ -545,7 +545,7 @@ func (ns *NodeServer) NodeUnstageVolume(ctx context.Context, req *csi.NodeUnstag
|
|||||||
defer ns.unlockVolume(ctxVars["configPath"]+":block:"+volName)
|
defer ns.unlockVolume(ctxVars["configPath"]+":block:"+volName)
|
||||||
|
|
||||||
targetPath := req.GetStagingTargetPath()
|
targetPath := req.GetStagingTargetPath()
|
||||||
devicePath, _, err := mount.GetDeviceNameFromMount(ns.mounter, targetPath)
|
devicePath, err := GetDeviceNameFromMount(targetPath)
|
||||||
if (err != nil)
|
if (err != nil)
|
||||||
{
|
{
|
||||||
if (os.IsNotExist(err))
|
if (os.IsNotExist(err))
|
||||||
@@ -897,7 +897,7 @@ func (ns *NodeServer) NodeUnpublishVolume(ctx context.Context, req *csi.NodeUnpu
|
|||||||
}
|
}
|
||||||
|
|
||||||
targetPath := req.GetTargetPath()
|
targetPath := req.GetTargetPath()
|
||||||
devicePath, _, err := mount.GetDeviceNameFromMount(ns.mounter, targetPath)
|
devicePath, err := GetDeviceNameFromMount(targetPath)
|
||||||
if (err != nil)
|
if (err != nil)
|
||||||
{
|
{
|
||||||
if (os.IsNotExist(err))
|
if (os.IsNotExist(err))
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"k8s.io/klog"
|
"k8s.io/klog"
|
||||||
|
"k8s.io/utils/mount"
|
||||||
|
|
||||||
"google.golang.org/grpc/codes"
|
"google.golang.org/grpc/codes"
|
||||||
"google.golang.org/grpc/status"
|
"google.golang.org/grpc/status"
|
||||||
)
|
)
|
||||||
@@ -340,3 +342,43 @@ func systemCombined(program string, args ...string) ([]byte, error)
|
|||||||
}
|
}
|
||||||
return out.Bytes(), nil
|
return out.Bytes(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetDeviceNameFromMount(mountPath string) (string, error)
|
||||||
|
{
|
||||||
|
// Use /proc/self/mountinfo to correctly parse bind mounts for block device files
|
||||||
|
mps, err := mount.ParseMountInfo("/proc/self/mountinfo")
|
||||||
|
if (err != nil)
|
||||||
|
{
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
slTarget, err := filepath.EvalSymlinks(mountPath)
|
||||||
|
if (err != nil)
|
||||||
|
{
|
||||||
|
slTarget = mountPath
|
||||||
|
}
|
||||||
|
|
||||||
|
device := ""
|
||||||
|
for _, mp := range mps
|
||||||
|
{
|
||||||
|
if (mp.MountPoint == slTarget)
|
||||||
|
{
|
||||||
|
device = mp.Source
|
||||||
|
if (device[0] != '/' && mp.Root != "/")
|
||||||
|
{
|
||||||
|
// Handle {Source=udev Root=/vdb MountPoint=/var/lib/kubelet/tralaleylo/tralala}
|
||||||
|
for _, other := range mps
|
||||||
|
{
|
||||||
|
if (other.Root == "/" && other.Source == mp.Source)
|
||||||
|
{
|
||||||
|
device = other.MountPoint + mp.Root
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return device, nil
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user