Skip to content

Commit 5b35ba6

Browse files
feat: Refactor syncManifestState() function (#3321)
Refactor `syncManifestState()` function
1 parent 33d768e commit 5b35ba6

1 file changed

Lines changed: 40 additions & 32 deletions

File tree

internal/declarative/v2/reconciler.go

Lines changed: 40 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -188,14 +188,7 @@ func (r *Reconciler) install(ctx context.Context, req ctrl.Request,
188188
}
189189

190190
if manifest.IsUnmanaged() {
191-
if controllerutil.ContainsFinalizer(manifest, finalizer.LabelRemovalFinalizer) {
192-
return r.handleLabelsRemovalFinalizer(ctx, req, skrClient, manifest)
193-
}
194-
195-
if err := r.kcpClient.Delete(ctx, manifest); err != nil {
196-
return ctrl.Result{}, fmt.Errorf("manifestController: %w", err)
197-
}
198-
return ctrl.Result{RequeueAfter: r.requeueIntervals.Success}, nil
191+
return r.handleUnmanagedManifest(ctx, req, skrClient, manifest)
199192
}
200193

201194
err = r.orphanDetectionService.DetectOrphanedManifest(ctx, manifest)
@@ -240,11 +233,19 @@ func (r *Reconciler) install(ctx context.Context, req ctrl.Request,
240233
return r.finishReconcile(ctx, manifest, metrics.ManifestSyncResources, manifestStatus, err)
241234
}
242235

243-
if err := r.syncManifestState(ctx, skrClient, manifest, target); err != nil {
236+
if err := r.syncDefaultModuleCR(ctx, skrClient, manifest); err != nil {
237+
return r.finishReconcile(ctx, manifest, metrics.ManifestSyncState, manifestStatus, err)
238+
}
239+
240+
if err := finalizer.EnsureCRFinalizer(ctx, r.kcpClient, manifest); err != nil {
244241
if errors.Is(err, finalizer.ErrRequeueRequired) {
245242
r.manifestMetrics.RecordRequeueReason(metrics.ManifestSyncResourcesEnqueueRequired, queue.IntendedRequeue)
246243
return ctrl.Result{RequeueAfter: r.rateLimiter.When(req)}, nil
247244
}
245+
return r.finishReconcile(ctx, manifest, metrics.ManifestSyncState, manifestStatus, err)
246+
}
247+
248+
if err := r.updateManifestStateAfterSync(ctx, skrClient, manifest, target); err != nil {
248249
logf.FromContext(ctx).Error(err, "failed to sync manifest state")
249250
return r.finishReconcile(ctx, manifest, metrics.ManifestSyncState, manifestStatus, err)
250251
}
@@ -328,11 +329,7 @@ func (r *Reconciler) delete(ctx context.Context, req ctrl.Request,
328329
return r.finishReconcile(ctx, manifest, metrics.ManifestSyncResources, manifestStatus, err)
329330
}
330331

331-
if err := r.syncManifestState(ctx, skrClient, manifest, target); err != nil {
332-
if errors.Is(err, finalizer.ErrRequeueRequired) {
333-
r.manifestMetrics.RecordRequeueReason(metrics.ManifestSyncResourcesEnqueueRequired, queue.IntendedRequeue)
334-
return ctrl.Result{RequeueAfter: r.rateLimiter.When(req)}, nil
335-
}
332+
if err := r.updateDeletingState(manifest); err != nil {
336333
logf.FromContext(ctx).Error(err, "failed to sync manifest state")
337334
return r.finishReconcile(ctx, manifest, metrics.ManifestSyncState, manifestStatus, err)
338335
}
@@ -481,40 +478,51 @@ func ensureModuleCRsAllDeleted(ctx context.Context, skrClient skrclient.Client,
481478
return modulecr.NewClient(skrClient).CheckDefaultCRDeletion(ctx, manifest)
482479
}
483480

484-
func (r *Reconciler) syncManifestState(ctx context.Context, skrClient skrclient.Client, manifest *v1beta2.Manifest,
485-
target []client.Object,
481+
func (r *Reconciler) handleUnmanagedManifest(ctx context.Context, req ctrl.Request,
482+
skrClient client.Client, manifest *v1beta2.Manifest,
483+
) (ctrl.Result, error) {
484+
if controllerutil.ContainsFinalizer(manifest, finalizer.LabelRemovalFinalizer) {
485+
return r.handleLabelsRemovalFinalizer(ctx, req, skrClient, manifest)
486+
}
487+
if err := r.kcpClient.Delete(ctx, manifest); err != nil {
488+
return ctrl.Result{}, fmt.Errorf("manifestController: %w", err)
489+
}
490+
return ctrl.Result{RequeueAfter: r.requeueIntervals.Success}, nil
491+
}
492+
493+
func (r *Reconciler) syncDefaultModuleCR(ctx context.Context, skrClient skrclient.Client,
494+
manifest *v1beta2.Manifest,
486495
) error {
487496
manifestStatus := manifest.GetStatus()
488-
489497
if manifest.ShouldCreateDefaultModuleCR() && !status.IsModuleCRInstallConditionTrue(manifestStatus) {
490498
if err := modulecr.NewClient(skrClient).SyncDefaultModuleCR(ctx, manifest); err != nil {
491499
manifest.SetStatus(manifestStatus.WithState(shared.StateError).WithErr(err))
492500
return err
493501
}
494502
status.SetModuleCRInstallConditionTrue(manifest)
495503
}
504+
return nil
505+
}
496506

497-
if err := finalizer.EnsureCRFinalizer(ctx, r.kcpClient, manifest); err != nil {
498-
return err
499-
}
500-
501-
if !manifest.GetDeletionTimestamp().IsZero() {
502-
if status.RequireManifestStateUpdateAfterSyncResource(manifest, shared.StateDeleting) {
503-
return fmt.Errorf("%w: from %s to %s", errStateRequireUpdate,
504-
manifestStatus.State, shared.StateDeleting)
505-
}
506-
return nil
507-
}
508-
507+
func (r *Reconciler) updateManifestStateAfterSync(ctx context.Context, skrClient skrclient.Client,
508+
manifest *v1beta2.Manifest, target []client.Object,
509+
) error {
510+
manifestStatus := manifest.GetStatus()
509511
managerState, err := r.checkManagerState(ctx, skrClient, target)
510512
if err != nil {
511513
manifest.SetStatus(manifestStatus.WithState(shared.StateError).WithErr(err))
512514
return err
513515
}
514-
515516
if status.RequireManifestStateUpdateAfterSyncResource(manifest, managerState) {
516-
return fmt.Errorf("%w: from %s to %s", errStateRequireUpdate,
517-
manifestStatus.State, managerState)
517+
return fmt.Errorf("%w: from %s to %s", errStateRequireUpdate, manifestStatus.State, managerState)
518+
}
519+
return nil
520+
}
521+
522+
func (r *Reconciler) updateDeletingState(manifest *v1beta2.Manifest) error {
523+
manifestStatus := manifest.GetStatus()
524+
if status.RequireManifestStateUpdateAfterSyncResource(manifest, shared.StateDeleting) {
525+
return fmt.Errorf("%w: from %s to %s", errStateRequireUpdate, manifestStatus.State, shared.StateDeleting)
518526
}
519527
return nil
520528
}

0 commit comments

Comments
 (0)