Merge pull request #39 from ghormoon/fix/device-id

Allow any device ID format, not just uuid format
This commit is contained in:
Meinhard Zhou
2025-10-15 21:16:45 +08:00
committed by GitHub
3 changed files with 50 additions and 24 deletions

View File

@@ -15,5 +15,18 @@ spec:
targetTrAddr: "192.168.122.18"
targetTrPort: "49153"
targetTrType: "tcp"
deviceUUID: "58668891-c3e4-45d0-b90e-824525c16080"
nqn: "nqn.2022-08.org.test-nvmf.example"
nqn: "nqn.2022-08.org.test-nvmf.example"
# you can use any format of ID here, uuid., eui., whatever your storage pusts into ID_WWN or ID_SERIAL, as udev puts that in /dev/disk/by-id
deviceID: "uuid.58668891-c3e4-45d0-b90e-824525c16080"
#deviceID: "INTEL_SSDPF2KX038T9N_PHAB2261050P3P9EGN"
#deviceID: "Pure_Storage_FlashArray_AA00000000000AAA_42"
#
# for uuid, eui and nguid formats. there's an alias
#deviceUUID: "58668891-c3e4-45d0-b90e-824525c16080"
# is the same as
#deviceID: "uuid.58668891-c3e4-45d0-b90e-824525c16080"
#
# both EUI and NGUID will appear as eui.something
#deviceEUI: "00000000000000000042aa42aa42aa42"
# is the same as
#deviceID: "eui.00000000000000000042aa42aa42aa42"

View File

@@ -30,7 +30,7 @@ import (
type Connector struct {
VolumeID string
DeviceUUID string
DeviceID string
TargetNqn string
TargetAddr string
TargetPort string
@@ -66,7 +66,7 @@ func getNvmfConnector(nvmfInfo *nvmfDiskInfo) *Connector {
return &Connector{
VolumeID: nvmfInfo.VolName,
DeviceUUID: nvmfInfo.DeviceUUID,
DeviceID: nvmfInfo.DeviceID,
TargetNqn: nvmfInfo.Nqn,
TargetAddr: nvmfInfo.Addr,
TargetPort: nvmfInfo.Port,
@@ -278,7 +278,7 @@ func (c *Connector) Connect() (string, error) {
}
baseString := builder.String()
devicePath := strings.Join([]string{"/dev/disk/by-id/nvme-uuid", c.DeviceUUID}, ".")
devicePath := strings.Join([]string{"/dev/disk/by-id/nvme-", c.DeviceID}, "")
// connect to nvmf disk
err := _connect(baseString)

View File

@@ -19,6 +19,7 @@ package nvmf
import (
"fmt"
"os"
"strings"
"github.com/container-storage-interface/spec/lib/go/csi"
"k8s.io/klog/v2"
@@ -27,14 +28,14 @@ import (
)
type nvmfDiskInfo struct {
VolName string
Nqn string
Addr string
Port string
DeviceUUID string
Transport string
HostId string
HostNqn string
VolName string
Nqn string
Addr string
Port string
DeviceID string
Transport string
HostId string
HostNqn string
}
type nvmfDiskMounter struct {
@@ -60,24 +61,36 @@ func getNVMfDiskInfo(req *csi.NodePublishVolumeRequest) (*nvmfDiskInfo, error) {
targetTrAddr := volOpts["targetTrAddr"]
targetTrPort := volOpts["targetTrPort"]
targetTrType := volOpts["targetTrType"]
deviceUUID := volOpts["deviceUUID"]
devHostNqn := volOpts["hostNqn"]
devHostId := volOpts["hostId"]
deviceID := volOpts["deviceID"]
if volOpts["deviceUUID"] != "" {
if deviceID != "" {
klog.Warningf("Warning: deviceUUID is overwriting already defined deviceID, volID: %s ", volName)
}
deviceID = strings.Join([]string{"uuid", volOpts["deviceUUID"]}, ".")
}
if volOpts["deviceEUI"] != "" {
if deviceID != "" {
klog.Warningf("Warning: deviceEUI is overwriting already defined deviceID, volID: %s ", volName)
}
deviceID = strings.Join([]string{"eui", volOpts["deviceEUI"]}, ".")
}
nqn := volOpts["nqn"]
if targetTrAddr == "" || nqn == "" || targetTrPort == "" || targetTrType == "" || deviceUUID == "" {
if targetTrAddr == "" || nqn == "" || targetTrPort == "" || targetTrType == "" || deviceID == "" {
return nil, fmt.Errorf("some nvme target info is missing, volID: %s ", volName)
}
return &nvmfDiskInfo{
VolName: volName,
Addr: targetTrAddr,
Port: targetTrPort,
Nqn: nqn,
DeviceUUID: deviceUUID,
Transport: targetTrType,
HostNqn: devHostNqn,
HostId: devHostId,
VolName: volName,
Addr: targetTrAddr,
Port: targetTrPort,
Nqn: nqn,
DeviceID: deviceID,
Transport: targetTrType,
HostNqn: devHostNqn,
HostId: devHostId,
}, nil
}
@@ -129,7 +142,7 @@ func AttachDisk(req *csi.NodePublishVolumeRequest, nm nvmfDiskMounter) (string,
return "", fmt.Errorf("Heuristic determination of mount point failed:%v", err)
}
if !notMounted {
klog.Infof("AttachDisk: VolumeID: %s, Path: %s is already mounted, device: %s", req.VolumeId, nm.targetPath, nm.DeviceUUID)
klog.Infof("AttachDisk: VolumeID: %s, Path: %s is already mounted, device: %s", req.VolumeId, nm.targetPath, nm.DeviceID)
return "", nil
}