Skip to content

Commit e708187

Browse files
Recreate dependant resources on change
1 parent fac6003 commit e708187

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

internal/controller/controller.go

+26
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,16 @@ import (
2020
"context"
2121
"fmt"
2222

23+
appsv1 "k8s.io/api/apps/v1"
24+
corev1 "k8s.io/api/core/v1"
2325
k8serrors "k8s.io/apimachinery/pkg/api/errors"
2426
"k8s.io/apimachinery/pkg/runtime"
27+
"k8s.io/apimachinery/pkg/types"
2528
ctrl "sigs.k8s.io/controller-runtime"
2629
"sigs.k8s.io/controller-runtime/pkg/client"
30+
"sigs.k8s.io/controller-runtime/pkg/handler"
2731
"sigs.k8s.io/controller-runtime/pkg/log"
32+
"sigs.k8s.io/controller-runtime/pkg/reconcile"
2833

2934
"github.com/go-logr/logr"
3035
unagexcomv1 "github.com/unagex/metabase-operator/api/v1"
@@ -74,7 +79,28 @@ func (r *MetabaseReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c
7479

7580
// SetupWithManager sets up the controller with the Manager.
7681
func (r *MetabaseReconciler) SetupWithManager(mgr ctrl.Manager) error {
82+
// filter to requeue when a dependant resource is created/updated/deleted.
83+
// secrets are the exception because we cannot recreate it with the same password.
84+
filter := handler.EnqueueRequestsFromMapFunc(func(_ context.Context, o client.Object) []reconcile.Request {
85+
ls := o.GetLabels()
86+
if ls["app.kubernetes.io/managed-by"] != "metabase-operator" {
87+
return nil
88+
}
89+
90+
return []reconcile.Request{
91+
{
92+
NamespacedName: types.NamespacedName{
93+
Namespace: o.GetNamespace(),
94+
Name: ls["app.kubernetes.io/instance"],
95+
},
96+
},
97+
}
98+
})
99+
77100
return ctrl.NewControllerManagedBy(mgr).
78101
For(&unagexcomv1.Metabase{}).
102+
Watches(&appsv1.StatefulSet{}, filter).
103+
Watches(&appsv1.Deployment{}, filter).
104+
Watches(&corev1.Service{}, filter).
79105
Complete(r)
80106
}

0 commit comments

Comments
 (0)