fix(region): vpc lb with eip (#14332)

This commit is contained in:
屈轩
2022-05-28 20:29:58 +08:00
committed by GitHub
parent 94f509a524
commit e978f4084b
3 changed files with 40 additions and 1 deletions
+2
View File
@@ -183,6 +183,8 @@ type LoadbalancerDetails struct {
// 公网IP地址
Eip string `json:"eip"`
EipId string `json:"eip_id"`
// 公网IP地址类型: 弹性、非弹性
// example: public_ip
EipMode string `json:"eip_mode"`
+1
View File
@@ -699,6 +699,7 @@ func (lb *SLoadbalancer) getMoreDetails(out api.LoadbalancerDetails) (api.Loadba
if eip != nil {
out.Eip = eip.IpAddr
out.EipMode = eip.Mode
out.EipId = eip.Id
}
if lb.BackendGroupId != "" {
+37 -1
View File
@@ -195,6 +195,25 @@ func (self *SKVMRegionDriver) ValidateCreateLoadbalancerData(ctx context.Context
if vpc.Id == api.DEFAULT_VPC_ID {
lbNetworkType = api.LB_NETWORK_TYPE_CLASSIC
}
eipId, _ := data.GetString("eip")
if len(eipId) > 0 {
_eip, err := validators.ValidateModel(userCred, models.ElasticipManager, &eipId)
if err != nil {
return nil, err
}
eip := _eip.(*models.SElasticip)
if eip.CloudregionId != region.GetId() {
return nil, httperrors.NewInputParameterError("lb region %s does not match eip region %s ",
region.GetId(), eip.CloudregionId)
}
if eip.Status != api.EIP_STATUS_READY {
return nil, httperrors.NewInvalidStatusError("eip %s status not ready", eip.Name)
}
if len(eip.AssociateType) > 0 {
return nil, httperrors.NewInvalidStatusError("eip %s alread associate %s", eip.Name, eip.AssociateType)
}
data.Set("eip_id", jsonutils.NewString(eip.Id))
}
data.Set("cloudregion_id", jsonutils.NewString(region.GetId()))
data.Set("zone_id", jsonutils.NewString(zone.GetId()))
@@ -773,7 +792,24 @@ func (self *SKVMRegionDriver) RequestCreateLoadbalancer(ctx context.Context, use
}
return nil
})
return nil, err
if err != nil {
return nil, errors.Wrapf(err, "db.Update")
}
// bind eip
eipId, _ := task.GetParams().GetString("eip_id")
if len(eipId) > 0 {
_eip, err := models.ElasticipManager.FetchById(eipId)
if err != nil {
return nil, errors.Wrapf(err, "ElasticipManager.FetchById(%s)", eipId)
}
eip := _eip.(*models.SElasticip)
err = eip.AssociateLoadbalancer(ctx, userCred, lb)
if err != nil {
return nil, errors.Wrapf(err, "eip.AssociateLoadbalancer")
}
}
return nil, nil
})
return nil
}