Skip to content

Commit 91fe557

Browse files
committed
nvmeof: refactor NVMeoFVolumeData initialization into dedicated method
Move NVMeoFVolumeData initialization logic from createNVMeoFResources() into a new SetNvmeofVolumeData() method on the struct. This makes createNVMeoFResources() shorter and more readable and maintains separation of concerns between controller operations and data structure initialization. No functional changes.. Signed-off-by: gadi-didi <gadi.didi@ibm.com>
1 parent 4790cbb commit 91fe557

2 files changed

Lines changed: 47 additions & 36 deletions

File tree

internal/nvmeof/controller/controllerserver.go

Lines changed: 3 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -748,43 +748,10 @@ func (cs *Server) createNVMeoFResources(
748748
params := req.GetParameters()
749749

750750
networkMask := params["networkMask"]
751-
nvmeofData := &nvmeof.NVMeoFVolumeData{
752-
SubsystemNQN: params["subsystemNQN"],
753-
NamespaceID: 0, // will be set after namespace creation,
754-
NamespaceUUID: "", // will be set after namespace creation
755-
ListenerInfo: nil, // will be set after listener creation or retrieval
756-
GatewayManagementInfo: nvmeof.GatewayConfig{
757-
Address: params["nvmeofGatewayAddress"],
758-
},
759-
Security: nvmeof.NVMeoFSecurityConfig{
760-
DhchapMode: params["dhchapMode"],
761-
AuthenticationKMSID: params["authenticationKMSID"],
762-
},
763-
}
764-
if nvmeofGatewayPortStr := params["nvmeofGatewayPort"]; nvmeofGatewayPortStr != "" {
765-
parsed, err := strconv.ParseUint(nvmeofGatewayPortStr, 10, 32)
766-
if err != nil {
767-
return nil, fmt.Errorf("invalid nvmeofGatewayPort %s: %w", nvmeofGatewayPortStr, err)
768-
}
769-
nvmeofData.GatewayManagementInfo.Port = uint32(parsed)
770-
}
751+
nvmeofData := &nvmeof.NVMeoFVolumeData{}
771752

772-
// setup listeners (if provided, otherwise it will be set by gateway based on network mask)
773-
listeners, err := nvmeof.SetUpListeners(params["listeners"])
774-
if err != nil {
775-
return nil, fmt.Errorf("failed to set up listeners: %w", err)
776-
}
777-
nvmeofData.ListenerInfo = listeners
778-
// If listener port or address is empty, it will be set to default.
779-
nvmeofData.SetListenersWithDefaults()
780-
781-
// If dhchapMode was explicitly provided and is not "none", and authenticationKMSID is empty,
782-
// use a default KMS ID - RBD metadata KMS.
783-
// In production, users should always provide a KMS ID when using DH-CHAP.
784-
if nvmeofData.Security.DhchapMode != nvmeof.DHCHAPEmpty &&
785-
nvmeofData.Security.DhchapMode != nvmeof.DHCHAPModeNone &&
786-
nvmeofData.Security.AuthenticationKMSID == "" {
787-
nvmeofData.Security.AuthenticationKMSID = "metadata"
753+
if err := nvmeofData.SetFromParameters(params); err != nil {
754+
return nil, fmt.Errorf("failed to set NVMe-oF volume data: %w", err)
788755
}
789756

790757
// extract Qos parameters if any

internal/nvmeof/volume.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,3 +79,47 @@ func SetupListeners(listenersJSON string) ([]ListenerDetails, error) {
7979

8080
return listeners, nil
8181
}
82+
83+
// SetFromParameters populates the NVMeoFVolumeData fields based on the provided parameters map.
84+
// It extracts the subsystem NQN, gateway management info, security config, and
85+
// listener info from the parameters.
86+
// It also applies default values to listeners if necessary.
87+
func (v *NVMeoFVolumeData) SetFromParameters(parameters map[string]string) error {
88+
// set subsystem NQN
89+
v.SubsystemNQN = parameters["subsystemNQN"]
90+
91+
// set gw management info
92+
if nvmeofGatewayPortStr := parameters["nvmeofGatewayPort"]; nvmeofGatewayPortStr != "" {
93+
parsed, err := strconv.ParseUint(nvmeofGatewayPortStr, 10, 32)
94+
if err != nil {
95+
return fmt.Errorf("invalid nvmeofGatewayPort %s: %w", nvmeofGatewayPortStr, err)
96+
}
97+
v.GatewayManagementInfo.Port = uint32(parsed)
98+
}
99+
v.GatewayManagementInfo.Address = parameters["nvmeofGatewayAddress"]
100+
101+
// set security config
102+
v.Security.DhchapMode = parameters["dhchapMode"]
103+
v.Security.AuthenticationKMSID = parameters["authenticationKMSID"]
104+
105+
// If dhchapMode was explicitly provided and is not "none", and authenticationKMSID is empty,
106+
// use a default KMS ID - RBD metadata KMS.
107+
// In production, users should always provide a KMS ID when using DH-CHAP.
108+
if v.Security.DhchapMode != DHCHAPEmpty &&
109+
v.Security.DhchapMode != DHCHAPModeNone &&
110+
v.Security.AuthenticationKMSID == "" {
111+
v.Security.AuthenticationKMSID = "metadata"
112+
}
113+
114+
// set listeners
115+
listeners, err := SetupListeners(parameters["listeners"])
116+
if err != nil {
117+
return fmt.Errorf("failed to set up listeners: %w", err)
118+
}
119+
v.ListenerInfo = listeners
120+
121+
// Apply default values to listeners if necessary
122+
v.SetListenersWithDefaults()
123+
124+
return nil
125+
}

0 commit comments

Comments
 (0)