@@ -92,14 +92,17 @@ func (r *GenericProviderReconciler) BuildWithManager(ctx context.Context, mgr ct
9292 reconciler := NewPhaseReconciler (* r , r .Provider , r .ProviderList )
9393
9494 r .ReconcilePhases = []PhaseFn {
95+ reconciler .ApplyFromCache ,
9596 reconciler .PreflightChecks ,
9697 reconciler .InitializePhaseReconciler ,
9798 reconciler .DownloadManifests ,
9899 reconciler .Load ,
99100 reconciler .Fetch ,
101+ reconciler .Store ,
100102 reconciler .Upgrade ,
101103 reconciler .Install ,
102104 reconciler .ReportStatus ,
105+ reconciler .Finalize ,
103106 }
104107
105108 r .DeletePhases = []PhaseFn {
@@ -177,13 +180,7 @@ func (r *GenericProviderReconciler) Reconcile(ctx context.Context, req reconcile
177180 return ctrl.Result {}, err
178181 }
179182
180- // Check provider config map for changes
181- cacheUsed , err := applyFromCache (ctx , r .Client , r .Provider )
182- if err != nil {
183- return ctrl.Result {}, err
184- }
185-
186- if r .Provider .GetAnnotations ()[appliedSpecHashAnnotation ] == specHash || cacheUsed {
183+ if r .Provider .GetAnnotations ()[appliedSpecHashAnnotation ] == specHash {
187184 log .Info ("No changes detected, skipping further steps" )
188185
189186 return ctrl.Result {}, nil
@@ -355,39 +352,39 @@ func calculateHash(ctx context.Context, k8sClient client.Client, provider generi
355352 return fmt .Sprintf ("%x" , hash .Sum (nil )), err
356353}
357354
358- // applyFromCache applies provider configuration from cache and returns true if the cache did not change.
359- func applyFromCache ( ctx context.Context , cl client. Client , provider genericprovider. GenericProvider ) (bool , error ) {
355+ // ApplyFromCache applies provider configuration from cache and returns true if the cache did not change.
356+ func ( p * PhaseReconciler ) ApplyFromCache ( ctx context.Context ) (* Result , error ) {
360357 log := log .FromContext (ctx )
361358
362359 secret := & corev1.Secret {}
363- if err := cl . Get (ctx , client.ObjectKey {Name : ProviderCacheName (provider ), Namespace : provider .GetNamespace ()}, secret ); apierrors .IsNotFound (err ) {
360+ if err := p . ctrlClient . Get (ctx , client.ObjectKey {Name : ProviderCacheName (p . provider ), Namespace : p . provider .GetNamespace ()}, secret ); apierrors .IsNotFound (err ) {
364361 // secret does not exist, nothing to apply
365- return false , nil
362+ return & Result {} , nil
366363 } else if err != nil {
367364 log .Error (err , "failed to get provider cache" )
368365
369- return false , fmt .Errorf ("failed to get provider cache: %w" , err )
366+ return & Result {} , fmt .Errorf ("failed to get provider cache: %w" , err )
370367 }
371368
372369 // calculate combined hash for provider and config map cache
373370 hash := sha256 .New ()
374- if err := providerHash (ctx , cl , hash , provider ); err != nil {
371+ if err := providerHash (ctx , p . ctrlClient , hash , p . provider ); err != nil {
375372 log .Error (err , "failed to calculate provider hash" )
376373
377- return false , err
374+ return & Result {} , err
378375 }
379376
380377 if err := addObjectToHash (hash , secret .Data ); err != nil {
381378 log .Error (err , "failed to calculate config map hash" )
382379
383- return false , err
380+ return & Result {} , err
384381 }
385382
386383 cacheHash := fmt .Sprintf ("%x" , hash .Sum (nil ))
387384 if secret .GetAnnotations ()[appliedSpecHashAnnotation ] != cacheHash {
388385 log .Info ("Provider or cache state has changed" , "cacheHash" , cacheHash , "providerHash" , secret .GetAnnotations ()[appliedSpecHashAnnotation ])
389386
390- return false , nil
387+ return & Result {} , nil
391388 }
392389
393390 log .Info ("Applying provider configuration from cache" )
@@ -397,12 +394,12 @@ func applyFromCache(ctx context.Context, cl client.Client, provider genericprovi
397394 mr := configclient .NewMemoryReader ()
398395
399396 if err := mr .Init (ctx , "" ); err != nil {
400- return false , err
397+ return & Result {} , err
401398 }
402399
403400 // Fetch configuration variables from the secret. See API field docs for more info.
404- if err := initReaderVariables (ctx , cl , mr , provider ); err != nil {
405- return false , err
401+ if err := initReaderVariables (ctx , p . ctrlClient , mr , p . provider ); err != nil {
402+ return & Result {} , err
406403 }
407404
408405 for _ , manifest := range secret .Data {
@@ -416,11 +413,11 @@ func applyFromCache(ctx context.Context, cl client.Client, provider genericprovi
416413 if err != nil {
417414 log .Error (err , "failed to convert yaml to unstructured" )
418415
419- return false , err
416+ return & Result {} , err
420417 }
421418
422419 for _ , manifest := range manifests {
423- if err := cl .Patch (ctx , & manifest , client .Apply , client .ForceOwnership , client .FieldOwner (cacheOwner )); err != nil {
420+ if err := p . ctrlClient .Patch (ctx , & manifest , client .Apply , client .ForceOwnership , client .FieldOwner (cacheOwner )); err != nil {
424421 errs = append (errs , err )
425422 }
426423 }
@@ -435,7 +432,7 @@ func applyFromCache(ctx context.Context, cl client.Client, provider genericprovi
435432 if err != nil {
436433 log .Error (err , "failed to decompress yaml" )
437434
438- return false , err
435+ return & Result {} , err
439436 }
440437
441438 manifests := []unstructured.Unstructured {}
@@ -444,11 +441,11 @@ func applyFromCache(ctx context.Context, cl client.Client, provider genericprovi
444441 if err != nil {
445442 log .Error (err , "failed to convert yaml to unstructured" )
446443
447- return false , err
444+ return & Result {} , err
448445 }
449446
450447 for _ , manifest := range manifests {
451- if err := cl .Patch (ctx , & manifest , client .Apply , client .ForceOwnership , client .FieldOwner (cacheOwner )); err != nil {
448+ if err := p . ctrlClient .Patch (ctx , & manifest , client .Apply , client .ForceOwnership , client .FieldOwner (cacheOwner )); err != nil {
452449 errs = append (errs , err )
453450 }
454451 }
@@ -457,12 +454,12 @@ func applyFromCache(ctx context.Context, cl client.Client, provider genericprovi
457454 if err := kerrors .NewAggregate (errs ); err != nil {
458455 log .Error (err , "failed to apply objects from cache" )
459456
460- return false , err
457+ return & Result {} , err
461458 }
462459
463460 log .Info ("Applied all objects from cache" )
464461
465- return true , nil
462+ return & Result { Completed : true } , nil
466463}
467464
468465// setCacheHash calculates current provider and secret hash, and updates it on the secret.
0 commit comments