Skip to content

Commit 5cf87c1

Browse files
authored
Merge pull request #1319 from ioito/hotfix/qx-qcloud-lb-backend-group
fix(qcloud): lb backend group sync
2 parents 07f3cb5 + 9bf92d6 commit 5cf87c1

File tree

4 files changed

+57
-39
lines changed

4 files changed

+57
-39
lines changed

pkg/multicloud/qcloud/loadbalancer.go

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -295,10 +295,22 @@ func (self *SLoadbalancer) GetILoadBalancerBackendGroups() ([]cloudprovider.IClo
295295
}
296296
lbbgs := []SLBBackendGroup{}
297297
for i := range listeners {
298-
lbbgs = append(lbbgs, SLBBackendGroup{
299-
lb: self,
300-
listener: &listeners[i],
301-
})
298+
if listeners[i].GetListenerType() == "http" || listeners[i].GetListenerType() == "https" {
299+
for j := range listeners[i].Rules {
300+
lbbgs = append(lbbgs, SLBBackendGroup{
301+
lb: self,
302+
listener: &listeners[i],
303+
domain: listeners[i].Rules[j].Domain,
304+
path: listeners[i].Rules[j].URL,
305+
})
306+
}
307+
308+
} else {
309+
lbbgs = append(lbbgs, SLBBackendGroup{
310+
lb: self,
311+
listener: &listeners[i],
312+
})
313+
}
302314
}
303315

304316
ret := []cloudprovider.ICloudLoadbalancerBackendGroup{}

pkg/multicloud/qcloud/loadbalancer_backend.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ type SLBBackend struct {
3838
RegisteredTime string `json:"RegisteredTime"`
3939
Type string `json:"Type"`
4040
Port int `json:"Port"`
41+
Domain string
42+
Url string
4143
}
4244

4345
// ==========================================================
@@ -60,7 +62,10 @@ type Rule struct {
6062

6163
// backend InstanceId + protocol +Port + ip + rip全局唯一
6264
func (self *SLBBackend) GetId() string {
63-
return fmt.Sprintf("%s/%s-%d", self.group.GetId(), self.InstanceId, self.Port)
65+
if len(self.Domain) == 0 {
66+
return fmt.Sprintf("%s/%s-%d", self.group.GetId(), self.InstanceId, self.Port)
67+
}
68+
return fmt.Sprintf("%s/%s-%d:%s%s", self.group.GetId(), self.InstanceId, self.Port, self.Domain, self.Url)
6469
}
6570

6671
func (self *SLBBackend) GetName() string {
@@ -138,21 +143,21 @@ func (self *SRegion) GetBackends(lbId, listenerId string) ([]SLBBackend, error)
138143
return nil, err
139144
}
140145
backends := []SLBBackend{}
141-
for _, entry := range lbackends {
146+
for k := range lbackends {
147+
entry := lbackends[k]
142148
backends = append(backends, entry.Targets...)
143-
for _, r := range entry.Rules {
144-
backends = append(backends, r.Targets...)
149+
for i := range entry.Rules {
150+
for j := range entry.Rules[i].Targets {
151+
entry.Rules[i].Targets[j].Domain = entry.Rules[i].Domain
152+
entry.Rules[i].Targets[j].Url = entry.Rules[i].URL
153+
backends = append(backends, entry.Rules[i].Targets[j])
154+
}
145155
}
146156
}
147157
return backends, nil
148158
}
149159

150160
func (self *SLBBackend) SyncConf(ctx context.Context, port, weight int) error {
151-
//err := self.group.UpdateBackendServer(self.InstanceId, self.Weight, self.Port, weight, port)
152-
//if err != nil {
153-
// return err
154-
//}
155-
156161
self.Port = port
157162
self.Weight = weight
158163
return nil

pkg/multicloud/qcloud/loadbalancer_backendgroup.go

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,23 @@ type SLBBackendGroup struct {
3131
QcloudTags
3232
lb *SLoadbalancer // 必须不能为nil
3333
listener *SLBListener // 可能为nil
34+
domain string
35+
path string
3436
}
3537

3638
// 返回requestid
37-
func (self *SLBBackendGroup) appLBBackendServer(action string, serverId string, weight int, port int) (string, error) {
39+
func (self *SLBBackendGroup) appLBBackendServer(action string, serverId string, weight int, port int, domain, url string) (string, error) {
3840
params := map[string]string{
3941
"LoadBalancerId": self.lb.LoadBalancerId,
4042
"ListenerId": self.listener.ListenerId,
4143
"Targets.0.InstanceId": serverId,
4244
"Targets.0.Port": strconv.Itoa(port),
4345
"Targets.0.Weight": strconv.Itoa(weight),
4446
}
47+
if len(domain) > 0 {
48+
params["Domain"] = domain
49+
params["Url"] = url
50+
}
4551

4652
resp, err := self.lb.region.clbRequest(action, params)
4753
if err != nil {
@@ -94,7 +100,7 @@ func (self *SLBBackendGroup) updateBackendServerPort(action string, serverId str
94100
// https://cloud.tencent.com/document/product/214/30676
95101
// https://cloud.tencent.com/document/product/214/31789
96102
func (self *SLBBackendGroup) AddBackendServer(serverId string, weight int, port int) (cloudprovider.ICloudLoadbalancerBackend, error) {
97-
requestId, err := self.appLBBackendServer("RegisterTargets", serverId, weight, port)
103+
requestId, err := self.appLBBackendServer("RegisterTargets", serverId, weight, port, self.domain, self.path)
98104
if err != nil {
99105
return nil, err
100106
}
@@ -117,7 +123,7 @@ func (self *SLBBackendGroup) AddBackendServer(serverId string, weight int, port
117123
// https://cloud.tencent.com/document/product/214/30687
118124
// https://cloud.tencent.com/document/product/214/31794
119125
func (self *SLBBackendGroup) RemoveBackendServer(serverId string, weight int, port int) error {
120-
requestId, err := self.appLBBackendServer("DeregisterTargets", serverId, weight, port)
126+
requestId, err := self.appLBBackendServer("DeregisterTargets", serverId, weight, port, self.domain, self.path)
121127
if err != nil {
122128
if strings.Contains(err.Error(), "not registered") {
123129
return nil
@@ -146,15 +152,18 @@ func backendGroupIdGen(lbid string, secondId string) string {
146152
}
147153

148154
func (self *SLBBackendGroup) GetId() string {
149-
return self.listener.GetId()
155+
if len(self.domain) == 0 {
156+
return self.listener.GetGlobalId()
157+
}
158+
return fmt.Sprintf("%s:%s%s", self.listener.GetGlobalId(), self.domain, self.path)
150159
}
151160

152161
func (self *SLBBackendGroup) GetName() string {
153162
return self.GetId()
154163
}
155164

156165
func (self *SLBBackendGroup) GetGlobalId() string {
157-
return self.listener.GetGlobalId()
166+
return self.GetId()
158167
}
159168

160169
func (self *SLBBackendGroup) GetStatus() string {
@@ -180,13 +189,9 @@ func (self *SLBBackendGroup) GetILoadbalancerBackends() ([]cloudprovider.ICloudL
180189
}
181190

182191
ret := []cloudprovider.ICloudLoadbalancerBackend{}
183-
globalIds := map[string]bool{}
184192
for i := range backends {
185193
backends[i].group = self
186-
if _, ok := globalIds[backends[i].GetGlobalId()]; !ok {
187-
globalIds[backends[i].GetGlobalId()] = true
188-
ret = append(ret, &backends[i])
189-
}
194+
ret = append(ret, &backends[i])
190195
}
191196

192197
return ret, nil
@@ -210,8 +215,12 @@ func (self *SLBBackendGroup) GetBackends() ([]SLBBackend, error) {
210215
if err != nil {
211216
return nil, err
212217
}
218+
ret := []SLBBackend{}
213219
for i := range backends {
214-
backends[i].group = self
220+
if backends[i].Domain == self.domain && backends[i].Url == self.path {
221+
backends[i].group = self
222+
ret = append(ret, backends[i])
223+
}
215224
}
216-
return backends, nil
225+
return ret, nil
217226
}

pkg/multicloud/qcloud/loadbalancer_listenerrule.go

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -104,25 +104,17 @@ func (self *SLBListenerRule) GetPath() string {
104104
}
105105

106106
func (self *SLBListenerRule) GetBackendGroup() *SLBBackendGroup {
107-
t := self.listener.GetListenerType()
108-
if t == api.LB_LISTENER_TYPE_HTTP || t == api.LB_LISTENER_TYPE_HTTPS {
109-
return &SLBBackendGroup{
110-
lb: self.listener.lb,
111-
listener: self.listener,
112-
}
107+
return &SLBBackendGroup{
108+
lb: self.listener.lb,
109+
listener: self.listener,
110+
domain: self.Domain,
111+
path: self.URL,
113112
}
114-
115-
return nil
116113
}
117114

118115
// 只有http、https协议监听规则有backendgroupid
119116
func (self *SLBListenerRule) GetBackendGroupId() string {
120-
bg := self.GetBackendGroup()
121-
if bg == nil {
122-
return ""
123-
}
124-
125-
return bg.GetId()
117+
return self.GetBackendGroup().GetGlobalId()
126118
}
127119

128120
// https://cloud.tencent.com/document/api/214/30688

0 commit comments

Comments
 (0)