Skip to content

Commit f1ad04e

Browse files
authored
fix: homogenize label selector default value (#1135)
Fixes #1123
1 parent e0ac3cd commit f1ad04e

File tree

2 files changed

+48
-2
lines changed

2 files changed

+48
-2
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/AnnotationControllerConfiguration.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import io.fabric8.kubernetes.api.model.HasMetadata;
1414
import io.javaoperatorsdk.operator.ReconcilerUtils;
1515
import io.javaoperatorsdk.operator.api.config.dependent.DependentResourceSpec;
16+
import io.javaoperatorsdk.operator.api.reconciler.Constants;
1617
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
1718
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
1819
import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
@@ -189,8 +190,12 @@ private Object createKubernetesResourceConfig(Class<? extends DependentResource>
189190
configuredNS = true;
190191
}
191192

192-
final var labelSelector =
193-
Utils.valueOrDefault(kubeDependent, KubernetesDependent::labelSelector, null);
193+
String labelSelector = null;
194+
if (kubeDependent != null) {
195+
final var fromAnnotation = kubeDependent.labelSelector();
196+
labelSelector = Constants.NO_VALUE_SET.equals(fromAnnotation) ? null : fromAnnotation;
197+
}
198+
194199
config =
195200
new KubernetesDependentResourceConfig(namespaces, labelSelector, configuredNS);
196201
return config;

operator-framework/src/test/java/io/javaoperatorsdk/operator/config/runtime/AnnotationControllerConfigurationTest.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,36 @@
1414
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
1515
import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
1616
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
17+
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
18+
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependentResource;
1719
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependentResourceConfig;
1820
import io.javaoperatorsdk.operator.sample.readonly.ReadOnlyDependent;
1921

2022
import static org.junit.jupiter.api.Assertions.assertEquals;
2123
import static org.junit.jupiter.api.Assertions.assertFalse;
24+
import static org.junit.jupiter.api.Assertions.assertNull;
2225
import static org.junit.jupiter.api.Assertions.assertThrows;
2326
import static org.junit.jupiter.api.Assertions.assertTrue;
2427

2528
class AnnotationControllerConfigurationTest {
2629

30+
@Test
31+
void defaultValuesShouldBeConsistent() {
32+
final var configuration = new AnnotationControllerConfiguration<>(new SelectorReconciler());
33+
final var annotated = extractDependentKubernetesResourceConfig(configuration, 1);
34+
final var unannotated = extractDependentKubernetesResourceConfig(configuration, 0);
35+
36+
assertNull(annotated.labelSelector());
37+
assertNull(unannotated.labelSelector());
38+
}
39+
40+
private KubernetesDependentResourceConfig extractDependentKubernetesResourceConfig(
41+
io.javaoperatorsdk.operator.api.config.ControllerConfiguration<?> configuration, int index) {
42+
return (KubernetesDependentResourceConfig) configuration.getDependentResources().get(index)
43+
.getDependentResourceConfiguration()
44+
.orElseThrow();
45+
}
46+
2747
@Test
2848
void getDependentResources() {
2949
var configuration = new AnnotationControllerConfiguration<>(new NoDepReconciler());
@@ -144,4 +164,25 @@ public UpdateControl<ConfigMap> reconcile(ConfigMap resource, Context<ConfigMap>
144164
return null;
145165
}
146166
}
167+
168+
@ControllerConfiguration(dependents = {
169+
@Dependent(type = SelectorReconciler.WithAnnotation.class),
170+
@Dependent(type = ReadOnlyDependent.class)
171+
})
172+
private static class SelectorReconciler implements Reconciler<ConfigMap> {
173+
174+
@Override
175+
public UpdateControl<ConfigMap> reconcile(ConfigMap resource, Context<ConfigMap> context)
176+
throws Exception {
177+
return null;
178+
}
179+
180+
@KubernetesDependent
181+
private static class WithAnnotation extends KubernetesDependentResource<ConfigMap, ConfigMap> {
182+
183+
public WithAnnotation() {
184+
super(ConfigMap.class);
185+
}
186+
}
187+
}
147188
}

0 commit comments

Comments
 (0)