diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/AnnotationControllerConfiguration.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/AnnotationControllerConfiguration.java index 70059f9683..19535c6d3e 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/AnnotationControllerConfiguration.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/AnnotationControllerConfiguration.java @@ -13,6 +13,7 @@ import io.fabric8.kubernetes.api.model.HasMetadata; import io.javaoperatorsdk.operator.ReconcilerUtils; import io.javaoperatorsdk.operator.api.config.dependent.DependentResourceSpec; +import io.javaoperatorsdk.operator.api.reconciler.Constants; import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration; import io.javaoperatorsdk.operator.api.reconciler.Reconciler; import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent; @@ -189,8 +190,12 @@ private Object createKubernetesResourceConfig(Class configuredNS = true; } - final var labelSelector = - Utils.valueOrDefault(kubeDependent, KubernetesDependent::labelSelector, null); + String labelSelector = null; + if (kubeDependent != null) { + final var fromAnnotation = kubeDependent.labelSelector(); + labelSelector = Constants.NO_VALUE_SET.equals(fromAnnotation) ? null : fromAnnotation; + } + config = new KubernetesDependentResourceConfig(namespaces, labelSelector, configuredNS); return config; diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/config/runtime/AnnotationControllerConfigurationTest.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/config/runtime/AnnotationControllerConfigurationTest.java index 90c013c095..ad97653946 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/config/runtime/AnnotationControllerConfigurationTest.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/config/runtime/AnnotationControllerConfigurationTest.java @@ -14,16 +14,36 @@ import io.javaoperatorsdk.operator.api.reconciler.UpdateControl; import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent; import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource; +import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent; +import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependentResource; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependentResourceConfig; import io.javaoperatorsdk.operator.sample.readonly.ReadOnlyDependent; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; class AnnotationControllerConfigurationTest { + @Test + void defaultValuesShouldBeConsistent() { + final var configuration = new AnnotationControllerConfiguration<>(new SelectorReconciler()); + final var annotated = extractDependentKubernetesResourceConfig(configuration, 1); + final var unannotated = extractDependentKubernetesResourceConfig(configuration, 0); + + assertNull(annotated.labelSelector()); + assertNull(unannotated.labelSelector()); + } + + private KubernetesDependentResourceConfig extractDependentKubernetesResourceConfig( + io.javaoperatorsdk.operator.api.config.ControllerConfiguration configuration, int index) { + return (KubernetesDependentResourceConfig) configuration.getDependentResources().get(index) + .getDependentResourceConfiguration() + .orElseThrow(); + } + @Test void getDependentResources() { var configuration = new AnnotationControllerConfiguration<>(new NoDepReconciler()); @@ -144,4 +164,25 @@ public UpdateControl reconcile(ConfigMap resource, Context return null; } } + + @ControllerConfiguration(dependents = { + @Dependent(type = SelectorReconciler.WithAnnotation.class), + @Dependent(type = ReadOnlyDependent.class) + }) + private static class SelectorReconciler implements Reconciler { + + @Override + public UpdateControl reconcile(ConfigMap resource, Context context) + throws Exception { + return null; + } + + @KubernetesDependent + private static class WithAnnotation extends KubernetesDependentResource { + + public WithAnnotation() { + super(ConfigMap.class); + } + } + } }