@@ -20,11 +20,16 @@ import (
20
20
"context"
21
21
"fmt"
22
22
23
+ appsv1 "k8s.io/api/apps/v1"
24
+ corev1 "k8s.io/api/core/v1"
23
25
k8serrors "k8s.io/apimachinery/pkg/api/errors"
24
26
"k8s.io/apimachinery/pkg/runtime"
27
+ "k8s.io/apimachinery/pkg/types"
25
28
ctrl "sigs.k8s.io/controller-runtime"
26
29
"sigs.k8s.io/controller-runtime/pkg/client"
30
+ "sigs.k8s.io/controller-runtime/pkg/handler"
27
31
"sigs.k8s.io/controller-runtime/pkg/log"
32
+ "sigs.k8s.io/controller-runtime/pkg/reconcile"
28
33
29
34
"github.com/go-logr/logr"
30
35
unagexcomv1 "github.com/unagex/metabase-operator/api/v1"
@@ -74,7 +79,28 @@ func (r *MetabaseReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c
74
79
75
80
// SetupWithManager sets up the controller with the Manager.
76
81
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
+
77
100
return ctrl .NewControllerManagedBy (mgr ).
78
101
For (& unagexcomv1.Metabase {}).
102
+ Watches (& appsv1.StatefulSet {}, filter ).
103
+ Watches (& appsv1.Deployment {}, filter ).
104
+ Watches (& corev1.Service {}, filter ).
79
105
Complete (r )
80
106
}
0 commit comments