Skip to content

Commit 592d7ce

Browse files
authored
Merge pull request #1629 from powerkimhub/enhance/nlb-vm-optional-creation-and-fixes
[KeyPair/NLB] Allow NLB creation without VMs and resolve multi-CSP bugs
2 parents 3242950 + e6a34a4 commit 592d7ce

File tree

21 files changed

+2334
-1267
lines changed

21 files changed

+2334
-1267
lines changed

api-runtime/common-runtime/NLBManager.go

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -372,30 +372,33 @@ func CreateNLB(connectionName string, rsType string, reqInfo cres.NLBInfo, IDTra
372372
reqInfo.VpcIID = getDriverIID(cres.IID{NameId: vpcIIDInfo.NameId, SystemId: vpcIIDInfo.SystemId})
373373
//+++++++++++++++++++++++++++++++++++++++++++
374374

375+
// VMGroup.VMs is optional, skip if not provided
375376
vmList := reqInfo.VMGroup.VMs
376-
for idx, vmIID := range *vmList {
377-
var vmIIDInfo VMIIDInfo
378-
if os.Getenv("PERMISSION_BASED_CONTROL_MODE") != "" {
379-
var iidInfoList []*VMIIDInfo
380-
err = getAuthIIDInfoList(connectionName, &iidInfoList)
381-
if err != nil {
382-
cblog.Error(err)
383-
return nil, err
384-
}
385-
castedIIDInfo, err := getAuthIIDInfo(&iidInfoList, vmIID.NameId)
386-
if err != nil {
387-
cblog.Error(err)
388-
return nil, err
389-
}
390-
vmIIDInfo = *castedIIDInfo.(*VMIIDInfo)
391-
} else {
392-
err = infostore.GetByConditions(&vmIIDInfo, CONNECTION_NAME_COLUMN, connectionName, NAME_ID_COLUMN, vmIID.NameId)
393-
if err != nil {
394-
cblog.Error(err)
395-
return nil, err
377+
if vmList != nil && len(*vmList) > 0 {
378+
for idx, vmIID := range *vmList {
379+
var vmIIDInfo VMIIDInfo
380+
if os.Getenv("PERMISSION_BASED_CONTROL_MODE") != "" {
381+
var iidInfoList []*VMIIDInfo
382+
err = getAuthIIDInfoList(connectionName, &iidInfoList)
383+
if err != nil {
384+
cblog.Error(err)
385+
return nil, err
386+
}
387+
castedIIDInfo, err := getAuthIIDInfo(&iidInfoList, vmIID.NameId)
388+
if err != nil {
389+
cblog.Error(err)
390+
return nil, err
391+
}
392+
vmIIDInfo = *castedIIDInfo.(*VMIIDInfo)
393+
} else {
394+
err = infostore.GetByConditions(&vmIIDInfo, CONNECTION_NAME_COLUMN, connectionName, NAME_ID_COLUMN, vmIID.NameId)
395+
if err != nil {
396+
cblog.Error(err)
397+
return nil, err
398+
}
396399
}
400+
(*vmList)[idx] = getDriverIID(cres.IID{NameId: vmIIDInfo.NameId, SystemId: vmIIDInfo.SystemId})
397401
}
398-
(*vmList)[idx] = getDriverIID(cres.IID{NameId: vmIIDInfo.NameId, SystemId: vmIIDInfo.SystemId})
399402
}
400403
//+++++++++++++++++++++++++++++++++++++++++++
401404

@@ -1692,6 +1695,12 @@ func GetVMGroupHealthInfo(connectionName string, nlbName string) (*cres.HealthIn
16921695

16931696
func setVMUserIIDwithSystemId(connectionName string, nlbName string, healthInfo *cres.HealthInfo) error {
16941697
var errList []string
1698+
1699+
// If AllVMs is nil or empty, return early (no VMs to process)
1700+
if healthInfo.AllVMs == nil || len(*healthInfo.AllVMs) == 0 {
1701+
return nil
1702+
}
1703+
16951704
vmIIDList := healthInfo.AllVMs
16961705
for idx, vm := range *vmIIDList {
16971706
foundFlag := false

api-runtime/rest-runtime/NLBRest.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ type NLBCreateRequest struct {
152152
Type string `json:"Type" validate:"required" example:"PUBLIC"` // PUBLIC(V) | INTERNAL
153153
Scope string `json:"Scope" validate:"required" example:"REGION"` // REGION(V) | GLOBAL
154154
Listener NLBListenerCreateRequest `json:"Listener" validate:"required"`
155-
VMGroup NLBVMGroupRequest `json:"VMGroup" validate:"required"`
155+
VMGroup NLBVMGroupRequest `json:"VMGroup,omitempty" validate:"omitempty"`
156156
HealthChecker NLBHealthCheckerRequest `json:"HealthChecker" validate:"required"`
157157
TagList []cres.KeyValue `json:"TagList,omitempty" validate:"omitempty"`
158158
} `json:"ReqInfo" validate:"required"`
@@ -193,10 +193,18 @@ func CreateNLB(c echo.Context) error {
193193
Type: req.ReqInfo.Type,
194194
Scope: req.ReqInfo.Scope,
195195
Listener: convertListenerInfo(req.ReqInfo.Listener),
196-
VMGroup: convertVMGroupInfo(req.ReqInfo.VMGroup),
197196
TagList: req.ReqInfo.TagList,
198197
//HealthChecker: below
199198
}
199+
200+
// VMGroup is optional - if not provided, use Listener's Protocol and Port with empty VMs
201+
if req.ReqInfo.VMGroup.Protocol != "" || req.ReqInfo.VMGroup.Port != "" || len(req.ReqInfo.VMGroup.VMs) > 0 {
202+
reqInfo.VMGroup = convertVMGroupInfo(req.ReqInfo.VMGroup)
203+
} else {
204+
// Use Listener's Protocol and Port for VMGroup when not specified
205+
emptyVMList := []cres.IID{}
206+
reqInfo.VMGroup = cres.VMGroupInfo{req.ReqInfo.Listener.Protocol, req.ReqInfo.Listener.Port, &emptyVMList, "", nil}
207+
}
200208
healthChecker, err := convertHealthCheckerInfo(req.ReqInfo.HealthChecker)
201209
if err != nil {
202210
return echo.NewHTTPError(http.StatusInternalServerError, err.Error())
@@ -224,7 +232,7 @@ func convertListenerInfo(listenerReq NLBListenerCreateRequest) cres.ListenerInfo
224232
type NLBVMGroupRequest struct {
225233
Protocol string `json:"Protocol" validate:"required" example:"TCP"` // TCP|UDP
226234
Port string `json:"Port" validate:"required" example:"22"` // Listener Port or 1-65535
227-
VMs []string `json:"VMs" validate:"required" example:"vm-01", "vm-02"`
235+
VMs []string `json:"VMs,omitempty" validate:"omitempty" example:"vm-01,vm-02"`
228236
}
229237

230238
func convertVMGroupInfo(vgInfo NLBVMGroupRequest) cres.VMGroupInfo {

0 commit comments

Comments
 (0)