Skip to content

Commit 3657acd

Browse files
committed
wip
Signed-off-by: Attila Mészáros <[email protected]>
1 parent e2e8de2 commit 3657acd

File tree

8 files changed

+62
-25
lines changed

8 files changed

+62
-25
lines changed

docs/reference.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,10 @@ It has several attributes:
4040
(Same as `reconcilePrecondition` in Java Operator SDK)
4141
- **`readyPostCondition`** - condition to check if the resource is considered to be ready. If a resource is ready all the resources, which depend on it
4242
can proceed in reconciliation.
43-
- **`useSSAMatcher`** - Match resources with Java Operator SDK Server Side Apply based matcher (default `true`). Matching resources
43+
- **`matcher`** - Match resources with Java Operator SDK Server Side Apply based matcher (default `SSA`). Matching resources
4444
is makes the reconciliation much more efficient, since controller updates the resource only if truly changed. However,
4545
it is not possible to match resources because of some characteristics of Kubernetes API (default values, value conversions, etc)
46-
so you can always opt out the matching, and update the resource on every reconciliation.
46+
so you can always opt out the matching (use value `NONE`), and update the resource on every reconciliation.
4747

4848
#### Built-in conditions
4949

src/main/java/io/javaoperatorsdk/operator/glue/customresource/glue/DependentResourceSpec.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public class DependentResourceSpec {
2121

2222
private String resourceTemplate;
2323

24-
private boolean useSSAMatcher = true;
24+
private Matcher matcher = Matcher.SSA;
2525

2626
private List<String> dependsOn = new ArrayList<>();
2727

@@ -94,12 +94,12 @@ public void setClusterScoped(boolean clusterScoped) {
9494
this.clusterScoped = clusterScoped;
9595
}
9696

97-
public boolean isUseSSAMatcher() {
98-
return useSSAMatcher;
97+
public Matcher getMatcher() {
98+
return matcher;
9999
}
100100

101-
public void setUseSSAMatcher(boolean useSSAMatcher) {
102-
this.useSSAMatcher = useSSAMatcher;
101+
public void setMatcher(Matcher matcher) {
102+
this.matcher = matcher;
103103
}
104104

105105
@Override
@@ -109,17 +109,17 @@ public boolean equals(Object o) {
109109
if (o == null || getClass() != o.getClass())
110110
return false;
111111
DependentResourceSpec that = (DependentResourceSpec) o;
112-
return clusterScoped == that.clusterScoped && useSSAMatcher == that.useSSAMatcher
113-
&& Objects.equals(name, that.name) && Objects.equals(resource, that.resource)
114-
&& Objects.equals(resourceTemplate, that.resourceTemplate)
112+
return clusterScoped == that.clusterScoped && Objects.equals(name, that.name)
113+
&& Objects.equals(resource, that.resource)
114+
&& Objects.equals(resourceTemplate, that.resourceTemplate) && matcher == that.matcher
115115
&& Objects.equals(dependsOn, that.dependsOn)
116116
&& Objects.equals(readyPostCondition, that.readyPostCondition)
117117
&& Objects.equals(condition, that.condition);
118118
}
119119

120120
@Override
121121
public int hashCode() {
122-
return Objects.hash(name, clusterScoped, resource, resourceTemplate, useSSAMatcher, dependsOn,
122+
return Objects.hash(name, clusterScoped, resource, resourceTemplate, matcher, dependsOn,
123123
readyPostCondition, condition);
124124
}
125125
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package io.javaoperatorsdk.operator.glue.customresource.glue;
2+
3+
public enum Matcher {
4+
NONE, SSA
5+
}

src/main/java/io/javaoperatorsdk/operator/glue/dependent/GCGenericDependentResource.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,20 @@
33
import io.fabric8.kubernetes.api.model.GenericKubernetesResource;
44
import io.javaoperatorsdk.operator.api.reconciler.dependent.GarbageCollected;
55
import io.javaoperatorsdk.operator.glue.customresource.glue.Glue;
6+
import io.javaoperatorsdk.operator.glue.customresource.glue.Matcher;
67
import io.javaoperatorsdk.operator.glue.templating.GenericTemplateHandler;
78

89
public class GCGenericDependentResource extends GenericDependentResource
910
implements GarbageCollected<Glue> {
1011

1112
public GCGenericDependentResource(GenericTemplateHandler genericTemplateHandler,
1213
GenericKubernetesResource desired, String name,
13-
boolean clusterScoped, boolean useSSAMatcher) {
14-
super(genericTemplateHandler, desired, name, clusterScoped, useSSAMatcher);
14+
boolean clusterScoped, Matcher matcher) {
15+
super(genericTemplateHandler, desired, name, clusterScoped, matcher);
1516
}
1617

1718
public GCGenericDependentResource(GenericTemplateHandler genericTemplateHandler,
18-
String desiredTemplate, String name, boolean clusterScoped, boolean useSSAMatcher) {
19-
super(genericTemplateHandler, desiredTemplate, name, clusterScoped, useSSAMatcher);
19+
String desiredTemplate, String name, boolean clusterScoped, Matcher matcher) {
20+
super(genericTemplateHandler, desiredTemplate, name, clusterScoped, matcher);
2021
}
2122
}

src/main/java/io/javaoperatorsdk/operator/glue/dependent/GenericDependentResource.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import io.javaoperatorsdk.operator.api.reconciler.dependent.Deleter;
77
import io.javaoperatorsdk.operator.glue.Utils;
88
import io.javaoperatorsdk.operator.glue.customresource.glue.Glue;
9+
import io.javaoperatorsdk.operator.glue.customresource.glue.Matcher;
910
import io.javaoperatorsdk.operator.glue.reconciler.glue.GlueReconciler;
1011
import io.javaoperatorsdk.operator.glue.templating.GenericTemplateHandler;
1112
import io.javaoperatorsdk.operator.processing.GroupVersionKind;
@@ -23,31 +24,31 @@ public class GenericDependentResource
2324
private final String desiredTemplate;
2425
private final String name;
2526
private final boolean clusterScoped;
26-
private final boolean useSSAMatcher;
27+
private final Matcher matcher;
2728

2829
// optimize share between instances
2930
private final GenericTemplateHandler genericTemplateHandler;
3031

3132
public GenericDependentResource(GenericTemplateHandler genericTemplateHandler,
3233
GenericKubernetesResource desired, String name,
33-
boolean clusterScoped, boolean useSSAMatcher) {
34+
boolean clusterScoped, Matcher matcher) {
3435
super(new GroupVersionKind(desired.getApiVersion(), desired.getKind()));
3536
this.desired = desired;
36-
this.useSSAMatcher = useSSAMatcher;
37+
this.matcher = matcher;
3738
this.desiredTemplate = null;
3839
this.name = name;
3940
this.clusterScoped = clusterScoped;
4041
this.genericTemplateHandler = genericTemplateHandler;
4142
}
4243

4344
public GenericDependentResource(GenericTemplateHandler genericTemplateHandler,
44-
String desiredTemplate, String name, boolean clusterScoped, boolean useSSAMatcher) {
45+
String desiredTemplate, String name, boolean clusterScoped, Matcher matcher) {
4546
super(new GroupVersionKind(Utils.getApiVersionFromTemplate(desiredTemplate),
4647
Utils.getKindFromTemplate(desiredTemplate)));
4748
this.genericTemplateHandler = genericTemplateHandler;
4849
this.name = name;
4950
this.desiredTemplate = desiredTemplate;
50-
this.useSSAMatcher = useSSAMatcher;
51+
this.matcher = matcher;
5152
this.desired = null;
5253
this.clusterScoped = clusterScoped;
5354
}
@@ -78,7 +79,7 @@ public Result<GenericKubernetesResource> match(GenericKubernetesResource actualR
7879
&& actualResource.getApiVersion().equals("apps/v1")) {
7980
return super.match(actualResource, primary, context);
8081
}
81-
if (useSSAMatcher) {
82+
if (Matcher.SSA.equals(matcher)) {
8283
return super.match(actualResource, primary, context);
8384
} else {
8485
return Result.nonComputed(false);

src/main/java/io/javaoperatorsdk/operator/glue/reconciler/glue/GlueReconciler.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -211,17 +211,17 @@ private GenericDependentResource createDependentResource(DependentResourceSpec s
211211
return spec.getResourceTemplate() != null
212212
? new GCGenericDependentResource(genericTemplateHandler, spec.getResourceTemplate(),
213213
spec.getName(),
214-
spec.isClusterScoped(), spec.isUseSSAMatcher())
214+
spec.isClusterScoped(), spec.getMatcher())
215215
: new GCGenericDependentResource(genericTemplateHandler, spec.getResource(),
216216
spec.getName(),
217-
spec.isClusterScoped(), spec.isUseSSAMatcher());
217+
spec.isClusterScoped(), spec.getMatcher());
218218
} else {
219219
return spec.getResourceTemplate() != null
220220
? new GenericDependentResource(genericTemplateHandler,
221221
spec.getResourceTemplate(), spec.getName(), spec.isClusterScoped(),
222-
spec.isUseSSAMatcher())
222+
spec.getMatcher())
223223
: new GenericDependentResource(genericTemplateHandler,
224-
spec.getResource(), spec.getName(), spec.isClusterScoped(), spec.isUseSSAMatcher());
224+
spec.getResource(), spec.getName(), spec.isClusterScoped(), spec.getMatcher());
225225
}
226226
}
227227

src/test/java/io/javaoperatorsdk/operator/glue/GlueTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import io.javaoperatorsdk.operator.glue.reconciler.ValidationAndErrorHandler;
2323
import io.quarkus.test.junit.QuarkusTest;
2424

25+
import static io.javaoperatorsdk.operator.glue.TestUtils.INITIAL_RECONCILE_WAIT_TIMEOUT;
2526
import static org.assertj.core.api.Assertions.assertThat;
2627
import static org.awaitility.Awaitility.await;
2728

@@ -354,6 +355,19 @@ void pathRelatedResourceStatus(String glueFileName) {
354355
});
355356
}
356357

358+
@Test
359+
void customizeMatcher() {
360+
var glue = createGlue("/glue/SimpleNotUseSSA.yaml");
361+
362+
await().pollDelay(INITIAL_RECONCILE_WAIT_TIMEOUT).untilAsserted(() -> {
363+
assertThat(get(ConfigMap.class, "simple-glue-no-ssa-configmap")).isNotNull();
364+
});
365+
delete(glue);
366+
await().pollDelay(INITIAL_RECONCILE_WAIT_TIMEOUT).untilAsserted(() -> {
367+
assertThat(get(ConfigMap.class, "simple-glue-no-ssa-configmap")).isNull();
368+
});
369+
}
370+
357371
private List<Glue> testWorkflowList(int num) {
358372
List<Glue> res = new ArrayList<>();
359373
IntStream.range(0, num).forEach(index -> {
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# Invalid GLUE, presents resources with non-unique name
2+
apiVersion: io.javaoperatorsdk.operator.glue/v1beta1
3+
kind: Glue
4+
metadata:
5+
name: simple-glue-no-ssa
6+
spec:
7+
childResources:
8+
- name: configMap
9+
matcher: NONE
10+
resource:
11+
apiVersion: v1
12+
kind: ConfigMap
13+
metadata:
14+
name: simple-glue-no-ssa-configmap
15+
data:
16+
key: "value1"

0 commit comments

Comments
 (0)