Skip to content

Commit cb47c6f

Browse files
author
alexander-demicev
committed
Refactor ApplyFromCache to avoid duplicate loops
Signed-off-by: alexander-demicev <alexandr.demicev@suse.com>
1 parent 2f8a915 commit cb47c6f

File tree

1 file changed

+31
-41
lines changed

1 file changed

+31
-41
lines changed

internal/controller/genericprovider_controller.go

Lines changed: 31 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -485,8 +485,6 @@ func (p *PhaseReconciler) ApplyFromCache(ctx context.Context) (*Result, error) {
485485

486486
log.Info("Applying provider configuration from cache")
487487

488-
errs := []error{}
489-
490488
mr := configclient.NewMemoryReader()
491489

492490
if err := mr.Init(ctx, ""); err != nil {
@@ -498,64 +496,56 @@ func (p *PhaseReconciler) ApplyFromCache(ctx context.Context) (*Result, error) {
498496
return &Result{}, err
499497
}
500498

501-
for _, manifest := range secret.Data {
502-
if secret.GetAnnotations()[operatorv1.CompressedAnnotation] == operatorv1.TrueValue {
503-
break
504-
}
499+
compressed := secret.GetAnnotations()[operatorv1.CompressedAnnotation] == operatorv1.TrueValue
505500

506-
manifests := []unstructured.Unstructured{}
501+
if err := p.applyManifestsFromData(ctx, secret.Data, compressed); err != nil {
502+
log.Error(err, "failed to apply objects from cache")
507503

508-
err := json.Unmarshal(manifest, &manifests)
509-
if err != nil {
510-
log.Error(err, "failed to convert yaml to unstructured")
504+
return &Result{}, err
505+
}
511506

512-
return &Result{}, err
513-
}
507+
log.Info("Applied all objects from cache")
514508

515-
for _, manifest := range manifests {
516-
if err := p.ctrlClient.Patch(ctx, &manifest, client.Apply, client.ForceOwnership, client.FieldOwner(cacheOwner)); err != nil {
517-
errs = append(errs, err)
518-
}
519-
}
520-
}
509+
return &Result{Completed: true}, nil
510+
}
521511

522-
for _, binaryManifest := range secret.Data {
523-
if secret.GetAnnotations()[operatorv1.CompressedAnnotation] != operatorv1.TrueValue {
524-
break
525-
}
512+
// applyManifestsFromData unmarshals and applies manifests via server-side apply.
513+
// If compressed is true, each data value is decompressed before processing.
514+
func (p *PhaseReconciler) applyManifestsFromData(ctx context.Context, data map[string][]byte, compressed bool) error {
515+
log := log.FromContext(ctx)
526516

527-
manifest, err := decompressData(binaryManifest)
528-
if err != nil {
529-
log.Error(err, "failed to decompress yaml")
517+
var errs []error
518+
519+
for _, raw := range data {
520+
manifest := raw
521+
522+
if compressed {
523+
var err error
530524

531-
return &Result{}, err
525+
manifest, err = decompressData(raw)
526+
if err != nil {
527+
log.Error(err, "failed to decompress yaml")
528+
529+
return err
530+
}
532531
}
533532

534-
manifests := []unstructured.Unstructured{}
533+
var manifests []unstructured.Unstructured
535534

536-
err = json.Unmarshal(manifest, &manifests)
537-
if err != nil {
535+
if err := json.Unmarshal(manifest, &manifests); err != nil {
538536
log.Error(err, "failed to convert yaml to unstructured")
539537

540-
return &Result{}, err
538+
return err
541539
}
542540

543-
for _, manifest := range manifests {
544-
if err := p.ctrlClient.Patch(ctx, &manifest, client.Apply, client.ForceOwnership, client.FieldOwner(cacheOwner)); err != nil {
541+
for i := range manifests {
542+
if err := p.ctrlClient.Patch(ctx, &manifests[i], client.Apply, client.ForceOwnership, client.FieldOwner(cacheOwner)); err != nil {
545543
errs = append(errs, err)
546544
}
547545
}
548546
}
549547

550-
if err := kerrors.NewAggregate(errs); err != nil {
551-
log.Error(err, "failed to apply objects from cache")
552-
553-
return &Result{}, err
554-
}
555-
556-
log.Info("Applied all objects from cache")
557-
558-
return &Result{Completed: true}, nil
548+
return kerrors.NewAggregate(errs)
559549
}
560550

561551
// setCacheHash calculates current provider and secret hash, and updates it on the secret.

0 commit comments

Comments
 (0)