github.com/kotalco/kotal@v0.3.0/controllers/shared/reconciler.go (about)

     1  package shared
     2  
     3  import (
     4  	"context"
     5  
     6  	"k8s.io/apimachinery/pkg/runtime"
     7  	ctrl "sigs.k8s.io/controller-runtime"
     8  	"sigs.k8s.io/controller-runtime/pkg/client"
     9  )
    10  
    11  type Reconciler struct {
    12  	client.Client
    13  	Scheme *runtime.Scheme
    14  }
    15  
    16  func (r *Reconciler) GetClient() client.Client {
    17  	return r.Client
    18  }
    19  
    20  func (r *Reconciler) GetScheme() *runtime.Scheme {
    21  	return r.Scheme
    22  }
    23  
    24  // ReconcileOwned reconciles k8s object according to custom resource spec
    25  func (r Reconciler) ReconcileOwned(ctx context.Context, cr CustomResource, obj client.Object, updateFn func(client.Object) error) error {
    26  
    27  	obj.SetName(cr.GetName())
    28  	obj.SetNamespace(cr.GetNamespace())
    29  
    30  	_, err := ctrl.CreateOrUpdate(ctx, r.GetClient(), obj, func() error {
    31  		if err := ctrl.SetControllerReference(cr, obj, r.GetScheme()); err != nil {
    32  			return err
    33  		}
    34  
    35  		updateFn(obj)
    36  
    37  		return nil
    38  	})
    39  
    40  	return err
    41  }