@@ -419,14 +419,14 @@ func (cp *CloudProvider) updateBackendSet(ctx context.Context, lbOCID string, ac
419
419
420
420
bs := action .BackendSet
421
421
422
- glog .V (2 ).Infof ("Applying %q action on backend set %q for lb %q" , action .Type (), action .Name (), lbOCID )
423
-
424
422
if len (bs .Backends ) < 1 {
425
423
return errors .New ("no backends provided" )
426
424
}
427
425
backendPort := * bs .Backends [0 ].Port
428
426
healthCheckPort := * bs .HealthChecker .Port
429
427
428
+ glog .V (2 ).Infof ("Applying %q action on backend set %q for lb %q (listenerPort=%d backendPort=%d healthCheckPort=%d)" , action .Type (), action .Name (), lbOCID , listenerPort , backendPort , healthCheckPort )
429
+
430
430
switch action .Type () {
431
431
case Create :
432
432
err = cp .securityListManager .Update (ctx , lbSubnets , nodeSubnets , sourceCIDRs , listenerPort , backendPort , healthCheckPort )
@@ -436,11 +436,17 @@ func (cp *CloudProvider) updateBackendSet(ctx context.Context, lbOCID string, ac
436
436
437
437
workRequestID , err = cp .client .LoadBalancer ().CreateBackendSet (ctx , lbOCID , action .Name (), bs )
438
438
case Update :
439
- err = cp .securityListManager .Update (ctx , lbSubnets , nodeSubnets , sourceCIDRs , listenerPort , backendPort , healthCheckPort )
440
- if err != nil {
439
+ // FIXME(apryde): This is inelegant and inefficient. Update() should be refactored
440
+ // to take the old backend port and handle removal of associated rules.
441
+ if action .OldBackendSet != nil && * action .OldBackendSet .Backends [0 ].Port != backendPort {
442
+ oldBackendPort := * action .OldBackendSet .Backends [0 ].Port
443
+ if err = cp .securityListManager .Delete (ctx , lbSubnets , nodeSubnets , listenerPort , oldBackendPort , healthCheckPort ); err != nil {
444
+ return errors .Wrapf (err , "deleting security rule for old node port %d" , oldBackendPort )
445
+ }
446
+ }
447
+ if err = cp .securityListManager .Update (ctx , lbSubnets , nodeSubnets , sourceCIDRs , listenerPort , backendPort , healthCheckPort ); err != nil {
441
448
return err
442
449
}
443
-
444
450
workRequestID , err = cp .client .LoadBalancer ().UpdateBackendSet (ctx , lbOCID , action .Name (), bs )
445
451
case Delete :
446
452
err = cp .securityListManager .Delete (ctx , lbSubnets , nodeSubnets , listenerPort , backendPort , healthCheckPort )
@@ -567,35 +573,30 @@ func (cp *CloudProvider) EnsureLoadBalancerDeleted(clusterName string, service *
567
573
if err != nil {
568
574
return errors .Wrap (err , "fetching nodes by internal ips" )
569
575
}
570
-
571
- spec , err := NewLBSpec (service , nodes , []string {cp .config .LoadBalancer .Subnet1 , cp .config .LoadBalancer .Subnet2 }, nil )
576
+ nodeSubnets , err := getSubnetsForNodes (context .TODO (), nodes , cp .client )
572
577
if err != nil {
573
- return errors .Wrap (err , "new lb spec " )
578
+ return errors .Wrap (err , "getting subnets for nodes " )
574
579
}
575
580
576
- lbSubnets , err := getSubnets (context .TODO (), spec . Subnets , cp .client .Networking ())
581
+ lbSubnets , err := getSubnets (context .TODO (), lb . SubnetIds , cp .client .Networking ())
577
582
if err != nil {
578
583
return errors .Wrap (err , "getting subnets for load balancers" )
579
584
}
580
- nodeSubnets , err := getSubnetsForNodes (context .TODO (), nodes , cp .client )
581
- if err != nil {
582
- return errors .Wrap (err , "getting subnets for nodes" )
583
- }
584
585
585
- for listenerName , listener := range spec . GetListeners () {
586
+ for listenerName , listener := range lb . Listeners {
586
587
glog .V (4 ).Infof ("Deleting security rules for listener %q for load balancer %q" , listenerName , id )
587
588
588
589
backendSetName := * listener .DefaultBackendSetName
589
- bs , ok := spec . GetBackendSets () [backendSetName ]
590
+ bs , ok := lb . BackendSets [backendSetName ]
590
591
if ! ok {
591
- return errors .Errorf ("no backend set %q in spec " , backendSetName )
592
+ return errors .Errorf ("backend set %q missing (loadbalancer=%q) " , backendSetName , id )
592
593
}
593
594
if len (bs .Backends ) < 1 {
594
- return errors .Errorf ("backend set %q has no backends" , backendSetName )
595
+ return errors .Errorf ("backend set %q has no backends (loadbalancer=%q) " , backendSetName , id )
595
596
}
596
597
backendPort := * bs .Backends [0 ].Port
597
598
if bs .HealthChecker == nil {
598
- return errors .Errorf ("backend set %q has no health checker" , backendSetName )
599
+ return errors .Errorf ("backend set %q has no health checker (loadbalancer=%q) " , backendSetName , id )
599
600
}
600
601
healthCheckPort := * bs .HealthChecker .Port
601
602
@@ -613,8 +614,8 @@ func (cp *CloudProvider) EnsureLoadBalancerDeleted(clusterName string, service *
613
614
if err != nil {
614
615
return errors .Wrapf (err , "awaiting deletion of load balancer %q" , name )
615
616
}
616
-
617
617
glog .Infof ("Deleted load balancer %q (OCID: %q)" , name , id )
618
+
618
619
return nil
619
620
}
620
621
0 commit comments