mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
Merge pull request #5763 from tb365/automated-cherry-pick-of-#5759-upstream-release-3.1
Automated cherry pick of #5759: aws elb bugfix
This commit is contained in:
@@ -38,6 +38,7 @@ import (
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
"yunion.io/x/onecloud/pkg/util/choices"
|
||||
"yunion.io/x/onecloud/pkg/util/rand"
|
||||
"yunion.io/x/onecloud/pkg/util/rbacutils"
|
||||
)
|
||||
|
||||
type SAwsRegionDriver struct {
|
||||
@@ -53,6 +54,20 @@ func (self *SAwsRegionDriver) GetProvider() string {
|
||||
return api.CLOUD_PROVIDER_AWS
|
||||
}
|
||||
|
||||
func networkCheck(network *models.SNetwork) error {
|
||||
total := network.GetPorts()
|
||||
used, err := network.GetTotalNicCount()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "validateAwsLbNetwork.GetTotalNicCount")
|
||||
}
|
||||
|
||||
if (total - used) < 8 {
|
||||
return fmt.Errorf("network %s free ip is less than 8", network.GetId())
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func validateAwsLbNetwork(ownerId mcclient.IIdentityProvider, data *jsonutils.JSONDict, requiredMin int) (*jsonutils.JSONDict, error) {
|
||||
var networkIds []string
|
||||
if ns, err := data.GetString("network"); err != nil {
|
||||
@@ -74,22 +89,45 @@ func validateAwsLbNetwork(ownerId mcclient.IIdentityProvider, data *jsonutils.JS
|
||||
}
|
||||
|
||||
network := networkV.Model.(*models.SNetwork)
|
||||
err := networkCheck(network)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "validateAwsLbNetwork.networkCheck")
|
||||
}
|
||||
|
||||
region, zone, vpc, _, err := network.ValidateElbNetwork(nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
//随机选择一个子网
|
||||
if requiredMin == 2 && len(networkIds) == 1 {
|
||||
var nets []models.SNetwork
|
||||
wires := models.WireManager.Query().SubQuery()
|
||||
q := models.NetworkManager.Query().IsFalse("pending_deleted")
|
||||
q = models.NetworkManager.FilterByOwner(q, network.GetOwnerId(), rbacutils.ScopeProject)
|
||||
q = q.Join(wires, sqlchemy.Equals(q.Field("wire_id"), wires.Field("id")))
|
||||
q = q.Filter(sqlchemy.Equals(wires.Field("vpc_id"), vpc.GetId()))
|
||||
q = q.Filter(sqlchemy.NotEquals(wires.Field("zone_id"), zone.GetId()))
|
||||
q = q.Equals("project_id", network.ProjectId)
|
||||
err := q.First(secondNet)
|
||||
err := q.All(&nets)
|
||||
if err != nil {
|
||||
return nil, httperrors.NewInputParameterError("required at least %d subnet.", requiredMin)
|
||||
}
|
||||
|
||||
secondNetFound := false
|
||||
for i := range nets {
|
||||
net := nets[i]
|
||||
err := networkCheck(&net)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
secondNet = &net
|
||||
secondNetFound = true
|
||||
break
|
||||
}
|
||||
|
||||
if !secondNetFound {
|
||||
return nil, httperrors.NewInputParameterError("required at least %d subnet with at least 8 free ip.", requiredMin)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -282,7 +282,15 @@ func (region *SRegion) constructHTTPCreateListenerParams(params map[string]strin
|
||||
}
|
||||
params["HealthCheckTimeout"] = fmt.Sprintf("%d", listener.HealthCheckTimeout)
|
||||
}
|
||||
|
||||
if listener.ClientRequestTimeout < 1 || listener.ClientRequestTimeout > 180 {
|
||||
listener.ClientRequestTimeout = 60
|
||||
}
|
||||
params["RequestTimeout"] = fmt.Sprintf("%d", listener.ClientRequestTimeout)
|
||||
|
||||
if listener.ClientIdleTimeout < 1 || listener.ClientIdleTimeout > 60 {
|
||||
listener.ClientIdleTimeout = 15
|
||||
}
|
||||
params["IdleTimeout"] = fmt.Sprintf("%d", listener.ClientIdleTimeout)
|
||||
|
||||
params["StickySession"] = listener.StickySession
|
||||
|
||||
Reference in New Issue
Block a user