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" targetTrAddr: "192.168.122.18"
targetTrPort: "49153" targetTrPort: "49153"
targetTrType: "tcp" 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 { type Connector struct {
VolumeID string VolumeID string
DeviceUUID string DeviceID string
TargetNqn string TargetNqn string
TargetAddr string TargetAddr string
TargetPort string TargetPort string
@@ -66,7 +66,7 @@ func getNvmfConnector(nvmfInfo *nvmfDiskInfo) *Connector {
return &Connector{ return &Connector{
VolumeID: nvmfInfo.VolName, VolumeID: nvmfInfo.VolName,
DeviceUUID: nvmfInfo.DeviceUUID, DeviceID: nvmfInfo.DeviceID,
TargetNqn: nvmfInfo.Nqn, TargetNqn: nvmfInfo.Nqn,
TargetAddr: nvmfInfo.Addr, TargetAddr: nvmfInfo.Addr,
TargetPort: nvmfInfo.Port, TargetPort: nvmfInfo.Port,
@@ -278,7 +278,7 @@ func (c *Connector) Connect() (string, error) {
} }
baseString := builder.String() 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 // connect to nvmf disk
err := _connect(baseString) err := _connect(baseString)

View File

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