@@ -60,6 +60,7 @@ func NewDefaultResourceManager(k8sClient client.Client, elbv2Client services.ELB
60
60
logger : logger ,
61
61
vpcID : vpcID ,
62
62
vpcInfoProvider : vpcInfoProvider ,
63
+ podInfoRepo : podInfoRepo ,
63
64
64
65
targetHealthRequeueDuration : defaultTargetHealthRequeueDuration ,
65
66
}
@@ -76,6 +77,7 @@ type defaultResourceManager struct {
76
77
eventRecorder record.EventRecorder
77
78
logger logr.Logger
78
79
vpcInfoProvider networking.VPCInfoProvider
80
+ podInfoRepo k8s.PodInfoRepo
79
81
vpcID string
80
82
81
83
targetHealthRequeueDuration time.Duration
@@ -98,6 +100,9 @@ func (m *defaultResourceManager) Cleanup(ctx context.Context, tgb *elbv2api.Targ
98
100
if err := m .networkingManager .Cleanup (ctx , tgb ); err != nil {
99
101
return err
100
102
}
103
+ if err := m .updatePodAsHealthyForDeletedTGB (ctx , tgb ); err != nil {
104
+ return err
105
+ }
101
106
return nil
102
107
}
103
108
@@ -325,6 +330,34 @@ func (m *defaultResourceManager) updateTargetHealthPodConditionForPod(ctx contex
325
330
return needFurtherProbe , nil
326
331
}
327
332
333
+ // updatePodAsHealthyForDeletedTGB updates pod's targetHealth condition as healthy when deleting a TGB
334
+ // if the pod has readiness Gate.
335
+ func (m * defaultResourceManager ) updatePodAsHealthyForDeletedTGB (ctx context.Context , tgb * elbv2api.TargetGroupBinding ) error {
336
+ targetHealthCondType := BuildTargetHealthPodConditionType (tgb )
337
+
338
+ allPodKeys := m .podInfoRepo .ListKeys (ctx )
339
+ for _ , podKey := range allPodKeys {
340
+ pod , exists , err := m .podInfoRepo .Get (ctx , podKey )
341
+ if err != nil {
342
+ return err
343
+ }
344
+ if ! exists {
345
+ return errors .New ("couldn't find podInfo for ready endpoint" )
346
+ }
347
+ if pod .HasAnyOfReadinessGates ([]corev1.PodConditionType {targetHealthCondType }) {
348
+ targetHealth := & elbv2sdk.TargetHealth {
349
+ State : awssdk .String (elbv2sdk .TargetHealthStateEnumHealthy ),
350
+ Description : awssdk .String ("Target Group Binding is deleted" ),
351
+ }
352
+ _ , err := m .updateTargetHealthPodConditionForPod (ctx , pod , targetHealth , targetHealthCondType )
353
+ if err != nil {
354
+ return err
355
+ }
356
+ }
357
+ }
358
+ return nil
359
+ }
360
+
328
361
func (m * defaultResourceManager ) deregisterTargets (ctx context.Context , tgARN string , targets []TargetInfo ) error {
329
362
sdkTargets := make ([]elbv2sdk.TargetDescription , 0 , len (targets ))
330
363
for _ , target := range targets {
0 commit comments