@@ -21,6 +21,7 @@ import (
2121 "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
2222 "sigs.k8s.io/controller-runtime/pkg/event"
2323 "sigs.k8s.io/controller-runtime/pkg/handler"
24+ "sigs.k8s.io/controller-runtime/pkg/reconcile"
2425
2526 "github.com/crunchydata/postgres-operator/internal/bridge"
2627 "github.com/crunchydata/postgres-operator/internal/controller/runtime"
@@ -50,8 +51,8 @@ type CrunchyBridgeClusterReconciler struct {
5051 }
5152}
5253
53- //+kubebuilder:rbac:groups="postgres-operator.crunchydata.com",resources="crunchybridgeclusters",verbs={list,watch}
54- //+kubebuilder:rbac:groups="",resources="secrets",verbs={list,watch}
54+ //+kubebuilder:rbac:groups="postgres-operator.crunchydata.com",resources="crunchybridgeclusters",verbs={get, list,watch}
55+ //+kubebuilder:rbac:groups="",resources="secrets",verbs={get, list,watch}
5556
5657// ManagedReconciler creates a [CrunchyBridgeClusterReconciler] and adds it to m.
5758func ManagedReconciler (m ctrl.Manager , newClient func () bridge.ClientInterface ) error {
@@ -72,7 +73,7 @@ func ManagedReconciler(m ctrl.Manager, newClient func() bridge.ClientInterface)
7273 // Smarter: retry after a certain time for each cluster
7374 WatchesRawSource (
7475 runtime .NewTickerImmediate (5 * time .Minute , event.GenericEvent {},
75- handler .EnqueueRequestsFromMapFunc (func (ctx context.Context , _ client.Object ) []ctrl .Request {
76+ handler .EnqueueRequestsFromMapFunc (func (ctx context.Context , _ client.Object ) []reconcile .Request {
7677 var list v1beta1.CrunchyBridgeClusterList
7778 _ = reconciler .Reader .List (ctx , & list )
7879 return runtime .Requests (initialize .Pointers (list .Items ... )... )
@@ -82,11 +83,11 @@ func ManagedReconciler(m ctrl.Manager, newClient func() bridge.ClientInterface)
8283 // Watch secrets and filter for secrets mentioned by CrunchyBridgeClusters
8384 Watches (
8485 & corev1.Secret {},
85- handler .EnqueueRequestsFromMapFunc (func (ctx context.Context , secret client.Object ) []ctrl .Request {
86+ handler .EnqueueRequestsFromMapFunc (func (ctx context.Context , secret client.Object ) []reconcile .Request {
8687 return runtime .Requests (reconciler .findCrunchyBridgeClustersForSecret (ctx , client .ObjectKeyFromObject (secret ))... )
8788 }),
8889 ).
89- Complete (reconciler )
90+ Complete (reconcile . AsReconciler ( kubernetes , reconciler ) )
9091}
9192
9293// The owner reference created by controllerutil.SetControllerReference blocks
@@ -105,47 +106,32 @@ func (r *CrunchyBridgeClusterReconciler) setControllerReference(
105106 return controllerutil .SetControllerReference (owner , controlled , runtime .Scheme )
106107}
107108
108- //+kubebuilder:rbac:groups="postgres-operator.crunchydata.com",resources="crunchybridgeclusters",verbs={get, patch,update}
109+ //+kubebuilder:rbac:groups="postgres-operator.crunchydata.com",resources="crunchybridgeclusters",verbs={patch,update}
109110//+kubebuilder:rbac:groups="postgres-operator.crunchydata.com",resources="crunchybridgeclusters/status",verbs={patch,update}
110111//+kubebuilder:rbac:groups="postgres-operator.crunchydata.com",resources="crunchybridgeclusters/finalizers",verbs={patch,update}
111112//+kubebuilder:rbac:groups="",resources="secrets",verbs={get}
112113
113114// Reconcile does the work to move the current state of the world toward the
114- // desired state described in a [v1beta1.CrunchyBridgeCluster] identified by req.
115- func (r * CrunchyBridgeClusterReconciler ) Reconcile (ctx context.Context , req ctrl.Request ) (ctrl.Result , error ) {
115+ // desired state described in crunchybridgecluster.
116+ func (r * CrunchyBridgeClusterReconciler ) Reconcile (ctx context.Context , crunchybridgecluster * v1beta1.CrunchyBridgeCluster ) (ctrl.Result , error ) {
117+ var err error
116118 ctx , span := tracing .Start (ctx , "reconcile-crunchybridgecluster" )
117119 log := logging .FromContext (ctx )
118120 defer span .End ()
119121
120- // Retrieve the crunchybridgecluster from the client cache, if it exists. A deferred
121- // function below will send any changes to its Status field.
122- //
123- // NOTE: No DeepCopy is necessary here because controller-runtime makes a
124- // copy before returning from its cache.
125- // - https://github.com/kubernetes-sigs/controller-runtime/issues/1235
126- crunchybridgecluster := & v1beta1.CrunchyBridgeCluster {}
127- err := r .Reader .Get (ctx , req .NamespacedName , crunchybridgecluster )
122+ // Write any changes to the crunchybridgecluster status on the way out.
123+ before := crunchybridgecluster .DeepCopy ()
124+ defer func () {
125+ if ! equality .Semantic .DeepEqual (before .Status , crunchybridgecluster .Status ) {
126+ status := r .StatusWriter .Patch (ctx , crunchybridgecluster , client .MergeFrom (before ))
128127
129- if err == nil {
130- // Write any changes to the crunchybridgecluster status on the way out.
131- before := crunchybridgecluster .DeepCopy ()
132- defer func () {
133- if ! equality .Semantic .DeepEqual (before .Status , crunchybridgecluster .Status ) {
134- status := r .StatusWriter .Patch (ctx , crunchybridgecluster , client .MergeFrom (before ))
135-
136- if err == nil && status != nil {
137- err = status
138- } else if status != nil {
139- log .Error (status , "Patching CrunchyBridgeCluster status" )
140- }
128+ if err == nil && status != nil {
129+ err = status
130+ } else if status != nil {
131+ log .Error (status , "Patching CrunchyBridgeCluster status" )
141132 }
142- }()
143- } else {
144- // NotFound cannot be fixed by requeuing so ignore it. During background
145- // deletion, we receive delete events from crunchybridgecluster's dependents after
146- // crunchybridgecluster is deleted.
147- return ctrl.Result {}, tracing .Escape (span , client .IgnoreNotFound (err ))
148- }
133+ }
134+ }()
149135
150136 // Get and validate connection secret for requests
151137 key , team , err := r .reconcileBridgeConnectionSecret (ctx , crunchybridgecluster )
0 commit comments