From f6481b73633741cead155b97d2e01c7ee3b2221c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Wed, 23 Jan 2019 11:45:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dlb=E5=90=8C=E6=AD=A5=E6=97=B6?= =?UTF-8?q?=E7=9A=84=E4=B8=80=E4=BA=9B=E5=B0=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/util/aliyun/loadbalancer.go | 10 ++++-- pkg/util/aliyun/loadbalanceracl.go | 2 +- pkg/util/aliyun/loadbalancerbackendgroup.go | 7 ++-- .../aliyun/loadbalancerdefaultbackendgroup.go | 7 ++-- pkg/util/aliyun/loadbalancerhttplistener.go | 29 ++++++++++++++-- pkg/util/aliyun/loadbalancerhttpslistener.go | 28 ++++++++++++++-- .../loadbalancermasterslavebackendgroup.go | 5 +-- pkg/util/aliyun/loadbalancertcplistener.go | 33 +++++++++++++++---- pkg/util/aliyun/loadbalancerudplistener.go | 33 +++++++++++++++---- 9 files changed, 123 insertions(+), 31 deletions(-) diff --git a/pkg/util/aliyun/loadbalancer.go b/pkg/util/aliyun/loadbalancer.go index 221f7b3d50..42a274d68b 100644 --- a/pkg/util/aliyun/loadbalancer.go +++ b/pkg/util/aliyun/loadbalancer.go @@ -5,6 +5,7 @@ import ( "strings" "yunion.io/x/jsonutils" + "yunion.io/x/log" "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/compute/models" ) @@ -101,7 +102,12 @@ func (lb *SLoadbalancer) GetNetworkId() string { } func (lb *SLoadbalancer) GetZoneId() string { - return fmt.Sprintf("%s/%s", CLOUD_PROVIDER_ALIYUN, lb.MasterZoneId) + zone, err := lb.region.getZoneById(lb.MasterZoneId) + if err != nil { + log.Errorf("failed to find zone for lb %s error: %v", lb.LoadBalancerName, err) + return "" + } + return zone.GetGlobalId() } func (lb *SLoadbalancer) IsEmulated() bool { @@ -142,7 +148,7 @@ func (region *SRegion) GetLoadbalancerDetail(loadbalancerId string) (*SLoadbalan if err != nil { return nil, err } - lb := SLoadbalancer{} + lb := SLoadbalancer{region: region} return &lb, body.Unmarshal(&lb) } diff --git a/pkg/util/aliyun/loadbalanceracl.go b/pkg/util/aliyun/loadbalanceracl.go index 37a6cf0a0d..bcf255d808 100644 --- a/pkg/util/aliyun/loadbalanceracl.go +++ b/pkg/util/aliyun/loadbalanceracl.go @@ -76,7 +76,7 @@ func (region *SRegion) GetLoadbalancerAclDetail(aclId string) (*SLoadbalancerAcl if err != nil { return nil, err } - detail := SLoadbalancerAcl{} + detail := SLoadbalancerAcl{region: region} return &detail, body.Unmarshal(&detail) } diff --git a/pkg/util/aliyun/loadbalancerbackendgroup.go b/pkg/util/aliyun/loadbalancerbackendgroup.go index 97e9948778..513f0727c1 100644 --- a/pkg/util/aliyun/loadbalancerbackendgroup.go +++ b/pkg/util/aliyun/loadbalancerbackendgroup.go @@ -3,6 +3,7 @@ package aliyun import ( "yunion.io/x/jsonutils" "yunion.io/x/onecloud/pkg/cloudprovider" + "yunion.io/x/onecloud/pkg/compute/models" ) type Rule struct { @@ -51,15 +52,15 @@ func (backendgroup *SLoadbalancerBackendGroup) GetGlobalId() string { } func (backendgroup *SLoadbalancerBackendGroup) GetStatus() string { - return "" + return models.LB_STATUS_ENABLED } func (backendgroup *SLoadbalancerBackendGroup) IsDefault() bool { - return true + return false } func (backendgroup *SLoadbalancerBackendGroup) GetType() string { - return "standard" + return models.LB_BACKENDGROUP_TYPE_NORMAL } func (backendgroup *SLoadbalancerBackendGroup) GetMetadata() *jsonutils.JSONDict { diff --git a/pkg/util/aliyun/loadbalancerdefaultbackendgroup.go b/pkg/util/aliyun/loadbalancerdefaultbackendgroup.go index 29ffa14d92..7261df2c2a 100644 --- a/pkg/util/aliyun/loadbalancerdefaultbackendgroup.go +++ b/pkg/util/aliyun/loadbalancerdefaultbackendgroup.go @@ -5,6 +5,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/onecloud/pkg/cloudprovider" + "yunion.io/x/onecloud/pkg/compute/models" ) type SLoadbalancerDefaultBackendGroup struct { @@ -24,15 +25,15 @@ func (backendgroup *SLoadbalancerDefaultBackendGroup) GetGlobalId() string { } func (backendgroup *SLoadbalancerDefaultBackendGroup) GetStatus() string { - return "" + return models.LB_STATUS_ENABLED } func (backendgroup *SLoadbalancerDefaultBackendGroup) IsDefault() bool { - return false + return true } func (backendgroup *SLoadbalancerDefaultBackendGroup) GetType() string { - return "default" + return models.LB_BACKENDGROUP_TYPE_DEFAULT } func (backendgroup *SLoadbalancerDefaultBackendGroup) GetMetadata() *jsonutils.JSONDict { diff --git a/pkg/util/aliyun/loadbalancerhttplistener.go b/pkg/util/aliyun/loadbalancerhttplistener.go index 05ebd49ed9..2f47b464ad 100644 --- a/pkg/util/aliyun/loadbalancerhttplistener.go +++ b/pkg/util/aliyun/loadbalancerhttplistener.go @@ -5,6 +5,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/onecloud/pkg/cloudprovider" + "yunion.io/x/onecloud/pkg/compute/models" ) type SLoadbalancerHTTPListener struct { @@ -14,6 +15,7 @@ type SLoadbalancerHTTPListener struct { BackendServerPort int // 负载均衡实例后端使用的端口。 Bandwidth int // 监听的带宽峰值。 Status string // 当前监听的状态。取值:starting | running | configuring | stopping | stopped + Description string XForwardedFor string // 是否开启通过X-Forwarded-For头字段获取访者真实IP。 XForwardedFor_SLBIP string // 是否通过SLB-IP头字段获取客户端请求的真实IP。 @@ -52,9 +54,16 @@ type SLoadbalancerHTTPListener struct { Rules Rules //监听下的转发规则列表,具体请参见RuleList。 ForwardPort int // HTTP至HTTPS的监听转发端口。暂时只支持将HTTP 80访问重定向转发至HTTPS 443。 说明 如果 ListenerForward的值为 off,该参数不显示。 ListenerForward string // 表示是否开启HTTP至HTTPS的监听转发。on:表示开启 off:表示未开启 + VServerGroupId string // 绑定的服务器组ID } func (listener *SLoadbalancerHTTPListener) GetName() string { + if len(listener.Description) == 0 { + listener.Refresh() + } + if len(listener.Description) > 0 { + return listener.Description + } return fmt.Sprintf("HTTP:%d", listener.ListenerPort) } @@ -67,7 +76,14 @@ func (listerner *SLoadbalancerHTTPListener) GetGlobalId() string { } func (listerner *SLoadbalancerHTTPListener) GetStatus() string { - return listerner.Status + switch listerner.Status { + case "starting", "running": + return models.LB_STATUS_ENABLED + case "configuring", "stopping", "stopped": + return models.LB_STATUS_DISABLED + default: + return models.LB_STATUS_UNKNOWN + } } func (listerner *SLoadbalancerHTTPListener) GetMetadata() *jsonutils.JSONDict { @@ -79,7 +95,11 @@ func (listerner *SLoadbalancerHTTPListener) IsEmulated() bool { } func (listerner *SLoadbalancerHTTPListener) Refresh() error { - return nil + lis, err := listerner.lb.region.GetLoadbalancerHTTPListener(listerner.lb.LoadBalancerId, listerner.ListenerPort) + if err != nil { + return err + } + return jsonutils.Update(listerner, lis) } func (listerner *SLoadbalancerHTTPListener) GetListenerType() string { @@ -91,7 +111,10 @@ func (listerner *SLoadbalancerHTTPListener) GetListenerPort() int { } func (listerner *SLoadbalancerHTTPListener) GetBackendGroupId() string { - return "" + if len(listerner.VServerGroupId) == 0 { + listerner.Refresh() + } + return listerner.VServerGroupId } func (listerner *SLoadbalancerHTTPListener) GetScheduler() string { diff --git a/pkg/util/aliyun/loadbalancerhttpslistener.go b/pkg/util/aliyun/loadbalancerhttpslistener.go index 6589f973fa..a88a12ab15 100644 --- a/pkg/util/aliyun/loadbalancerhttpslistener.go +++ b/pkg/util/aliyun/loadbalancerhttpslistener.go @@ -5,6 +5,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/onecloud/pkg/cloudprovider" + "yunion.io/x/onecloud/pkg/compute/models" ) type SLoadbalancerHTTPSListener struct { @@ -14,6 +15,7 @@ type SLoadbalancerHTTPSListener struct { BackendServerPort int // 负载均衡实例后端使用的端口。 Bandwidth int // 监听的带宽峰值。 Status string // 当前监听的状态。取值:starting | running | configuring | stopping | stopped + Description string XForwardedFor string // 是否开启通过X-Forwarded-For头字段获取访者真实IP。 XForwardedFor_SLBIP string // 是否通过SLB-IP头字段获取客户端请求的真实IP。 @@ -51,6 +53,12 @@ type SLoadbalancerHTTPSListener struct { } func (listener *SLoadbalancerHTTPSListener) GetName() string { + if len(listener.Description) == 0 { + listener.Refresh() + } + if len(listener.Description) > 0 { + return listener.Description + } return fmt.Sprintf("HTTPS:%d", listener.ListenerPort) } @@ -63,7 +71,14 @@ func (listerner *SLoadbalancerHTTPSListener) GetGlobalId() string { } func (listerner *SLoadbalancerHTTPSListener) GetStatus() string { - return listerner.Status + switch listerner.Status { + case "starting", "running": + return models.LB_STATUS_ENABLED + case "configuring", "stopping", "stopped": + return models.LB_STATUS_DISABLED + default: + return models.LB_STATUS_UNKNOWN + } } func (listerner *SLoadbalancerHTTPSListener) GetMetadata() *jsonutils.JSONDict { @@ -75,7 +90,11 @@ func (listerner *SLoadbalancerHTTPSListener) IsEmulated() bool { } func (listerner *SLoadbalancerHTTPSListener) Refresh() error { - return nil + lis, err := listerner.lb.region.GetLoadbalancerHTTPSListener(listerner.lb.LoadBalancerId, listerner.ListenerPort) + if err != nil { + return err + } + return jsonutils.Update(listerner, lis) } func (listerner *SLoadbalancerHTTPSListener) GetListenerType() string { @@ -87,7 +106,10 @@ func (listerner *SLoadbalancerHTTPSListener) GetListenerPort() int { } func (listerner *SLoadbalancerHTTPSListener) GetBackendGroupId() string { - return "" + if len(listerner.VServerGroupId) == 0 { + listerner.Refresh() + } + return listerner.VServerGroupId } func (listerner *SLoadbalancerHTTPSListener) GetScheduler() string { diff --git a/pkg/util/aliyun/loadbalancermasterslavebackendgroup.go b/pkg/util/aliyun/loadbalancermasterslavebackendgroup.go index 577f4d1056..f11908ca77 100644 --- a/pkg/util/aliyun/loadbalancermasterslavebackendgroup.go +++ b/pkg/util/aliyun/loadbalancermasterslavebackendgroup.go @@ -3,6 +3,7 @@ package aliyun import ( "yunion.io/x/jsonutils" "yunion.io/x/onecloud/pkg/cloudprovider" + "yunion.io/x/onecloud/pkg/compute/models" ) type SLoadbalancerMasterSlaveBackendGroup struct { @@ -25,7 +26,7 @@ func (backendgroup *SLoadbalancerMasterSlaveBackendGroup) GetGlobalId() string { } func (backendgroup *SLoadbalancerMasterSlaveBackendGroup) GetStatus() string { - return "" + return models.LB_STATUS_ENABLED } func (backendgroup *SLoadbalancerMasterSlaveBackendGroup) GetMetadata() *jsonutils.JSONDict { @@ -45,7 +46,7 @@ func (backendgroup *SLoadbalancerMasterSlaveBackendGroup) IsDefault() bool { } func (backendgroup *SLoadbalancerMasterSlaveBackendGroup) GetType() string { - return "master_slave" + return models.LB_BACKENDGROUP_TYPE_MASTER_SLAVE } func (region *SRegion) GetLoadbalancerMasterSlaveBackendgroups(loadbalancerId string) ([]SLoadbalancerMasterSlaveBackendGroup, error) { diff --git a/pkg/util/aliyun/loadbalancertcplistener.go b/pkg/util/aliyun/loadbalancertcplistener.go index 9214fb0b49..b82511e21a 100644 --- a/pkg/util/aliyun/loadbalancertcplistener.go +++ b/pkg/util/aliyun/loadbalancertcplistener.go @@ -5,6 +5,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/onecloud/pkg/cloudprovider" + "yunion.io/x/onecloud/pkg/compute/models" ) type SLoadbalancerTCPListener struct { @@ -14,11 +15,12 @@ type SLoadbalancerTCPListener struct { BackendServerPort int // 负载均衡实例后端使用的端口。 Bandwidth int // 监听的带宽峰值。 Status string // 当前监听的状态,取值:starting | running | configuring | stopping | stopped + Description string - Scheduler string // 调度算法。 - VServerGroupId string // 绑定的服务器组ID。 - MaterSlaveServerGroupId string // 绑定的主备服务器组ID。 - AclStatus string // 是否开启访问控制功能。取值:on | off(默认值) + Scheduler string // 调度算法。 + VServerGroupId string // 绑定的服务器组ID。 + MasterSlaveServerGroupId string // 绑定的主备服务器组ID。 + AclStatus string // 是否开启访问控制功能。取值:on | off(默认值) AclType string // 访问控制类型 @@ -33,6 +35,12 @@ type SLoadbalancerTCPListener struct { } func (listener *SLoadbalancerTCPListener) GetName() string { + if len(listener.Description) == 0 { + listener.Refresh() + } + if len(listener.Description) > 0 { + return listener.Description + } return fmt.Sprintf("TCP:%d", listener.ListenerPort) } @@ -45,7 +53,14 @@ func (listerner *SLoadbalancerTCPListener) GetGlobalId() string { } func (listerner *SLoadbalancerTCPListener) GetStatus() string { - return listerner.Status + switch listerner.Status { + case "starting", "running": + return models.LB_STATUS_ENABLED + case "configuring", "stopping", "stopped": + return models.LB_STATUS_DISABLED + default: + return models.LB_STATUS_UNKNOWN + } } func (listerner *SLoadbalancerTCPListener) GetMetadata() *jsonutils.JSONDict { @@ -57,7 +72,11 @@ func (listerner *SLoadbalancerTCPListener) IsEmulated() bool { } func (listerner *SLoadbalancerTCPListener) Refresh() error { - return nil + lis, err := listerner.lb.region.GetLoadbalancerTCPListener(listerner.lb.LoadBalancerId, listerner.ListenerPort) + if err != nil { + return err + } + return jsonutils.Update(listerner, lis) } func (listerner *SLoadbalancerTCPListener) GetListenerType() string { @@ -71,7 +90,7 @@ func (listerner *SLoadbalancerTCPListener) GetBackendGroupId() string { if len(listerner.VServerGroupId) > 0 { return listerner.VServerGroupId } - return listerner.MaterSlaveServerGroupId + return listerner.MasterSlaveServerGroupId } func (listerner *SLoadbalancerTCPListener) GetScheduler() string { diff --git a/pkg/util/aliyun/loadbalancerudplistener.go b/pkg/util/aliyun/loadbalancerudplistener.go index d3912f71fc..10f98b1e34 100644 --- a/pkg/util/aliyun/loadbalancerudplistener.go +++ b/pkg/util/aliyun/loadbalancerudplistener.go @@ -5,6 +5,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/onecloud/pkg/cloudprovider" + "yunion.io/x/onecloud/pkg/compute/models" ) type SLoadbalancerUDPListener struct { @@ -14,11 +15,12 @@ type SLoadbalancerUDPListener struct { BackendServerPort int // 负载均衡实例后端使用的端口。 Bandwidth int // 监听的带宽峰值。 Status string // 当前监听的状态,取值:starting | running | configuring | stopping | stopped + Description string - Scheduler string // 调度算法 - VServerGroupId string // 绑定的服务器组ID。 - MaterSlaveServerGroupId string // 绑定的主备服务器组ID。 - AclStatus string // 是否开启访问控制功能。取值:on | off(默认值) + Scheduler string // 调度算法 + VServerGroupId string // 绑定的服务器组ID。 + MasterSlaveServerGroupId string // 绑定的主备服务器组ID。 + AclStatus string // 是否开启访问控制功能。取值:on | off(默认值) AclType string // 访问控制类型: @@ -33,6 +35,12 @@ type SLoadbalancerUDPListener struct { } func (listener *SLoadbalancerUDPListener) GetName() string { + if len(listener.Description) == 0 { + listener.Refresh() + } + if len(listener.Description) > 0 { + return listener.Description + } return fmt.Sprintf("UDP:%d", listener.ListenerPort) } @@ -45,7 +53,14 @@ func (listerner *SLoadbalancerUDPListener) GetGlobalId() string { } func (listerner *SLoadbalancerUDPListener) GetStatus() string { - return listerner.Status + switch listerner.Status { + case "starting", "running": + return models.LB_STATUS_ENABLED + case "configuring", "stopping", "stopped": + return models.LB_STATUS_DISABLED + default: + return models.LB_STATUS_UNKNOWN + } } func (listerner *SLoadbalancerUDPListener) GetMetadata() *jsonutils.JSONDict { @@ -57,7 +72,11 @@ func (listerner *SLoadbalancerUDPListener) IsEmulated() bool { } func (listerner *SLoadbalancerUDPListener) Refresh() error { - return nil + lis, err := listerner.lb.region.GetLoadbalancerUDPListener(listerner.lb.LoadBalancerId, listerner.ListenerPort) + if err != nil { + return err + } + return jsonutils.Update(listerner, lis) } func (listerner *SLoadbalancerUDPListener) GetListenerType() string { @@ -72,7 +91,7 @@ func (listerner *SLoadbalancerUDPListener) GetBackendGroupId() string { if len(listerner.VServerGroupId) > 0 { return listerner.VServerGroupId } - return listerner.MaterSlaveServerGroupId + return listerner.MasterSlaveServerGroupId } func (listerner *SLoadbalancerUDPListener) GetScheduler() string {