func()

in internal/handler/requirement.go [268:308]


func (r *RequirementHandler) EnsureOperationReady(ctx context.Context) (reconciler.OperationResult, error) {
	r.logger.V(1).Info("operation: EnsureOperationReady")
	if r.phaseIn(v1alpha1.RequirementPhaseReady) {
		// check if application changed
		cacheKey := r.cacheutils.NewCacheKeyFromApplications(r.requirement.Spec.Template.Applications)
		if r.requirement.Status.CacheKey != cacheKey {
			r.logger.Info("application changed, updating operation", "oldCacheKey", r.requirement.Status.CacheKey, "newCacheKey", cacheKey)
			if err := r.updateOperation(); err != nil {
				return reconciler.RequeueWithError(err)
			}
			r.requirement.Status.CacheKey = cacheKey
			r.requirement.Status.Phase = v1alpha1.RequirementPhaseOperating
			return reconciler.RequeueOnErrorOrContinue(r.client.Status().Update(ctx, r.requirement))
		}
		return reconciler.ContinueProcessing()
	}
	if !r.phaseIn(v1alpha1.RequirementPhaseOperating) {
		return reconciler.ContinueProcessing()
	}
	if r.rqutils.IsCacheMissed(r.requirement) {
		r.logger.V(1).Info("cache missed, creating operation")
		r.requirement.Status.OperationName = r.requirement.Name + "-" + "operation"
	}
	// check operation status
	if op, err := r.getOperation(); err == nil {
		r.logger.V(1).Info("requirement operation found", "operation", op.Name)
		if op.Status.Phase == v1alpha1.OperationPhaseReconciled {
			r.logger.Info("operation is reconciled, set requirement to ready", "operationName", op.Name, "operationId", op.Status.OperationID)
			r.requirement.Status.Phase = v1alpha1.RequirementPhaseReady
			r.requirement.Status.OperationId = op.Status.OperationID
			return reconciler.RequeueOnErrorOrContinue(r.client.Status().Update(ctx, r.requirement))
		}
		r.logger.V(1).Info("reconciling requirement operation...", "operation", op.Name)
		return reconciler.Requeue()
	}
	r.logger.V(1).Info("operation not found, creating one")
	if err := r.createOperation(); err != nil {
		return reconciler.RequeueWithError(err)
	}
	return reconciler.Requeue()
}