func()

in pkg/controllers/multiclusterservice/controller.go [382:416]


func (r *Reconciler) updateMultiClusterServiceStatus(ctx context.Context, mcs *fleetnetv1alpha1.MultiClusterService, serviceImport *fleetnetv1alpha1.ServiceImport, service *corev1.Service) error {
	currentCond := meta.FindStatusCondition(mcs.Status.Conditions, string(fleetnetv1alpha1.MultiClusterServiceValid))
	desiredCond := &metav1.Condition{
		Type:               string(fleetnetv1alpha1.MultiClusterServiceValid),
		Status:             metav1.ConditionTrue,
		Reason:             conditionReasonFoundServiceImport,
		ObservedGeneration: mcs.GetGeneration(),
		Message:            "found valid service import",
	}
	if len(serviceImport.Status.Clusters) == 0 {
		desiredCond = &metav1.Condition{
			Type:               string(fleetnetv1alpha1.MultiClusterServiceValid),
			Status:             metav1.ConditionUnknown,
			Reason:             conditionReasonUnknownServiceImport,
			ObservedGeneration: mcs.GetGeneration(),
			Message:            "importing service; if the condition remains for a while, please verify that service has been exported or service has been exported by other multiClusterService",
		}
	}

	mcsKObj := klog.KObj(mcs)
	if equality.Semantic.DeepEqual(mcs.Status.LoadBalancer, service.Status.LoadBalancer) &&
		condition.EqualCondition(currentCond, desiredCond) {
		klog.V(4).InfoS("Status is in the desired state and skipping updating status", "multiClusterService", mcsKObj)
		return nil
	}
	mcs.Status.LoadBalancer = service.Status.LoadBalancer
	meta.SetStatusCondition(&mcs.Status.Conditions, *desiredCond)

	klog.V(2).InfoS("Updating mcs status", "multiClusterService", mcsKObj)
	if err := r.Status().Update(ctx, mcs); err != nil {
		klog.ErrorS(err, "Failed to update mcs status", "multiClusterService", mcsKObj)
		return err
	}
	return nil
}