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
}