func()

in pkg/cloudmap/instances_health_prober.go [195:226]


func (p *defaultInstancesHealthProber) updateInstanceProbeEntry(ctx context.Context, probeEntry *instanceProbeEntry, healthyStatus bool) (bool, error) {
	if probeEntry.lastTransitionTime.IsZero() || probeEntry.lastHealthyStatus != healthyStatus {
		probeEntry.lastTransitionTime = time.Now()
		probeEntry.lastHealthyStatus = healthyStatus
	}
	if time.Since(probeEntry.lastTransitionTime) < p.transitionDuration {
		return true, nil
	}

	podHealthyConditionStatus := corev1.ConditionFalse
	if healthyStatus {
		podHealthyConditionStatus = corev1.ConditionTrue
	}

	if err := retry.RetryOnConflict(retry.DefaultRetry, func() error {
		pod := probeEntry.instanceInfo.pod.DeepCopy()
		if err := p.k8sClient.Get(ctx, k8s.NamespacedName(pod), pod); err != nil {
			return err
		}
		oldPod := pod.DeepCopy()
		if updated := k8s.UpdatePodCondition(pod, k8s.ConditionAWSCloudMapHealthy, podHealthyConditionStatus, nil, nil); updated {
			if err := p.k8sClient.Status().Patch(ctx, pod, client.MergeFrom(oldPod)); err != nil {
				return err
			}
		}
		probeEntry.instanceInfo.pod = pod
		return nil
	}); err != nil {
		return false, err
	}
	return podHealthyConditionStatus != corev1.ConditionTrue, nil
}