func()

in operator/controllers/operator/ui_controller.go [86:127]


func (r *UIReconciler) checkState(ctx context.Context, log logr.Logger, ui *uiv1alpha1.UI) error {
	overlay := uiv1alpha1.UIStatus{}
	deployment := apps.Deployment{}
	errCol := new(kubernetes.ErrorCollector)
	if err := r.Client.Get(ctx, client.ObjectKey{Namespace: ui.Namespace, Name: ui.Name + "-ui"}, &deployment); err != nil && !apierrors.IsNotFound(err) {
		errCol.Collect(fmt.Errorf("failed to get deployment: %w", err))
	} else {
		overlay.Conditions = deployment.Status.Conditions
		overlay.AvailableReplicas = deployment.Status.AvailableReplicas
	}
	svc := core.Service{}
	if err := r.Client.Get(ctx, client.ObjectKey{Namespace: ui.Namespace, Name: ui.Name + "-ui"}, &svc); err != nil && !apierrors.IsNotFound(err) {
		errCol.Collect(fmt.Errorf("failed to get svc: %w", err))
	} else {
		for _, i := range svc.Status.LoadBalancer.Ingress {
			overlay.ExternalIPs = append(overlay.ExternalIPs, i.IP)
		}
		for _, p := range svc.Spec.Ports {
			overlay.Ports = append(overlay.Ports, p.Port)
		}
		if len(overlay.Ports) < 1 {
			overlay.Ports = []int32{0}
		}
		overlay.InternalAddress = fmt.Sprintf("%s.%s", svc.Name, svc.Namespace)
	}
	if apiequal.Semantic.DeepDerivative(overlay, ui.Status) {
		log.Info("Status keeps the same as before")
		return errCol.Error()
	}
	ui.Status = overlay
	ui.Kind = "UI"
	if err := kubernetes.ApplyOverlay(ui, &uiv1alpha1.UI{Status: overlay}); err != nil {
		errCol.Collect(fmt.Errorf("failed to apply overlay: %w", err))
		return errCol.Error()
	}
	if err := r.updateStatus(ctx, ui, overlay, errCol); err != nil {
		errCol.Collect(fmt.Errorf("failed to update status of UI: %w", err))
	}
	log.Info("updated Status sub resource")

	return errCol.Error()
}