From 9a6349acfe8474aa1305a10dbf1ec8639345a2cf Mon Sep 17 00:00:00 2001 From: "augusto.ribeiro" Date: Tue, 20 Jan 2026 16:48:20 +0100 Subject: [PATCH] adding a watch-namespace option in order to only watch one namespace if set --- internal/cmd/operator/main.go | 7 +++++++ internal/cnpgi/operator/manager.go | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/internal/cmd/operator/main.go b/internal/cmd/operator/main.go index 33570543..d8e58fd4 100644 --- a/internal/cmd/operator/main.go +++ b/internal/cmd/operator/main.go @@ -103,5 +103,12 @@ func NewCmd() *cobra.Command { _ = viper.BindEnv("sidecar-image", "SIDECAR_IMAGE") + cmd.Flags().String( + "watch-namespace", + "", + "The namespace to watch for CloudNativePG clusters. If empty, all namespaces will be watched.", + ) + _ = viper.BindPFlag("watch-namespace", cmd.Flags().Lookup("watch-namespace")) + return cmd } diff --git a/internal/cnpgi/operator/manager.go b/internal/cnpgi/operator/manager.go index 94dfa728..aee77f61 100644 --- a/internal/cnpgi/operator/manager.go +++ b/internal/cnpgi/operator/manager.go @@ -31,6 +31,7 @@ import ( utilruntime "k8s.io/apimachinery/pkg/util/runtime" clientgoscheme "k8s.io/client-go/kubernetes/scheme" ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/cache" "sigs.k8s.io/controller-runtime/pkg/healthz" "sigs.k8s.io/controller-runtime/pkg/metrics/filters" metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" @@ -102,6 +103,14 @@ func Start(ctx context.Context) error { metricsServerOptions.FilterProvider = filters.WithAuthenticationAndAuthorization } + var cacheOptions cache.Options + if viper.GetString("watch-namespace") != "" { + setupLog.Info("Watching a single namespace", "namespace", viper.GetString("watch-namespace")) + cacheOptions = cache.Options{ + DefaultNamespaces: map[string]cache.Config{viper.GetString("watch-namespace"): {}}, + } + } + mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ Scheme: scheme, Metrics: metricsServerOptions, @@ -120,6 +129,7 @@ func Start(ctx context.Context) error { // if you are doing or is intended to do any operation such as perform cleanups // after the manager stops then its usage might be unsafe. LeaderElectionReleaseOnCancel: true, + Cache: cacheOptions, }) if err != nil { setupLog.Error(err, "unable to start manager")