@@ -33,27 +33,38 @@ import (
3333
3434// CrunchyBridgeClusterReconciler reconciles a CrunchyBridgeCluster object
3535type CrunchyBridgeClusterReconciler struct {
36- client.Client
37-
38- Owner client.FieldOwner
39-
40- // For this iteration, we will only be setting conditions rather than
41- // setting conditions and emitting events. That may change in the future,
42- // so we're leaving this EventRecorder here for now.
43- // record.EventRecorder
44-
45- // NewClient is called each time a new Client is needed.
36+ // NewClient is called each time a new bridge.Client is needed.
4637 NewClient func () bridge.ClientInterface
38+
39+ Reader interface {
40+ Get (context.Context , client.ObjectKey , client.Object , ... client.GetOption ) error
41+ List (context.Context , client.ObjectList , ... client.ListOption ) error
42+ }
43+ Writer interface {
44+ Delete (context.Context , client.Object , ... client.DeleteOption ) error
45+ Patch (context.Context , client.Object , client.Patch , ... client.PatchOption ) error
46+ Update (context.Context , client.Object , ... client.UpdateOption ) error
47+ }
48+ StatusWriter interface {
49+ Patch (context.Context , client.Object , client.Patch , ... client.SubResourcePatchOption ) error
50+ }
4751}
4852
4953//+kubebuilder:rbac:groups="postgres-operator.crunchydata.com",resources="crunchybridgeclusters",verbs={list,watch}
5054//+kubebuilder:rbac:groups="",resources="secrets",verbs={list,watch}
5155
52- // SetupWithManager sets up the controller with the Manager.
53- func (r * CrunchyBridgeClusterReconciler ) SetupWithManager (
54- mgr ctrl.Manager ,
55- ) error {
56- return ctrl .NewControllerManagedBy (mgr ).
56+ // ManagedReconciler creates a [CrunchyBridgeClusterReconciler] and adds it to m.
57+ func ManagedReconciler (m ctrl.Manager , newClient func () bridge.ClientInterface ) error {
58+ kubernetes := client .WithFieldOwner (m .GetClient (), naming .ControllerCrunchyBridgeCluster )
59+
60+ reconciler := & CrunchyBridgeClusterReconciler {
61+ NewClient : newClient ,
62+ Reader : kubernetes ,
63+ StatusWriter : kubernetes .Status (),
64+ Writer : kubernetes ,
65+ }
66+
67+ return ctrl .NewControllerManagedBy (m ).
5768 For (& v1beta1.CrunchyBridgeCluster {}).
5869 Owns (& corev1.Secret {}).
5970 // Wake periodically to check Bridge API for all CrunchyBridgeClusters.
@@ -63,7 +74,7 @@ func (r *CrunchyBridgeClusterReconciler) SetupWithManager(
6374 runtime .NewTickerImmediate (5 * time .Minute , event.GenericEvent {},
6475 handler .EnqueueRequestsFromMapFunc (func (ctx context.Context , _ client.Object ) []ctrl.Request {
6576 var list v1beta1.CrunchyBridgeClusterList
66- _ = r .List (ctx , & list )
77+ _ = reconciler . Reader .List (ctx , & list )
6778 return runtime .Requests (initialize .Pointers (list .Items ... )... )
6879 }),
6980 ),
@@ -72,10 +83,10 @@ func (r *CrunchyBridgeClusterReconciler) SetupWithManager(
7283 Watches (
7384 & corev1.Secret {},
7485 handler .EnqueueRequestsFromMapFunc (func (ctx context.Context , secret client.Object ) []ctrl.Request {
75- return runtime .Requests (r .findCrunchyBridgeClustersForSecret (ctx , client .ObjectKeyFromObject (secret ))... )
86+ return runtime .Requests (reconciler .findCrunchyBridgeClustersForSecret (ctx , client .ObjectKeyFromObject (secret ))... )
7687 }),
7788 ).
78- Complete (r )
89+ Complete (reconciler )
7990}
8091
8192// The owner reference created by controllerutil.SetControllerReference blocks
@@ -91,7 +102,7 @@ func (r *CrunchyBridgeClusterReconciler) SetupWithManager(
91102func (r * CrunchyBridgeClusterReconciler ) setControllerReference (
92103 owner * v1beta1.CrunchyBridgeCluster , controlled client.Object ,
93104) error {
94- return controllerutil .SetControllerReference (owner , controlled , r .Scheme () )
105+ return controllerutil .SetControllerReference (owner , controlled , runtime .Scheme )
95106}
96107
97108//+kubebuilder:rbac:groups="postgres-operator.crunchydata.com",resources="crunchybridgeclusters",verbs={get,patch,update}
@@ -113,14 +124,14 @@ func (r *CrunchyBridgeClusterReconciler) Reconcile(ctx context.Context, req ctrl
113124 // copy before returning from its cache.
114125 // - https://github.com/kubernetes-sigs/controller-runtime/issues/1235
115126 crunchybridgecluster := & v1beta1.CrunchyBridgeCluster {}
116- err := r .Get (ctx , req .NamespacedName , crunchybridgecluster )
127+ err := r .Reader . Get (ctx , req .NamespacedName , crunchybridgecluster )
117128
118129 if err == nil {
119130 // Write any changes to the crunchybridgecluster status on the way out.
120131 before := crunchybridgecluster .DeepCopy ()
121132 defer func () {
122133 if ! equality .Semantic .DeepEqual (before .Status , crunchybridgecluster .Status ) {
123- status := r .Status () .Patch (ctx , crunchybridgecluster , client .MergeFrom (before ), r . Owner )
134+ status := r .StatusWriter .Patch (ctx , crunchybridgecluster , client .MergeFrom (before ))
124135
125136 if err == nil && status != nil {
126137 err = status
@@ -684,7 +695,7 @@ func (r *CrunchyBridgeClusterReconciler) GetSecretKeys(
684695 }}
685696
686697 err := errors .WithStack (
687- r .Get (ctx , client .ObjectKeyFromObject (existing ), existing ))
698+ r .Reader . Get (ctx , client .ObjectKeyFromObject (existing ), existing ))
688699
689700 if err == nil {
690701 if existing .Data ["key" ] != nil && existing .Data ["team" ] != nil {
@@ -707,7 +718,7 @@ func (r *CrunchyBridgeClusterReconciler) deleteControlled(
707718 version := object .GetResourceVersion ()
708719 exactly := client.Preconditions {UID : & uid , ResourceVersion : & version }
709720
710- return r .Delete (ctx , object , exactly )
721+ return r .Writer . Delete (ctx , object , exactly )
711722 }
712723
713724 return nil
0 commit comments