@@ -201,14 +201,9 @@ func (cp *CloudProvider) EnsureLoadBalancer(clusterName string, service *api.Ser
201
201
return nil , err
202
202
}
203
203
204
- err = cp .updateBackendSets (lb , spec )
204
+ err = cp .updateLoadBalancer (lb , spec , sslConfigMap , sourceCIDRs )
205
205
if err != nil {
206
- return nil , fmt .Errorf ("update backendsets: %v" , err )
207
- }
208
-
209
- err = cp .updateListeners (lb , spec , sslConfigMap , sourceCIDRs )
210
- if err != nil {
211
- return nil , fmt .Errorf ("udpate listeners: %v" , err )
206
+ return nil , err
212
207
}
213
208
214
209
status , err := loadBalancerToStatus (lb )
@@ -220,14 +215,20 @@ func (cp *CloudProvider) EnsureLoadBalancer(clusterName string, service *api.Ser
220
215
return status , nil
221
216
}
222
217
223
- func (cp * CloudProvider ) updateBackendSets (lb * baremetal.LoadBalancer , spec LBSpec ) error {
218
+ func (cp * CloudProvider ) updateLoadBalancer (lb * baremetal.LoadBalancer , spec LBSpec , sslConfigMap map [ int ] * baremetal. SSLConfiguration , sourceCIDRs [] string ) error {
224
219
lbOCID := lb .ID
225
220
226
- actual := lb .BackendSets
227
- desired := spec .GetBackendSets ()
221
+ actualBackendSets := lb .BackendSets
222
+ desiredBackendSets := spec .GetBackendSets ()
228
223
229
- actions := getBackendSetChanges (actual , desired )
230
- if len (actions ) == 0 {
224
+ backendSetActions := getBackendSetChanges (actualBackendSets , desiredBackendSets )
225
+
226
+ actualListeners := lb .Listeners
227
+ desiredListeners := spec .GetListeners (sslConfigMap )
228
+ listenerActions := getListenerChanges (actualListeners , desiredListeners )
229
+
230
+ if len (backendSetActions ) == 0 && len (listenerActions ) == 0 {
231
+ // Nothing to do
231
232
return nil
232
233
}
233
234
@@ -241,143 +242,147 @@ func (cp *CloudProvider) updateBackendSets(lb *baremetal.LoadBalancer, spec LBSp
241
242
return fmt .Errorf ("get subnets for nodes: %v" , err )
242
243
}
243
244
244
- sourceCIDRs := []string {}
245
- listenerPort := uint64 (0 )
246
-
245
+ actions := sortAndCombineActions (backendSetActions , listenerActions )
247
246
for _ , action := range actions {
248
- var workRequestID string
249
- var err error
250
-
251
- be := action .BackendSet
252
- glog .V (2 ).Infof ("Applying `%s` action on backend set `%s` for lb `%s`" , action .Type , be .Name , lbOCID )
253
-
254
- backendPort := uint64 (getBackendPort (be .Backends ))
255
-
256
- switch action .Type {
257
- case Create :
258
- err = cp .securityListManager .Update (lbSubnets , nodeSubnets , sourceCIDRs , listenerPort , backendPort )
247
+ switch a := action .(type ) {
248
+ case * BackendSetAction :
249
+ err := cp .updateBackendSet (lbOCID , a , lbSubnets , nodeSubnets )
259
250
if err != nil {
260
- return err
251
+ return fmt . Errorf ( "error updating BackendSet: %v" , err )
261
252
}
262
-
263
- workRequestID , err = cp .client .CreateBackendSet (
264
- lbOCID ,
265
- be .Name ,
266
- be .Policy ,
267
- be .Backends ,
268
- be .HealthChecker ,
269
- nil , // ssl config
270
- nil , // session persistence
271
- nil , // create opts
272
- )
273
- case Update :
274
- err = cp .securityListManager .Update (lbSubnets , nodeSubnets , sourceCIDRs , listenerPort , backendPort )
253
+ case * ListenerAction :
254
+ err := cp .updateListener (lbOCID , spec , a , lbSubnets , nodeSubnets , sslConfigMap , sourceCIDRs )
275
255
if err != nil {
276
- return err
256
+ return fmt . Errorf ( "error updating BackendSet: %v" , err )
277
257
}
258
+ }
259
+ }
260
+ return nil
261
+ }
278
262
279
- workRequestID , err = cp .client .UpdateBackendSet (lbOCID , be .Name , & baremetal.UpdateLoadBalancerBackendSetOptions {
280
- Policy : be .Policy ,
281
- HealthChecker : be .HealthChecker ,
282
- Backends : be .Backends ,
283
- })
284
- case Delete :
285
- err = cp .securityListManager .Delete (lbSubnets , nodeSubnets , listenerPort , backendPort )
286
- if err != nil {
287
- return err
288
- }
263
+ func (cp * CloudProvider ) updateBackendSet (lbOCID string , action * BackendSetAction , lbSubnets , nodeSubnets []* baremetal.Subnet ) error {
264
+ sourceCIDRs := []string {}
265
+ listenerPort := uint64 (0 )
289
266
290
- workRequestID , err = cp .client .DeleteBackendSet (lbOCID , be .Name , nil )
291
- }
267
+ var workRequestID string
268
+ var err error
269
+
270
+ be := action .BackendSet
271
+ glog .V (2 ).Infof ("Applying `%s` action on backend set `%s` for lb `%s`" , action .Type , be .Name , lbOCID )
272
+
273
+ backendPort := uint64 (getBackendPort (be .Backends ))
292
274
275
+ switch action .Type () {
276
+ case Create :
277
+ err = cp .securityListManager .Update (lbSubnets , nodeSubnets , sourceCIDRs , listenerPort , backendPort )
293
278
if err != nil {
294
279
return err
295
280
}
296
281
297
- _ , err = cp .client .AwaitWorkRequest (workRequestID )
282
+ workRequestID , err = cp .client .CreateBackendSet (
283
+ lbOCID ,
284
+ be .Name ,
285
+ be .Policy ,
286
+ be .Backends ,
287
+ be .HealthChecker ,
288
+ nil , // ssl config
289
+ nil , // session persistence
290
+ nil , // create opts
291
+ )
292
+ case Update :
293
+ err = cp .securityListManager .Update (lbSubnets , nodeSubnets , sourceCIDRs , listenerPort , backendPort )
298
294
if err != nil {
299
295
return err
300
296
}
301
- }
302
-
303
- return nil
304
- }
305
297
306
- func (cp * CloudProvider ) updateListeners (lb * baremetal.LoadBalancer , spec LBSpec , sslConfigMap map [int ]* baremetal.SSLConfiguration , sourceCIDRs []string ) error {
307
- lbOCID := lb .ID
298
+ workRequestID , err = cp .client .UpdateBackendSet (lbOCID , be .Name , & baremetal.UpdateLoadBalancerBackendSetOptions {
299
+ Policy : be .Policy ,
300
+ HealthChecker : be .HealthChecker ,
301
+ Backends : be .Backends ,
302
+ })
303
+ case Delete :
304
+ err = cp .securityListManager .Delete (lbSubnets , nodeSubnets , listenerPort , backendPort )
305
+ if err != nil {
306
+ return err
307
+ }
308
308
309
- desired := spec .GetListeners (sslConfigMap )
310
- actions := getListenerChanges (lb .Listeners , desired )
311
- if len (actions ) == 0 {
312
- return nil
309
+ workRequestID , err = cp .client .DeleteBackendSet (lbOCID , be .Name , nil )
313
310
}
314
311
315
- lbSubnets , err := cp .client .GetSubnets (spec .Subnets )
316
312
if err != nil {
317
- return fmt . Errorf ( "get subnets for lbs: %v" , err )
313
+ return err
318
314
}
319
315
320
- nodeSubnets , err : = cp .client .GetSubnetsForNodes ( spec . Nodes )
316
+ _ , err = cp .client .AwaitWorkRequest ( workRequestID )
321
317
if err != nil {
322
- return fmt . Errorf ( "get subnets for nodes: %v" , err )
318
+ return err
323
319
}
324
320
325
- for _ , action := range actions {
326
- var workRequestID string
327
- var err error
328
- l := action .Listener
329
- listenerPort := uint64 (l .Port )
330
-
331
- backends := spec .GetBackendSets ()[l .DefaultBackendSetName ].Backends
332
- backendPort := uint64 (getBackendPort (backends ))
321
+ return nil
322
+ }
333
323
334
- glog .V (2 ).Infof ("Applying `%s` action on listener `%s` for lb `%s`" , action .Type , l .Name , lbOCID )
324
+ func (cp * CloudProvider ) updateListener (lbOCID string ,
325
+ spec LBSpec ,
326
+ action * ListenerAction ,
327
+ lbSubnets []* baremetal.Subnet ,
328
+ nodeSubnets []* baremetal.Subnet ,
329
+ sslConfigMap map [int ]* baremetal.SSLConfiguration ,
330
+ sourceCIDRs []string ) error {
335
331
336
- switch action .Type {
337
- case Create :
338
- err = cp .securityListManager .Update (lbSubnets , nodeSubnets , sourceCIDRs , listenerPort , backendPort )
339
- if err != nil {
340
- return err
341
- }
332
+ var workRequestID string
333
+ var err error
334
+ l := action .Listener
335
+ listenerPort := uint64 (l .Port )
342
336
343
- workRequestID , err = cp .client .CreateListener (
344
- lbOCID ,
345
- l .Name ,
346
- l .DefaultBackendSetName ,
347
- l .Protocol ,
348
- l .Port ,
349
- l .SSLConfig ,
350
- nil , // create opts
351
- )
352
- case Update :
353
- err = cp .securityListManager .Update (lbSubnets , nodeSubnets , sourceCIDRs , listenerPort , backendPort )
354
- if err != nil {
355
- return err
356
- }
337
+ backends := spec .GetBackendSets ()[l .DefaultBackendSetName ].Backends
338
+ backendPort := uint64 (getBackendPort (backends ))
357
339
358
- workRequestID , err = cp .client .UpdateListener (lbOCID , l .Name , & baremetal.UpdateLoadBalancerListenerOptions {
359
- DefaultBackendSetName : l .DefaultBackendSetName ,
360
- Port : l .Port ,
361
- Protocol : l .Protocol ,
362
- SSLConfig : l .SSLConfig ,
363
- })
364
- case Delete :
365
- err = cp .securityListManager .Delete (lbSubnets , nodeSubnets , listenerPort , backendPort )
366
- if err != nil {
367
- return err
368
- }
340
+ glog .V (2 ).Infof ("Applying `%s` action on listener `%s` for lb `%s`" , action .Type , l .Name , lbOCID )
369
341
370
- workRequestID , err = cp .client .DeleteListener (lbOCID , l .Name , nil )
342
+ switch action .Type () {
343
+ case Create :
344
+ err = cp .securityListManager .Update (lbSubnets , nodeSubnets , sourceCIDRs , listenerPort , backendPort )
345
+ if err != nil {
346
+ return err
371
347
}
372
348
349
+ workRequestID , err = cp .client .CreateListener (
350
+ lbOCID ,
351
+ l .Name ,
352
+ l .DefaultBackendSetName ,
353
+ l .Protocol ,
354
+ l .Port ,
355
+ l .SSLConfig ,
356
+ nil , // create opts
357
+ )
358
+ case Update :
359
+ err = cp .securityListManager .Update (lbSubnets , nodeSubnets , sourceCIDRs , listenerPort , backendPort )
373
360
if err != nil {
374
361
return err
375
362
}
376
363
377
- _ , err = cp .client .AwaitWorkRequest (workRequestID )
364
+ workRequestID , err = cp .client .UpdateListener (lbOCID , l .Name , & baremetal.UpdateLoadBalancerListenerOptions {
365
+ DefaultBackendSetName : l .DefaultBackendSetName ,
366
+ Port : l .Port ,
367
+ Protocol : l .Protocol ,
368
+ SSLConfig : l .SSLConfig ,
369
+ })
370
+ case Delete :
371
+ err = cp .securityListManager .Delete (lbSubnets , nodeSubnets , listenerPort , backendPort )
378
372
if err != nil {
379
373
return err
380
374
}
375
+
376
+ workRequestID , err = cp .client .DeleteListener (lbOCID , l .Name , nil )
377
+ }
378
+
379
+ if err != nil {
380
+ return err
381
+ }
382
+
383
+ _ , err = cp .client .AwaitWorkRequest (workRequestID )
384
+ if err != nil {
385
+ return err
381
386
}
382
387
383
388
return nil
0 commit comments