@@ -6,6 +6,7 @@ package standalone_pgadmin
66
77import (
88 "context"
9+ "errors"
910 "io"
1011
1112 appsv1 "k8s.io/api/apps/v1"
@@ -20,18 +21,30 @@ import (
2021
2122 "github.com/crunchydata/postgres-operator/internal/controller/runtime"
2223 "github.com/crunchydata/postgres-operator/internal/logging"
24+ "github.com/crunchydata/postgres-operator/internal/naming"
2325 "github.com/crunchydata/postgres-operator/internal/tracing"
2426 "github.com/crunchydata/postgres-operator/pkg/apis/postgres-operator.crunchydata.com/v1beta1"
2527)
2628
2729// PGAdminReconciler reconciles a PGAdmin object
2830type PGAdminReconciler struct {
29- client.Client
30- Owner client.FieldOwner
3131 PodExec func (
3232 ctx context.Context , namespace , pod , container string ,
3333 stdin io.Reader , stdout , stderr io.Writer , command ... string ,
3434 ) error
35+
36+ Reader interface {
37+ Get (context.Context , client.ObjectKey , client.Object , ... client.GetOption ) error
38+ List (context.Context , client.ObjectList , ... client.ListOption ) error
39+ }
40+ Writer interface {
41+ Delete (context.Context , client.Object , ... client.DeleteOption ) error
42+ Patch (context.Context , client.Object , client.Patch , ... client.PatchOption ) error
43+ }
44+ StatusWriter interface {
45+ Patch (context.Context , client.Object , client.Patch , ... client.SubResourcePatchOption ) error
46+ }
47+
3548 Recorder record.EventRecorder
3649}
3750
@@ -42,19 +55,21 @@ type PGAdminReconciler struct {
4255//+kubebuilder:rbac:groups="",resources="configmaps",verbs={list,watch}
4356//+kubebuilder:rbac:groups="apps",resources="statefulsets",verbs={list,watch}
4457
45- // SetupWithManager sets up the controller with the Manager.
46- //
47- // TODO(tjmoore4): This function is duplicated from a version that takes a PostgresCluster object.
48- func (r * PGAdminReconciler ) SetupWithManager (mgr ctrl.Manager ) error {
49- if r .PodExec == nil {
50- var err error
51- r .PodExec , err = runtime .NewPodExecutor (mgr .GetConfig ())
52- if err != nil {
53- return err
54- }
58+ // ManagedReconciler creates a [PGAdminReconciler] and adds it to m.
59+ func ManagedReconciler (m ctrl.Manager ) error {
60+ exec , err := runtime .NewPodExecutor (m .GetConfig ())
61+ kubernetes := client .WithFieldOwner (m .GetClient (), naming .ControllerPGAdmin )
62+ recorder := m .GetEventRecorderFor (naming .ControllerPGAdmin )
63+
64+ reconciler := & PGAdminReconciler {
65+ PodExec : exec ,
66+ Reader : kubernetes ,
67+ Recorder : recorder ,
68+ StatusWriter : kubernetes .Status (),
69+ Writer : kubernetes ,
5570 }
5671
57- return ctrl .NewControllerManagedBy (mgr ).
72+ return errors . Join ( err , ctrl .NewControllerManagedBy (m ).
5873 For (& v1beta1.PGAdmin {}).
5974 Owns (& corev1.ConfigMap {}).
6075 Owns (& corev1.PersistentVolumeClaim {}).
@@ -64,16 +79,16 @@ func (r *PGAdminReconciler) SetupWithManager(mgr ctrl.Manager) error {
6479 Watches (
6580 v1beta1 .NewPostgresCluster (),
6681 handler .EnqueueRequestsFromMapFunc (func (ctx context.Context , cluster client.Object ) []ctrl.Request {
67- return runtime .Requests (r .findPGAdminsForPostgresCluster (ctx , cluster )... )
82+ return runtime .Requests (reconciler .findPGAdminsForPostgresCluster (ctx , cluster )... )
6883 }),
6984 ).
7085 Watches (
7186 & corev1.Secret {},
7287 handler .EnqueueRequestsFromMapFunc (func (ctx context.Context , secret client.Object ) []ctrl.Request {
73- return runtime .Requests (r .findPGAdminsForSecret (ctx , client .ObjectKeyFromObject (secret ))... )
88+ return runtime .Requests (reconciler .findPGAdminsForSecret (ctx , client .ObjectKeyFromObject (secret ))... )
7489 }),
7590 ).
76- Complete (r )
91+ Complete (reconciler ) )
7792}
7893
7994//+kubebuilder:rbac:groups="postgres-operator.crunchydata.com",resources="pgadmins",verbs={get}
@@ -89,7 +104,7 @@ func (r *PGAdminReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
89104 defer span .End ()
90105
91106 pgAdmin := & v1beta1.PGAdmin {}
92- if err := r .Get (ctx , req .NamespacedName , pgAdmin ); err != nil {
107+ if err := r .Reader . Get (ctx , req .NamespacedName , pgAdmin ); err != nil {
93108 // NotFound cannot be fixed by requeuing so ignore it. During background
94109 // deletion, we receive delete events from pgadmin's dependents after
95110 // pgadmin is deleted.
@@ -100,7 +115,7 @@ func (r *PGAdminReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
100115 before := pgAdmin .DeepCopy ()
101116 defer func () {
102117 if ! equality .Semantic .DeepEqual (before .Status , pgAdmin .Status ) {
103- statusErr := r .Status () .Patch (ctx , pgAdmin , client .MergeFrom (before ), r . Owner )
118+ statusErr := r .StatusWriter .Patch (ctx , pgAdmin , client .MergeFrom (before ))
104119 if statusErr != nil {
105120 log .Error (statusErr , "Patching PGAdmin status" )
106121 }
@@ -166,7 +181,7 @@ func (r *PGAdminReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
166181func (r * PGAdminReconciler ) setControllerReference (
167182 owner * v1beta1.PGAdmin , controlled client.Object ,
168183) error {
169- return controllerutil .SetControllerReference (owner , controlled , r .Scheme () )
184+ return controllerutil .SetControllerReference (owner , controlled , runtime .Scheme )
170185}
171186
172187// deleteControlled safely deletes object when it is controlled by pgAdmin.
@@ -178,7 +193,7 @@ func (r *PGAdminReconciler) deleteControlled(
178193 version := object .GetResourceVersion ()
179194 exactly := client.Preconditions {UID : & uid , ResourceVersion : & version }
180195
181- return r .Delete (ctx , object , exactly )
196+ return r .Writer . Delete (ctx , object , exactly )
182197 }
183198
184199 return nil
0 commit comments