@@ -19,6 +19,7 @@ package controllers
1919import (
2020 "context"
2121 "errors"
22+ "fmt"
2223 "net/http"
2324 "time"
2425
@@ -42,6 +43,10 @@ import (
4243 "sigs.k8s.io/controller-runtime/pkg/reconcile"
4344)
4445
46+ const (
47+ secretIndexKey = ".metadata.secret"
48+ )
49+
4550//+kubebuilder:rbac:groups=cloudautoscale.infra.doodle.com,resources=awsrdsinstances,verbs=get;list;watch;create;update;patch;delete
4651//+kubebuilder:rbac:groups=cloudautoscale.infra.doodle.com,resources=awsrdsinstances/status,verbs=get;update;patch
4752//+kubebuilder:rbac:groups=cloudautoscale.infra.doodle.com,resources=awsrdsinstances/finalizers,verbs=update
@@ -70,10 +75,36 @@ func (r *AWSRDSInstanceReconciler) SetupWithManager(mgr ctrl.Manager, opts AWSRD
7075 & corev1.Pod {},
7176 handler .EnqueueRequestsFromMapFunc (r .requestsForChangeBySelector ),
7277 ).
78+ Watches (
79+ & corev1.Secret {},
80+ handler .EnqueueRequestsFromMapFunc (r .requestsForSecretChange ),
81+ ).
7382 WithOptions (controller.Options {MaxConcurrentReconciles : opts .MaxConcurrentReconciles }).
7483 Complete (r )
7584}
7685
86+ func (r * AWSRDSInstanceReconciler ) requestsForSecretChange (ctx context.Context , o client.Object ) []reconcile.Request {
87+ sectet , ok := o .(* corev1.Secret )
88+ if ! ok {
89+ panic (fmt .Sprintf ("expected a Secret, got %T" , o ))
90+ }
91+
92+ var list infrav1beta1.AWSRDSInstanceList
93+ if err := r .List (ctx , & list , client.MatchingFields {
94+ secretIndexKey : objectKey (sectet ).String (),
95+ }); err != nil {
96+ return nil
97+ }
98+
99+ var reqs []reconcile.Request
100+ for _ , instance := range list .Items {
101+ r .Log .V (1 ).Info ("referenced secret from a AWSRDSInstance changed detected" , "namespace" , instance .GetNamespace (), "name" , instance .GetName ())
102+ reqs = append (reqs , reconcile.Request {NamespacedName : objectKey (& instance )})
103+ }
104+
105+ return reqs
106+ }
107+
77108func (r * AWSRDSInstanceReconciler ) requestsForChangeBySelector (ctx context.Context , o client.Object ) []reconcile.Request {
78109 var list infrav1beta1.AWSRDSInstanceList
79110 if err := r .List (ctx , & list , client .InNamespace (o .GetNamespace ())); err != nil {
@@ -209,14 +240,14 @@ func (r *AWSRDSInstanceReconciler) reconcile(ctx context.Context, instance infra
209240 logger .Info ("make sure RDS instances are suspended" , "instance" , opts .instanceName )
210241 res , err = r .suspend (ctx , logger , opts )
211242
212- if err ! = nil {
243+ if err = = nil {
213244 instance = infrav1beta1 .AWSRDSInstanceReady (instance , metav1 .ConditionTrue , "ReconciliationSuccessful" , "rds instance suspended" )
214245 }
215246 } else {
216247 logger .Info ("make sure RDS instances are resumed" , "instance" , opts .instanceName )
217248 res , err = r .resume (ctx , logger , opts )
218249
219- if err ! = nil {
250+ if err = = nil {
220251 instance = infrav1beta1 .AWSRDSInstanceReady (instance , metav1 .ConditionTrue , "ReconciliationSuccessful" , "rds instance suspended" )
221252 }
222253 }
0 commit comments