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 }