Skip to content

Commit 150fc4d

Browse files
committed
feat: configurable SSA per Dependent Resource
Signed-off-by: Attila Mészáros <csviri@gmail.com>
1 parent e9c2639 commit 150fc4d

File tree

6 files changed

+28
-4
lines changed

6 files changed

+28
-4
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package io.javaoperatorsdk.operator.processing.dependent.kubernetes;
2+
3+
public enum BooleanWithUndefined {
4+
TRUE, FALSE, UNDEFINED
5+
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependent.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,4 +76,9 @@
7676
* Creates the resource only if did not exist before, this applies only if SSA is used.
7777
*/
7878
boolean createResourceOnlyIfNotExistingWithSSA() default KubernetesDependentResourceConfig.DEFAULT_CREATE_RESOURCE_ONLY_IF_NOT_EXISTING_WITH_SSA;
79+
80+
/**
81+
* In case of UNDEFINED inherits global configuration.
82+
*/
83+
BooleanWithUndefined useSSA() default BooleanWithUndefined.UNDEFINED;
7984
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentConverter.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public KubernetesDependentResourceConfig<R> configFrom(KubernetesDependent confi
3434
OnDeleteFilter<? extends HasMetadata> onDeleteFilter = null;
3535
GenericFilter<? extends HasMetadata> genericFilter = null;
3636
ResourceDiscriminator<?, ?> resourceDiscriminator = null;
37+
Boolean useSSA = null;
3738
if (configAnnotation != null) {
3839
if (!Arrays.equals(KubernetesDependent.DEFAULT_NAMESPACES, configAnnotation.namespaces())) {
3940
namespaces = Set.of(configAnnotation.namespaces());
@@ -58,10 +59,12 @@ public KubernetesDependentResourceConfig<R> configFrom(KubernetesDependent confi
5859
context);
5960
createResourceOnlyIfNotExistingWithSSA =
6061
configAnnotation.createResourceOnlyIfNotExistingWithSSA();
62+
useSSA = configAnnotation.useSSA() == BooleanWithUndefined.UNDEFINED ? null
63+
: configAnnotation.useSSA() == BooleanWithUndefined.TRUE;
6164
}
6265

6366
return new KubernetesDependentResourceConfig(namespaces, labelSelector, configuredNS,
6467
createResourceOnlyIfNotExistingWithSSA,
65-
resourceDiscriminator, onAddFilter, onUpdateFilter, onDeleteFilter, genericFilter);
68+
resourceDiscriminator, useSSA, onAddFilter, onUpdateFilter, onDeleteFilter, genericFilter);
6669
}
6770
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,8 +190,10 @@ protected void addMetadata(boolean forMatch, R actualResource, final R target, P
190190
}
191191

192192
private boolean useSSA(Context<P> context) {
193-
return context.getControllerConfiguration().getConfigurationService()
194-
.ssaBasedCreateUpdateMatchForDependentResources();
193+
Optional<Boolean> useSSAConfig =
194+
configuration().flatMap(KubernetesDependentResourceConfig::useSSA);
195+
return useSSAConfig.orElse(context.getControllerConfiguration().getConfigurationService()
196+
.ssaBasedCreateUpdateMatchForDependentResources());
195197
}
196198

197199
@Override

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfig.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.javaoperatorsdk.operator.processing.dependent.kubernetes;
22

3+
import java.util.Optional;
34
import java.util.Set;
45

56
import io.javaoperatorsdk.operator.api.reconciler.Constants;
@@ -20,6 +21,7 @@ public class KubernetesDependentResourceConfig<R> {
2021
private boolean namespacesWereConfigured = false;
2122
private boolean createResourceOnlyIfNotExistingWithSSA;
2223
private ResourceDiscriminator<R, ?> resourceDiscriminator;
24+
private Boolean useSSA;
2325

2426
private OnAddFilter<R> onAddFilter;
2527

@@ -36,6 +38,7 @@ public KubernetesDependentResourceConfig(Set<String> namespaces,
3638
boolean configuredNS,
3739
boolean createResourceOnlyIfNotExistingWithSSA,
3840
ResourceDiscriminator<R, ?> resourceDiscriminator,
41+
Boolean useSSA,
3942
OnAddFilter<R> onAddFilter,
4043
OnUpdateFilter<R> onUpdateFilter,
4144
OnDeleteFilter<R> onDeleteFilter, GenericFilter<R> genericFilter) {
@@ -48,12 +51,13 @@ public KubernetesDependentResourceConfig(Set<String> namespaces,
4851
this.onDeleteFilter = onDeleteFilter;
4952
this.genericFilter = genericFilter;
5053
this.resourceDiscriminator = resourceDiscriminator;
54+
this.useSSA = useSSA;
5155
}
5256

5357
public KubernetesDependentResourceConfig(Set<String> namespaces, String labelSelector) {
5458
this(namespaces, labelSelector, true, DEFAULT_CREATE_RESOURCE_ONLY_IF_NOT_EXISTING_WITH_SSA,
5559
null, null, null,
56-
null, null);
60+
null, null, null);
5761
}
5862

5963
public KubernetesDependentResourceConfig<R> setLabelSelector(String labelSelector) {
@@ -105,4 +109,8 @@ protected void setNamespaces(Set<String> namespaces) {
105109
this.namespaces = namespaces;
106110
}
107111
}
112+
113+
public Optional<Boolean> useSSA() {
114+
return Optional.ofNullable(useSSA);
115+
}
108116
}

sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/ConfigMapDependentResource.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ protected ConfigMap desired(WebPage webPage, Context<WebPage> context) {
3535
data.put("index.html", webPage.getSpec().getHtml());
3636
Map<String, String> labels = new HashMap<>();
3737
labels.put(SELECTOR, "true");
38+
log.info("!!! Desired spec: {}", webPage.getSpec().getHtml());
3839
return new ConfigMapBuilder()
3940
.withMetadata(
4041
new ObjectMetaBuilder()

0 commit comments

Comments
 (0)