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()
}