Allow any device ID format, not just uuid format

This commit is contained in:
Jiri 'Ghormoon' Novak
2025-09-26 07:55:27 +02:00
parent 35f7bba6ec
commit db48de4f50
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"
@@ -31,7 +32,7 @@ type nvmfDiskInfo struct {
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
@@ -60,12 +61,24 @@ 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)
} }
@@ -74,7 +87,7 @@ func getNVMfDiskInfo(req *csi.NodePublishVolumeRequest) (*nvmfDiskInfo, error) {
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,
@@ -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
} }