diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/Operator.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/Operator.java index 4eded0393a..7f2cdbad18 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/Operator.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/Operator.java @@ -95,7 +95,14 @@ public void register( } final var retry = GenericRetry.fromConfiguration(configuration.getRetryConfiguration()); - final var targetNamespaces = configuration.getNamespaces().toArray(new String[] {}); + + // check if we only want to watch the current namespace + var targetNamespaces = configuration.getNamespaces().toArray(new String[] {}); + if (configuration.watchCurrentNamespace()) { + targetNamespaces = + new String[] {configurationService.getClientConfiguration().getNamespace()}; + } + Class resClass = configuration.getCustomResourceClass(); String finalizer = configuration.getFinalizer(); diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/Controller.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/Controller.java index fa882154b1..f7a016d62b 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/Controller.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/Controller.java @@ -10,6 +10,7 @@ public @interface Controller { String NULL = ""; + String WATCH_CURRENT_NAMESPACE = "JOSDK_WATCH_CURRENT"; String name() default NULL; diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ControllerConfiguration.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ControllerConfiguration.java index 1a9a42d89d..0606fe6085 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ControllerConfiguration.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ControllerConfiguration.java @@ -1,10 +1,12 @@ package io.javaoperatorsdk.operator.api.config; import io.fabric8.kubernetes.client.CustomResource; +import io.javaoperatorsdk.operator.api.Controller; import java.util.Collections; import java.util.Set; public interface ControllerConfiguration { + String getName(); String getCRDName(); @@ -25,6 +27,11 @@ default boolean watchAllNamespaces() { return getNamespaces().isEmpty(); } + default boolean watchCurrentNamespace() { + final var namespaces = getNamespaces(); + return namespaces.size() == 1 && namespaces.contains(Controller.WATCH_CURRENT_NAMESPACE); + } + default RetryConfiguration getRetryConfiguration() { return RetryConfiguration.DEFAULT; }