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"
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
}