@@ -127,6 +127,15 @@ func (s *Service) getPool(poolId string) (*elbmodel.Pool, error) {
127
127
return response .Pool , nil
128
128
}
129
129
130
+ func (s * Service ) listMembers (poolId string ) (* []elbmodel.Member , error ) {
131
+ req := & elbmodel.ListMembersRequest {PoolId : poolId }
132
+ response , err := s .elbClient .ListMembers (req )
133
+ if err != nil {
134
+ return nil , err
135
+ }
136
+ return response .Members , nil
137
+ }
138
+
130
139
// ReconcileLoadbalancers reconciles the load balancers for the given cluster.
131
140
func (s * Service ) ReconcileLoadbalancers () error {
132
141
klog .Info ("Reconciling load balancers" )
@@ -393,7 +402,7 @@ func (s *Service) CreateMember(pools []infrav1alpha1.PoolRef, instance *infrav1a
393
402
}
394
403
sdkPool , err := s .getPool (pool .Id )
395
404
if err != nil {
396
- return err
405
+ return errors . Wrapf ( err , "failed to get pool" )
397
406
}
398
407
399
408
listeners := sdkPool .Listeners
@@ -403,18 +412,26 @@ func (s *Service) CreateMember(pools []infrav1alpha1.PoolRef, instance *infrav1a
403
412
}
404
413
sdkListener , err := s .getListener (listener .Id )
405
414
if err != nil {
406
- return err
415
+ return errors . Wrapf ( err , "failed to get listener" )
407
416
}
408
417
409
- createMembersRequest := & elbmodel.BatchCreateMembersRequest {Body : & elbmodel.BatchCreateMembersRequestBody {Members : make ([]elbmodel.BatchCreateMembersOption , 0 )}}
418
+ createMembersRequest := & elbmodel.BatchCreateMembersRequest {
419
+ Body : & elbmodel.BatchCreateMembersRequestBody {
420
+ Members : make ([]elbmodel.BatchCreateMembersOption , 0 ),
421
+ },
422
+ }
410
423
for _ , addr := range instance .Addresses {
411
424
memberExists , err := s .memberExists (sdkPool , addr .Address , sdkListener .ProtocolPort , instance .SubnetID )
412
425
if err != nil {
413
426
return err
414
427
}
415
428
if ! memberExists && addr .Type == clusterv1 .MachineInternalIP {
416
429
createMembersRequest .PoolId = sdkPool .Id
417
- createMember := elbmodel.BatchCreateMembersOption {Address : addr .Address , ProtocolPort : sdkListener .ProtocolPort , SubnetCidrId : & s .scope .Subnets ()[0 ].NeutronSubnetId }
430
+ createMember := elbmodel.BatchCreateMembersOption {
431
+ Address : addr .Address ,
432
+ ProtocolPort : sdkListener .ProtocolPort ,
433
+ SubnetCidrId : & s .scope .Subnets ()[0 ].NeutronSubnetId ,
434
+ }
418
435
createMembersRequest .Body .Members = append (createMembersRequest .Body .Members , createMember )
419
436
}
420
437
}
@@ -424,7 +441,7 @@ func (s *Service) CreateMember(pools []infrav1alpha1.PoolRef, instance *infrav1a
424
441
}
425
442
_ , err = s .elbClient .BatchCreateMembers (createMembersRequest )
426
443
if err != nil {
427
- return err
444
+ return errors . Wrapf ( err , "failed to create members" )
428
445
}
429
446
}
430
447
}
@@ -436,23 +453,21 @@ func (s *Service) DeleteMember(pools []infrav1alpha1.PoolRef, instance *infrav1a
436
453
if pool .Id == "" {
437
454
continue
438
455
}
439
- sdkPool , err := s .getPool (pool .Id )
456
+ members , err := s .listMembers (pool .Id )
440
457
if err != nil {
441
- return err
458
+ return errors . Wrapf ( err , "failed to get members" )
442
459
}
443
-
444
- members := sdkPool .Members
445
- for _ , member := range members {
446
- if member .Id == "" {
460
+ for _ , member := range * members {
461
+ if * member .InstanceId != instance .ID {
447
462
continue
448
463
}
449
- deleteMembersRequest := & elbmodel.BatchDeleteMembersRequest { Body : & elbmodel. BatchDeleteMembersRequestBody { Members : make ([]elbmodel. BatchDeleteMembersOption , 0 )}}
450
- deleteMembersRequest . PoolId = sdkPool .Id
451
- deleteMember := elbmodel. BatchDeleteMembersOption { Id : & member .Id }
452
- deleteMembersRequest . Body . Members = append ( deleteMembersRequest . Body . Members , deleteMember )
453
- _ , err = s .elbClient .BatchDeleteMembers ( deleteMembersRequest )
464
+ deleteMemberRequest := & elbmodel.DeleteMemberRequest {
465
+ PoolId : pool .Id ,
466
+ MemberId : member .Id ,
467
+ }
468
+ _ , err = s .elbClient .DeleteMember ( deleteMemberRequest )
454
469
if err != nil {
455
- return err
470
+ return errors . Wrapf ( err , "failed to delete member" )
456
471
}
457
472
}
458
473
}
0 commit comments