25
25
ErrInstanceNotStoppedYet = errors .New ("instance is being stopped" )
26
26
)
27
27
28
+ var errMachineHasNoIP = errors .New ("machine has no IP" )
29
+
28
30
type Service struct {
29
31
* scope.Machine
30
32
}
@@ -203,7 +205,7 @@ func (s *Service) getMachineIPs(ctx context.Context, server *instance.Server, pn
203
205
}
204
206
205
207
if m .External == nil && m .Internal == nil {
206
- return nil , errors . New ( "machine has no IP" )
208
+ return nil , errMachineHasNoIP
207
209
}
208
210
209
211
return m , nil
@@ -344,15 +346,9 @@ func (s *Service) ensureLoadBalancerACL(ctx context.Context, publicIP *string) e
344
346
return nil
345
347
}
346
348
347
- func (s * Service ) ensureControlPlaneLoadBalancer (ctx context.Context , server * instance.Server , pnic * instance.PrivateNIC , deletion bool ) (* machineIPs , error ) {
348
- // TODO: getMachineIPs out of this method
349
- ips , err := s .getMachineIPs (ctx , server , pnic )
350
- if err != nil {
351
- return nil , err
352
- }
353
-
349
+ func (s * Service ) ensureControlPlaneLoadBalancer (ctx context.Context , server * instance.Server , pnic * instance.PrivateNIC , ips * machineIPs , deletion bool ) error {
354
350
if ! util .IsControlPlaneMachine (s .Machine .Machine ) {
355
- return ips , nil
351
+ return nil
356
352
}
357
353
358
354
backend , err := s .ScalewayClient .FindLoadBalancerBackendByNames (
@@ -362,7 +358,7 @@ func (s *Service) ensureControlPlaneLoadBalancer(ctx context.Context, server *in
362
358
loadbalancer .ControlPlaneBackendName ,
363
359
)
364
360
if err != nil {
365
- return nil , fmt .Errorf ("failed to find load balancer backend: %w" , err )
361
+ return fmt .Errorf ("failed to find load balancer backend: %w" , err )
366
362
}
367
363
368
364
switch {
@@ -373,7 +369,7 @@ func (s *Service) ensureControlPlaneLoadBalancer(ctx context.Context, server *in
373
369
BackendID : backend .ID ,
374
370
ServerIP : []string {ips .NodeIP ()},
375
371
}); err != nil {
376
- return nil , err
372
+ return err
377
373
}
378
374
}
379
375
case ! deletion && ! slices .Contains (backend .Pool , ips .NodeIP ()):
@@ -382,11 +378,11 @@ func (s *Service) ensureControlPlaneLoadBalancer(ctx context.Context, server *in
382
378
BackendID : backend .ID ,
383
379
ServerIP : []string {ips .NodeIP ()},
384
380
}); err != nil {
385
- return nil , err
381
+ return err
386
382
}
387
383
}
388
384
389
- return ips , nil
385
+ return nil
390
386
}
391
387
392
388
func (s * Service ) Reconcile (ctx context.Context ) error {
@@ -405,11 +401,15 @@ func (s *Service) Reconcile(ctx context.Context) error {
405
401
return err
406
402
}
407
403
408
- machineIPs , err := s .ensureControlPlaneLoadBalancer (ctx , server , pnic , false )
404
+ machineIPs , err := s .getMachineIPs (ctx , server , pnic )
409
405
if err != nil {
410
406
return err
411
407
}
412
408
409
+ if err := s .ensureControlPlaneLoadBalancer (ctx , server , pnic , machineIPs , false ); err != nil {
410
+ return err
411
+ }
412
+
413
413
if err := s .ensureLoadBalancerACL (ctx , machineIPs .External ); err != nil {
414
414
return err
415
415
}
@@ -474,9 +474,16 @@ func (s *Service) Delete(ctx context.Context) error {
474
474
}
475
475
}
476
476
477
- _ , err := s .ensureControlPlaneLoadBalancer (ctx , server , pnic , true )
478
- if err != nil && ! errors .Is (err , client .ErrNoItemFound ) {
479
- return err
477
+ machineIPs , err := s .getMachineIPs (ctx , server , pnic )
478
+ if err != nil && ! errors .Is (err , errMachineHasNoIP ) {
479
+ return fmt .Errorf ("failed to get machine IPs for control-plane machine: %w" , err )
480
+ }
481
+
482
+ if machineIPs != nil {
483
+ err = s .ensureControlPlaneLoadBalancer (ctx , server , pnic , machineIPs , true )
484
+ if err != nil && ! errors .Is (err , client .ErrNoItemFound ) {
485
+ return err
486
+ }
480
487
}
481
488
}
482
489
0 commit comments