Skip to content

Commit aea3898

Browse files
oliviasssskishorj
authored andcommitted
Update pods with readinessGate as healthy for deleted TGB (kubernetes-sigs#2524)
* mark pod with readiness gate as healthy when deleting TGB * list pod keys Co-authored-by: Kishor Joshi <[email protected]>
1 parent 15506a3 commit aea3898

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

pkg/targetgroupbinding/resource_manager.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ func NewDefaultResourceManager(k8sClient client.Client, elbv2Client services.ELB
6060
logger: logger,
6161
vpcID: vpcID,
6262
vpcInfoProvider: vpcInfoProvider,
63+
podInfoRepo: podInfoRepo,
6364

6465
targetHealthRequeueDuration: defaultTargetHealthRequeueDuration,
6566
}
@@ -76,6 +77,7 @@ type defaultResourceManager struct {
7677
eventRecorder record.EventRecorder
7778
logger logr.Logger
7879
vpcInfoProvider networking.VPCInfoProvider
80+
podInfoRepo k8s.PodInfoRepo
7981
vpcID string
8082

8183
targetHealthRequeueDuration time.Duration
@@ -98,6 +100,9 @@ func (m *defaultResourceManager) Cleanup(ctx context.Context, tgb *elbv2api.Targ
98100
if err := m.networkingManager.Cleanup(ctx, tgb); err != nil {
99101
return err
100102
}
103+
if err := m.updatePodAsHealthyForDeletedTGB(ctx, tgb); err != nil {
104+
return err
105+
}
101106
return nil
102107
}
103108

@@ -325,6 +330,34 @@ func (m *defaultResourceManager) updateTargetHealthPodConditionForPod(ctx contex
325330
return needFurtherProbe, nil
326331
}
327332

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+
328361
func (m *defaultResourceManager) deregisterTargets(ctx context.Context, tgARN string, targets []TargetInfo) error {
329362
sdkTargets := make([]elbv2sdk.TargetDescription, 0, len(targets))
330363
for _, target := range targets {

0 commit comments

Comments
 (0)