mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-01 15:07:17 +08:00
Merge pull request #3340 from tb365/bugfix/tb-bugfix-1022
huawei & qcloud & aws bugfix
This commit is contained in:
@@ -93,22 +93,21 @@ func (lbcert *SLoadbalancerCertificate) AllowPerformStatus(ctx context.Context,
|
||||
return false
|
||||
}
|
||||
|
||||
func (self *SLoadbalancerCertificate) AllowUpdateItem(ctx context.Context, userCred mcclient.TokenCredential) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (lbcert *SLoadbalancerCertificate) ValidateUpdateData(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) {
|
||||
data.Set("certificate", jsonutils.NewString(lbcert.Certificate))
|
||||
data.Set("private_key", jsonutils.NewString(lbcert.PrivateKey))
|
||||
data, err := LoadbalancerCertificateManager.validateCertKey(ctx, data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
if data.Contains("certificate") || data.Contains("private_key") {
|
||||
return nil, httperrors.NewForbiddenError("not allowed update content of certificate")
|
||||
}
|
||||
if _, err := lbcert.SVirtualResourceBase.ValidateUpdateData(ctx, userCred, query, data); err != nil {
|
||||
|
||||
updateData := jsonutils.NewDict()
|
||||
if name, err := data.GetString("name"); err == nil {
|
||||
updateData.Set("name", jsonutils.NewString(name))
|
||||
}
|
||||
|
||||
if _, err := lbcert.SVirtualResourceBase.ValidateUpdateData(ctx, userCred, query, updateData); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return data, nil
|
||||
return updateData, nil
|
||||
}
|
||||
|
||||
func (lbcert *SLoadbalancerCertificate) PostCreate(ctx context.Context, userCred mcclient.TokenCredential, ownerProjId mcclient.IIdentityProvider, query jsonutils.JSONObject, data jsonutils.JSONObject) {
|
||||
@@ -219,17 +218,38 @@ func (man *SLoadbalancerCertificateManager) ListItemFilter(ctx context.Context,
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
data := query.(*jsonutils.JSONDict)
|
||||
q, err = validators.ApplyModelFilters(q, data, []*validators.ModelFilterOptions{
|
||||
{Key: "cloudregion", ModelKeyword: "cloudregion", OwnerId: userCred},
|
||||
{Key: "manager", ModelKeyword: "cloudprovider", OwnerId: userCred},
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
data := query.(*jsonutils.JSONDict)
|
||||
if jsonutils.QueryBoolean(query, "usable", false) {
|
||||
q = q.IsNotEmpty("certificate").IsNotEmpty("private_key")
|
||||
region, _ := data.GetString("cloudregion")
|
||||
manager, _ := data.GetString("manager")
|
||||
|
||||
// 证书可用包含两类:1.本地证书内容不为空 2.公有云中已经存在,但是证书内容不完整的证书
|
||||
if len(region) > 0 || len(manager) > 0 {
|
||||
q2 := CachedLoadbalancerCertificateManager.Query("certificate_id").IsFalse("pending_deleted")
|
||||
if len(region) > 0 {
|
||||
q2 = q2.Equals("cloudregion_id", region)
|
||||
}
|
||||
|
||||
if len(manager) > 0 {
|
||||
q2 = q2.Equals("manager_id", manager)
|
||||
}
|
||||
|
||||
count, err := q2.CountWithError()
|
||||
if err != sql.ErrNoRows {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if count > 0 {
|
||||
conditionA := sqlchemy.AND(sqlchemy.IsNotEmpty(q.Field("certificate")), sqlchemy.IsNotEmpty(q.Field("private_key")))
|
||||
conditionB := sqlchemy.In(q.Field("id"), q2.SubQuery())
|
||||
q = q.Filter(sqlchemy.OR(conditionA, conditionB))
|
||||
} else {
|
||||
q = q.IsNotEmpty("certificate").IsNotEmpty("private_key")
|
||||
}
|
||||
} else {
|
||||
q = q.IsNotEmpty("certificate").IsNotEmpty("private_key")
|
||||
}
|
||||
}
|
||||
|
||||
return q, nil
|
||||
|
||||
@@ -16,12 +16,17 @@ package regiondrivers
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"regexp"
|
||||
|
||||
"yunion.io/x/jsonutils"
|
||||
"yunion.io/x/pkg/errors"
|
||||
"yunion.io/x/pkg/utils"
|
||||
|
||||
api "yunion.io/x/onecloud/pkg/apis/compute"
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/db"
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/db/lockman"
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/db/taskman"
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/validators"
|
||||
"yunion.io/x/onecloud/pkg/cloudprovider"
|
||||
@@ -31,8 +36,6 @@ import (
|
||||
"yunion.io/x/onecloud/pkg/util/billing"
|
||||
"yunion.io/x/onecloud/pkg/util/rand"
|
||||
"yunion.io/x/onecloud/pkg/util/seclib2"
|
||||
"yunion.io/x/pkg/errors"
|
||||
"yunion.io/x/pkg/utils"
|
||||
)
|
||||
|
||||
type SHuaWeiRegionDriver struct {
|
||||
@@ -928,6 +931,48 @@ func (self *SHuaWeiRegionDriver) RequestCreateLoadbalancerListener(ctx context.C
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *SHuaWeiRegionDriver) syncLoadbalancerAcl(ctx context.Context, userCred mcclient.TokenCredential, lbacl *models.SCachedLoadbalancerAcl) (jsonutils.JSONObject, error) {
|
||||
iRegion, err := lbacl.GetIRegion()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
acl := &cloudprovider.SLoadbalancerAccessControlList{
|
||||
Name: lbacl.Name,
|
||||
Entrys: []cloudprovider.SLoadbalancerAccessControlListEntry{},
|
||||
}
|
||||
|
||||
lblis, err := lbacl.GetListener()
|
||||
if err == nil {
|
||||
if api.LB_BOOL_ON == lblis.AclStatus {
|
||||
acl.AccessControlEnable = true
|
||||
}
|
||||
} else {
|
||||
return nil, fmt.Errorf("huaweiRegionDriver.syncLoadbalancerAcl %s", err)
|
||||
}
|
||||
|
||||
_localAcl, err := db.FetchById(models.LoadbalancerAclManager, lbacl.AclId)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "huaweiRegionDriver.FetchById.LoaclAcl")
|
||||
}
|
||||
|
||||
localAcl := _localAcl.(*models.SLoadbalancerAcl)
|
||||
if localAcl.AclEntries != nil {
|
||||
for _, entry := range *localAcl.AclEntries {
|
||||
acl.Entrys = append(acl.Entrys, cloudprovider.SLoadbalancerAccessControlListEntry{CIDR: entry.Cidr, Comment: entry.Comment})
|
||||
}
|
||||
}
|
||||
|
||||
lockman.LockRawObject(ctx, "acl", lbacl.Id)
|
||||
defer lockman.ReleaseRawObject(ctx, "acl", lbacl.Id)
|
||||
|
||||
iLoadbalancerAcl, err := iRegion.GetILoadBalancerAclById(lbacl.ExternalId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return nil, iLoadbalancerAcl.Sync(acl)
|
||||
}
|
||||
|
||||
func (self *SHuaWeiRegionDriver) RequestSyncLoadbalancerListener(ctx context.Context, userCred mcclient.TokenCredential, lblis *models.SLoadbalancerListener, task taskman.ITask) error {
|
||||
taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) {
|
||||
{
|
||||
@@ -1142,7 +1187,7 @@ func (self *SHuaWeiRegionDriver) RequestDeleteLoadbalancerBackendGroup(ctx conte
|
||||
}
|
||||
iRegion, err := lbbg.GetIRegion()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.Wrap(err, "huaweiRegionDriver.RequestDeleteLoadbalancerBackendGroup.")
|
||||
}
|
||||
loadbalancer := lbbg.GetLoadbalancer()
|
||||
if loadbalancer == nil {
|
||||
@@ -1154,12 +1199,12 @@ func (self *SHuaWeiRegionDriver) RequestDeleteLoadbalancerBackendGroup(ctx conte
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return nil, err
|
||||
return nil, errors.Wrap(err, "huaweiRegionDriver.RequestDeleteLoadbalancerBackendGroup.GetILoadBalancerById")
|
||||
}
|
||||
|
||||
cachedLbbgs, err := models.HuaweiCachedLbbgManager.GetCachedBackendGroups(lbbg.GetId())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.Wrap(err, "huaweiRegionDriver.RequestDeleteLoadbalancerBackendGroup.GetCachedBackendGroups")
|
||||
}
|
||||
|
||||
for _, cachedLbbg := range cachedLbbgs {
|
||||
@@ -1172,43 +1217,41 @@ func (self *SHuaWeiRegionDriver) RequestDeleteLoadbalancerBackendGroup(ctx conte
|
||||
if err == cloudprovider.ErrNotFound {
|
||||
continue
|
||||
}
|
||||
return nil, err
|
||||
return nil, errors.Wrap(err, "huaweiRegionDriver.RequestDeleteLoadbalancerBackendGroup.GetILoadBalancerBackendGroupById")
|
||||
}
|
||||
|
||||
cachedLbbs, err := cachedLbbg.GetCachedBackends()
|
||||
ilbbs, err := iLoadbalancerBackendGroup.GetILoadbalancerBackends()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.Wrap(err, "huaweiRegionDriver.RequestDeleteLoadbalancerBackendGroup.GetILoadbalancerBackends")
|
||||
}
|
||||
|
||||
for _, cachedLbb := range cachedLbbs {
|
||||
if len(cachedLbb.ExternalId) == 0 {
|
||||
for _, ilbb := range ilbbs {
|
||||
iLoadbalancerBackendGroup.RemoveBackendServer(ilbb.GetId(), ilbb.GetWeight(), ilbb.GetPort())
|
||||
|
||||
_cachedLbb, err := db.FetchByExternalId(models.HuaweiCachedLbManager, ilbb.GetGlobalId())
|
||||
if err != nil {
|
||||
if err != sql.ErrNoRows {
|
||||
return nil, errors.Wrap(err, "huaweiRegionDriver.RequestDeleteLoadbalancerBackendGroup.FetchByExternalId")
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
_lbb, err := db.FetchById(models.LoadbalancerBackendManager, cachedLbb.BackendId)
|
||||
cachedLbb := _cachedLbb.(*models.SHuaweiCachedLb)
|
||||
err = db.DeleteModel(ctx, userCred, cachedLbb)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
lbb := _lbb.(*models.SLoadbalancerBackend)
|
||||
iLoadbalancerBackendGroup.RemoveBackendServer(cachedLbb.ExternalId, lbb.Weight, lbb.Port)
|
||||
|
||||
cachedLbb.SetModelManager(models.HuaweiCachedLbManager, &cachedLbb)
|
||||
err = db.DeleteModel(ctx, userCred, &cachedLbb)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.Wrap(err, "huaweiRegionDriver.RequestDeleteLoadbalancerBackendGroup.DeleteModel")
|
||||
}
|
||||
}
|
||||
|
||||
err = iLoadbalancerBackendGroup.Delete()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.Wrap(err, "huaweiRegionDriver.RequestDeleteLoadbalancerBackendGroup.Delete")
|
||||
}
|
||||
|
||||
cachedLbbg.SetModelManager(models.HuaweiCachedLbbgManager, &cachedLbbg)
|
||||
err = db.DeleteModel(ctx, userCred, &cachedLbbg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.Wrap(err, "huaweiRegionDriver.RequestDeleteLoadbalancerBackendGroup.DeleteModel")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -292,15 +292,6 @@ func (self *SManagedVirtualizationRegionDriver) createLoadbalancerAcl(ctx contex
|
||||
Entrys: []cloudprovider.SLoadbalancerAccessControlListEntry{},
|
||||
}
|
||||
|
||||
lblis, err := lbacl.GetListener()
|
||||
if err == nil {
|
||||
if api.LB_BOOL_ON == lblis.AclStatus {
|
||||
acl.AccessControlEnable = true
|
||||
}
|
||||
} else {
|
||||
return nil, fmt.Errorf("regionDriver.createLoadbalancerAcl %s", err)
|
||||
}
|
||||
|
||||
_originAcl, err := db.FetchById(models.LoadbalancerAclManager, lbacl.AclId)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "regionDriver.FetchAcl")
|
||||
@@ -316,6 +307,8 @@ func (self *SManagedVirtualizationRegionDriver) createLoadbalancerAcl(ctx contex
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
lbacl.SetModelManager(models.CachedLoadbalancerAclManager, lbacl)
|
||||
if err := db.SetExternalId(lbacl, userCred, iLoadbalancerAcl.GetGlobalId()); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -340,15 +333,6 @@ func (self *SManagedVirtualizationRegionDriver) syncLoadbalancerAcl(ctx context.
|
||||
Entrys: []cloudprovider.SLoadbalancerAccessControlListEntry{},
|
||||
}
|
||||
|
||||
lblis, err := lbacl.GetListener()
|
||||
if err == nil {
|
||||
if api.LB_BOOL_ON == lblis.AclStatus {
|
||||
acl.AccessControlEnable = true
|
||||
}
|
||||
} else {
|
||||
return nil, fmt.Errorf("regionDriver.syncLoadbalancerAcl %s", err)
|
||||
}
|
||||
|
||||
_localAcl, err := db.FetchById(models.LoadbalancerAclManager, lbacl.AclId)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "regionDriver.FetchById.LoaclAcl")
|
||||
|
||||
@@ -16,6 +16,7 @@ package regiondrivers
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"regexp"
|
||||
|
||||
@@ -145,6 +146,8 @@ func (self *SQcloudRegionDriver) ValidateCreateLoadbalancerListenerData(ctx cont
|
||||
return nil, httperrors.NewConflictError(err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
data.Set("backend_group_id", jsonutils.NewString(lbbg.GetId()))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -303,33 +306,100 @@ func (self *SQcloudRegionDriver) RequestDeleteLoadbalancerBackend(ctx context.Co
|
||||
}
|
||||
iRegion, err := lb.GetIRegion()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.Wrap(err, "qcloudRegion.RequestDeleteLoadbalancerBackend.GetIRegion")
|
||||
}
|
||||
|
||||
// ===========兼容腾讯云,未关联具体转发规则时,直接删除本地数据即可===============
|
||||
if iRegion.GetProvider() == api.CLOUD_PROVIDER_QCLOUD {
|
||||
count, err := lbbg.RefCount()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if count == 0 {
|
||||
return nil, nil
|
||||
}
|
||||
count, err := lbbg.RefCount()
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "qcloudRegion.RequestDeleteLoadbalancerBackend.RefCount")
|
||||
}
|
||||
if count == 0 {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
iLoadbalancer, err := iRegion.GetILoadBalancerById(lb.ExternalId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
iLoadbalancerBackendGroup, err := iLoadbalancer.GetILoadBalancerBackendGroupById(lbbg.ExternalId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.Wrap(err, "qcloudRegion.RequestDeleteLoadbalancerBackend.GetLoadbalancerListeners")
|
||||
}
|
||||
|
||||
guest := lbb.GetGuest()
|
||||
if guest == nil {
|
||||
return nil, fmt.Errorf("failed to find guest for lbb %s", lbb.Name)
|
||||
}
|
||||
return nil, iLoadbalancerBackendGroup.RemoveBackendServer(guest.ExternalId, lbb.Weight, lbb.Port)
|
||||
|
||||
// delete
|
||||
if forword, _ := iLoadbalancer.GetMetadata().Int("Forward"); forword == 0 {
|
||||
iLoadbalancerBackendGroup, err := iLoadbalancer.GetILoadBalancerBackendGroupById(lbbg.ExternalId)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "qcloudRegion.RequestDeleteLoadbalancerBackend.GetLoadbalancerListenerRules")
|
||||
}
|
||||
|
||||
return nil, iLoadbalancerBackendGroup.RemoveBackendServer(guest.ExternalId, lbb.Weight, lbb.Port)
|
||||
} else {
|
||||
lblis, err := lbbg.GetLoadbalancerListeners()
|
||||
if err != nil {
|
||||
if err != sql.ErrNoRows {
|
||||
return nil, errors.Wrap(err, "qcloudRegion.RequestDeleteLoadbalancerBackend.GetLoadbalancerListeners")
|
||||
}
|
||||
} else {
|
||||
for i := range lblis {
|
||||
_lblis := lblis[i]
|
||||
if utils.IsInStringArray(_lblis.ListenerType, []string{api.LB_LISTENER_TYPE_UDP, api.LB_LISTENER_TYPE_TCP}) {
|
||||
external_id := fmt.Sprintf("%s/%s", lb.ExternalId, _lblis.ExternalId)
|
||||
iLoadbalancerBackendGroup, err := iLoadbalancer.GetILoadBalancerBackendGroupById(external_id)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "qcloudRegion.RequestDeleteLoadbalancerBackend.GetILoadBalancerBackendGroupById")
|
||||
}
|
||||
backends, err := iLoadbalancerBackendGroup.GetILoadbalancerBackends()
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "qcloudRegion.RequestDeleteLoadbalancerBackend.listener.GetILoadbalancerBackends")
|
||||
}
|
||||
|
||||
for i := range backends {
|
||||
if backends[i].GetBackendId() == guest.ExternalId && backends[i].GetPort() == lbb.Port && backends[i].GetWeight() == lbb.Weight {
|
||||
err = iLoadbalancerBackendGroup.RemoveBackendServer(guest.ExternalId, lbb.Weight, lbb.Port)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "qcloudRegion.RequestDeleteLoadbalancerBackend.listener.RemoveBackendServer")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
lbrs, err := lbbg.GetLoadbalancerListenerRules()
|
||||
if err != nil {
|
||||
if err != sql.ErrNoRows {
|
||||
return nil, errors.Wrap(err, "qcloudRegion.RequestDeleteLoadbalancerBackend.GetLoadbalancerListenerRules")
|
||||
}
|
||||
} else {
|
||||
for i := range lbrs {
|
||||
lbr := lbrs[i]
|
||||
external_id := fmt.Sprintf("%s/%s", lb.ExternalId, lbr.ExternalId)
|
||||
iLoadbalancerBackendGroup, err := iLoadbalancer.GetILoadBalancerBackendGroupById(external_id)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "qcloudRegion.RequestDeleteLoadbalancerBackend.GetILoadBalancerBackendGroupById")
|
||||
}
|
||||
|
||||
backends, err := iLoadbalancerBackendGroup.GetILoadbalancerBackends()
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "qcloudRegion.RequestDeleteLoadbalancerBackend.listener.GetILoadbalancerBackends")
|
||||
}
|
||||
|
||||
for i := range backends {
|
||||
if backends[i].GetBackendId() == guest.ExternalId && backends[i].GetPort() == lbb.Port && backends[i].GetWeight() == lbb.Weight {
|
||||
err = iLoadbalancerBackendGroup.RemoveBackendServer(guest.ExternalId, lbb.Weight, lbb.Port)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "qcloudRegion.RequestDeleteLoadbalancerBackend.rule.RemoveBackendServer")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil, nil
|
||||
})
|
||||
return nil
|
||||
}
|
||||
@@ -511,7 +581,7 @@ func (self *SQcloudRegionDriver) RequestCreateLoadbalancerListenerRule(ctx conte
|
||||
}
|
||||
// ====腾讯云添加后端服务器=====
|
||||
if len(rule.BackendGroupID) > 0 {
|
||||
ilbbg, err := iLoadbalancer.GetILoadBalancerBackendGroupById(rule.BackendGroupID)
|
||||
ilbbg, err := iLoadbalancer.GetILoadBalancerBackendGroupById(iListenerRule.GetBackendGroupId())
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to find backend group for listener rule %s: %s", lbr.Name, err)
|
||||
}
|
||||
|
||||
@@ -142,7 +142,7 @@ func (self *SEipAddress) Associate(instanceId string) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = cloudprovider.WaitStatus(self, api.EIP_STATUS_READY, 10*time.Second, 180*time.Second)
|
||||
err = cloudprovider.WaitStatusWithDelay(self, api.EIP_STATUS_READY, 5*time.Second, 10*time.Second, 180*time.Second)
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
@@ -143,13 +143,9 @@ func onecloudHealthCodeToQcloud(codes string) int {
|
||||
|
||||
// https://cloud.tencent.com/document/product/214/30693
|
||||
// todo: 1.限制比较多必须加参数校验 2.Onecloud 不支持双向证书可能存在兼容性问题
|
||||
// 应用型负载均衡 https监听默认开启SNI。传统型不支持设置SNI
|
||||
// 应用型负载均衡 传统型不支持设置SNI
|
||||
func (self *SLoadbalancer) CreateILoadBalancerListener(listener *cloudprovider.SLoadbalancerListener) (cloudprovider.ICloudLoadbalancerListener, error) {
|
||||
sniSwitch := 0
|
||||
if listener.ListenerType == api.LB_LISTENER_TYPE_HTTPS {
|
||||
sniSwitch = 1
|
||||
}
|
||||
|
||||
hc := getHealthCheck(listener)
|
||||
cert := getCertificate(listener)
|
||||
|
||||
@@ -481,7 +477,7 @@ func (self *SRegion) CreateLoadbalancerListener(lbid, name, protocol string, por
|
||||
params["ListenerNames.0"] = name
|
||||
}
|
||||
|
||||
if utils.IsInStringArray(protocol, []string{"TCP", "UDP", "TCP_SSL"}) {
|
||||
if utils.IsInStringArray(protocol, []string{PROTOCOL_TCP, PROTOCOL_UDP, PROTOCOL_TCP_SSL}) {
|
||||
params = healthCheckParams(LB_TYPE_APPLICATION, params, healthCheck, "HealthCheck.")
|
||||
|
||||
if scheduler != nil && len(*scheduler) > 0 {
|
||||
@@ -492,7 +488,7 @@ func (self *SRegion) CreateLoadbalancerListener(lbid, name, protocol string, por
|
||||
params["SessionExpireTime"] = strconv.Itoa(*sessionExpireTime)
|
||||
}
|
||||
} else {
|
||||
if sniSwitch != nil {
|
||||
if protocol == PROTOCOL_HTTPS && sniSwitch != nil {
|
||||
params["SniSwitch"] = strconv.Itoa(*sniSwitch)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,14 @@ var HTTP_CODES = []string{
|
||||
api.LB_HEALTH_CHECK_HTTP_CODE_5xx,
|
||||
}
|
||||
|
||||
const (
|
||||
PROTOCOL_TCP = "TCP"
|
||||
PROTOCOL_UDP = "UDP"
|
||||
PROTOCOL_TCP_SSL = "TCP_SSL"
|
||||
PROTOCOL_HTTP = "HTTP"
|
||||
PROTOCOL_HTTPS = "HTTPS"
|
||||
)
|
||||
|
||||
type certificate struct {
|
||||
SSLMode string `json:"SSLMode"`
|
||||
CERTCAID string `json:"CertCaId"`
|
||||
@@ -266,15 +274,15 @@ func (self *SLBListener) GetMetadata() *jsonutils.JSONDict {
|
||||
|
||||
func (self *SLBListener) GetListenerType() string {
|
||||
switch self.Protocol {
|
||||
case "TCP":
|
||||
case PROTOCOL_TCP:
|
||||
return api.LB_LISTENER_TYPE_TCP
|
||||
case "UDP":
|
||||
case PROTOCOL_UDP:
|
||||
return api.LB_LISTENER_TYPE_UDP
|
||||
case "HTTP":
|
||||
case PROTOCOL_HTTP:
|
||||
return api.LB_LISTENER_TYPE_HTTP
|
||||
case "HTTPS":
|
||||
case PROTOCOL_HTTPS:
|
||||
return api.LB_LISTENER_TYPE_HTTPS
|
||||
case "TCP_SSL":
|
||||
case PROTOCOL_TCP_SSL:
|
||||
return api.LB_LISTENER_TYPE_TCP
|
||||
default:
|
||||
return ""
|
||||
@@ -714,15 +722,15 @@ func getCertificate(listener *cloudprovider.SLoadbalancerListener) *certificate
|
||||
func getProtocol(listener *cloudprovider.SLoadbalancerListener) string {
|
||||
switch listener.ListenerType {
|
||||
case api.LB_LISTENER_TYPE_HTTPS:
|
||||
return "HTTPS"
|
||||
return PROTOCOL_HTTPS
|
||||
case api.LB_LISTENER_TYPE_HTTP:
|
||||
return "HTTP"
|
||||
return PROTOCOL_HTTP
|
||||
case api.LB_LISTENER_TYPE_TCP:
|
||||
return "TCP"
|
||||
return PROTOCOL_TCP
|
||||
case api.LB_LISTENER_TYPE_UDP:
|
||||
return "UDP"
|
||||
return PROTOCOL_UDP
|
||||
case "tcp_ssl":
|
||||
return "TCP_SSL"
|
||||
return PROTOCOL_TCP_SSL
|
||||
default:
|
||||
return ""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user