func()

in operator/controllers/operator/oapserverconfig_controller.go [78:129]


func (r *OAPServerConfigReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
	log := runtimelog.FromContext(ctx)
	log.Info("=====================oapserverconfig reconcile started================================")

	oapServerConfig := operatorv1alpha1.OAPServerConfig{}
	if err := r.Client.Get(ctx, req.NamespacedName, &oapServerConfig); err != nil {
		return ctrl.Result{}, client.IgnoreNotFound(err)
	}

	oapList := operatorv1alpha1.OAPServerList{}
	opts := []client.ListOption{
		client.InNamespace(req.Namespace),
	}

	if err := r.List(ctx, &oapList, opts...); err != nil && !apierrors.IsNotFound(err) {
		return ctrl.Result{}, fmt.Errorf("failed to list oapserver: %w", err)
	}

	// get the specific version's oapserver
	for i := range oapList.Items {
		if oapList.Items[i].Spec.Version == oapServerConfig.Spec.Version {
			oapServer := oapList.Items[i]
			deployment := apps.Deployment{}
			if err := r.Client.Get(ctx, client.ObjectKey{Namespace: oapServer.Namespace, Name: oapServer.Name + "-oap"}, &deployment); err != nil && !apierrors.IsNotFound(err) {
				return ctrl.Result{}, fmt.Errorf("failed to get the deployment of OAPServer: %w", err)
			}
			// overlay the env configuration
			envChanged, err := r.OverlayEnv(log, &oapServerConfig, &deployment)
			if err != nil {
				log.Error(err, "failed to overlay the env configuration")
			}
			// overlay the file configuration
			fileChanged, err := r.OverlayStaticFile(ctx, log, &oapServerConfig, &deployment)
			if err != nil {
				log.Error(err, "failed to overlay the file configuration")
			}
			// update the deployment
			if envChanged || fileChanged {
				if err := r.Client.Update(ctx, &deployment); err != nil {
					return ctrl.Result{}, fmt.Errorf("failed to update the deployment of OAPServer: %w", err)
				}
			}
		}
	}

	if err := r.checkState(ctx, log, &oapServerConfig, oapList); err != nil {
		log.Error(err, "failed to update OAPServerConfig's status")
		return ctrl.Result{}, err
	}

	return ctrl.Result{RequeueAfter: schedDuration}, nil
}