Skip to content

Commit d1a4269

Browse files
authored
fix: trigger reconcile if the secret changed, fix ready condition (#3)
1 parent 694a4a4 commit d1a4269

File tree

2 files changed

+62
-4
lines changed

2 files changed

+62
-4
lines changed

internal/controllers/awsrdsinstance_controller.go

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package controllers
1919
import (
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+
77108
func (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
}

internal/controllers/mongodbatlascluster_controller.go

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package controllers
1919
import (
2020
"context"
2121
"errors"
22+
"fmt"
2223
"net/http"
2324
"time"
2425

@@ -66,10 +67,36 @@ func (r *MongoDBAtlasClusterReconciler) SetupWithManager(mgr ctrl.Manager, opts
6667
&corev1.Pod{},
6768
handler.EnqueueRequestsFromMapFunc(r.requestsForChangeBySelector),
6869
).
70+
Watches(
71+
&corev1.Secret{},
72+
handler.EnqueueRequestsFromMapFunc(r.requestsForSecretChange),
73+
).
6974
WithOptions(controller.Options{MaxConcurrentReconciles: opts.MaxConcurrentReconciles}).
7075
Complete(r)
7176
}
7277

78+
func (r *MongoDBAtlasClusterReconciler) requestsForSecretChange(ctx context.Context, o client.Object) []reconcile.Request {
79+
sectet, ok := o.(*corev1.Secret)
80+
if !ok {
81+
panic(fmt.Sprintf("expected a Secret, got %T", o))
82+
}
83+
84+
var list infrav1beta1.MongoDBAtlasClusterList
85+
if err := r.List(ctx, &list, client.MatchingFields{
86+
secretIndexKey: objectKey(sectet).String(),
87+
}); err != nil {
88+
return nil
89+
}
90+
91+
var reqs []reconcile.Request
92+
for _, cluster := range list.Items {
93+
r.Log.V(1).Info("referenced secret from a MongoDBAtlasCluster changed detected", "namespace", cluster.GetNamespace(), "name", cluster.GetName())
94+
reqs = append(reqs, reconcile.Request{NamespacedName: objectKey(&cluster)})
95+
}
96+
97+
return reqs
98+
}
99+
73100
func (r *MongoDBAtlasClusterReconciler) requestsForChangeBySelector(ctx context.Context, o client.Object) []reconcile.Request {
74101
var list infrav1beta1.MongoDBAtlasClusterList
75102
if err := r.List(ctx, &list, client.InNamespace(o.GetNamespace())); err != nil {
@@ -206,14 +233,14 @@ func (r *MongoDBAtlasClusterReconciler) reconcile(ctx context.Context, cluster i
206233
logger.Info("make sure RDS clusters are suspended", "cluster", opts.ClusterName)
207234
res, err = r.suspend(ctx, logger, opts)
208235

209-
if err != nil {
236+
if err == nil {
210237
cluster = infrav1beta1.MongoDBAtlasClusterReady(cluster, metav1.ConditionTrue, "ReconciliationSuccessful", "atlas cluster suspended")
211238
}
212239
} else {
213240
logger.Info("make sure RDS clusters are resumed", "cluster", opts.ClusterName)
214241
res, err = r.resume(ctx, logger, opts)
215242

216-
if err != nil {
243+
if err == nil {
217244
cluster = infrav1beta1.MongoDBAtlasClusterReady(cluster, metav1.ConditionTrue, "ReconciliationSuccessful", "atlas cluster resumed")
218245
}
219246
}

0 commit comments

Comments
 (0)