Skip to content

Commit d9de99a

Browse files
committed
updating the integration test
also testing the exclusion in the ssa matching
1 parent 572814f commit d9de99a

File tree

4 files changed

+45
-27
lines changed

4 files changed

+45
-27
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ public R update(R actual, R target, P primary, Context<P> context) {
150150
void addPreviousAnnotation(String resourceVersion, HasMetadata target) {
151151
String id = ((InformerEventSource<HasMetadata, HasMetadata>) eventSource().orElseThrow()).getId();
152152
target.getMetadata().getAnnotations().put(PREVIOUS_ANNOTATION_KEY,
153-
id + resourceVersion != null ? ("," + resourceVersion) : "");
153+
id + Optional.ofNullable(resourceVersion).map(rv -> "," + rv).orElse(""));
154154
}
155155

156156
@Override

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

+4-2
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
// see also: https://kubernetes.slack.com/archives/C0123CNN8F3/p1686141087220719
4141
public class SSABasedGenericKubernetesResourceMatcher<R extends HasMetadata> {
4242

43+
private static final String ANNOTATIONS_KEY = "annotations";
4344
@SuppressWarnings("rawtypes")
4445
private static final SSABasedGenericKubernetesResourceMatcher INSTANCE =
4546
new SSABasedGenericKubernetesResourceMatcher<>();
@@ -101,9 +102,10 @@ public boolean matches(R actual, R desired, Context<?> context) {
101102
return prunedActual.equals(desiredMap);
102103
}
103104

104-
private void removeSDKAnnotations(HashMap<String, Object> prunedActual) {
105+
@SuppressWarnings("unchecked")
106+
private static void removeSDKAnnotations(HashMap<String, Object> prunedActual) {
105107
Optional.ofNullable(((Map<String, Object>) prunedActual.get(METADATA_KEY)))
106-
.ifPresent(m -> m.computeIfPresent("annotations",
108+
.ifPresent(m -> m.computeIfPresent(ANNOTATIONS_KEY,
107109
(k, v) -> {
108110
var annotations = (Map<String, Object>) v;
109111
annotations.remove(KubernetesDependentResource.PREVIOUS_ANNOTATION_KEY);

operator-framework-core/src/test/resources/io/javaoperatorsdk/operator/processing/dependent/kubernetes/deployment-with-managed-fields.yaml

+5
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,17 @@ kind: Deployment
33
metadata:
44
annotations:
55
deployment.kubernetes.io/revision: "1"
6+
javaoperatorsdk.io/previous: "abc,400"
67
creationTimestamp: "2023-06-01T08:43:47Z"
78
generation: 1
89
managedFields:
910
- apiVersion: apps/v1
1011
fieldsType: FieldsV1
1112
fieldsV1:
13+
f:metadata:
14+
f:annotations:
15+
.: {}
16+
f:javaoperatorsdk.io/previous: {}
1217
f:spec:
1318
f:progressDeadlineSeconds: {}
1419
f:replicas: {}

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/createupdateeventfilter/CreateUpdateEventFilterTestReconciler.java

+35-24
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
package io.javaoperatorsdk.operator.sample.createupdateeventfilter;
22

3-
import java.util.HashMap;
4-
import java.util.Map;
5-
import java.util.Objects;
6-
import java.util.concurrent.atomic.AtomicInteger;
7-
83
import io.fabric8.kubernetes.api.model.ConfigMap;
94
import io.fabric8.kubernetes.api.model.ObjectMeta;
105
import io.fabric8.kubernetes.client.KubernetesClient;
@@ -16,20 +11,46 @@
1611
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
1712
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
1813
import io.javaoperatorsdk.operator.junit.KubernetesClientAware;
19-
import io.javaoperatorsdk.operator.processing.event.ResourceID;
14+
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource;
2015
import io.javaoperatorsdk.operator.processing.event.source.EventSource;
2116
import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
2217

18+
import java.util.HashMap;
19+
import java.util.Map;
20+
import java.util.Objects;
21+
import java.util.concurrent.atomic.AtomicInteger;
22+
2323
@ControllerConfiguration
2424
public class CreateUpdateEventFilterTestReconciler
2525
implements Reconciler<CreateUpdateEventFilterTestCustomResource>,
2626
EventSourceInitializer<CreateUpdateEventFilterTestCustomResource>,
2727
KubernetesClientAware {
2828

29+
private static final class DirectConfigMapDependentResource
30+
extends CRUDKubernetesDependentResource<ConfigMap, CreateUpdateEventFilterTestCustomResource> {
31+
32+
private ConfigMap desired;
33+
34+
private DirectConfigMapDependentResource(Class<ConfigMap> resourceType) {
35+
super(resourceType);
36+
}
37+
38+
@Override
39+
protected ConfigMap desired(CreateUpdateEventFilterTestCustomResource primary, Context<CreateUpdateEventFilterTestCustomResource> context) {
40+
return desired;
41+
}
42+
43+
@Override
44+
public void setEventSource(io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource<ConfigMap,CreateUpdateEventFilterTestCustomResource> eventSource) {
45+
super.setEventSource(eventSource);
46+
}
47+
}
48+
2949
public static final String CONFIG_MAP_TEST_DATA_KEY = "key";
3050
private KubernetesClient client;
3151
private final AtomicInteger numberOfExecutions = new AtomicInteger(0);
3252
private InformerEventSource<ConfigMap, CreateUpdateEventFilterTestCustomResource> informerEventSource;
53+
private DirectConfigMapDependentResource configMapDR = new DirectConfigMapDependentResource(ConfigMap.class);
3354

3455
@Override
3556
public UpdateControl<CreateUpdateEventFilterTestCustomResource> reconcile(
@@ -44,28 +65,14 @@ public UpdateControl<CreateUpdateEventFilterTestCustomResource> reconcile(
4465
.withName(resource.getMetadata().getName())
4566
.get();
4667
if (configMap == null) {
47-
var configMapToCreate = createConfigMap(resource);
48-
final var resourceID = ResourceID.fromResource(configMapToCreate);
49-
configMap =
50-
client
51-
.configMaps()
52-
.inNamespace(resource.getMetadata().getNamespace())
53-
.resource(configMapToCreate)
54-
.create();
55-
informerEventSource.handleRecentResourceCreate(resourceID, configMap);
68+
configMapDR.desired = createConfigMap(resource);
69+
configMapDR.reconcile(resource, context);
5670
} else {
57-
ResourceID resourceID = ResourceID.fromResource(configMap);
5871
if (!Objects.equals(
5972
configMap.getData().get(CONFIG_MAP_TEST_DATA_KEY), resource.getSpec().getValue())) {
6073
configMap.getData().put(CONFIG_MAP_TEST_DATA_KEY, resource.getSpec().getValue());
61-
var newConfigMap =
62-
client
63-
.configMaps()
64-
.inNamespace(resource.getMetadata().getNamespace())
65-
.resource(configMap)
66-
.replace();
67-
informerEventSource.handleRecentResourceUpdate(resourceID,
68-
newConfigMap, configMap);
74+
configMapDR.desired = configMap;
75+
configMapDR.reconcile(resource, context);
6976
}
7077
}
7178
return UpdateControl.noUpdate();
@@ -94,6 +101,10 @@ public Map<String, EventSource> prepareEventSources(
94101
.build();
95102
informerEventSource =
96103
new InformerEventSource<>(informerConfiguration, client);
104+
105+
this.configMapDR.setKubernetesClient(context.getClient());
106+
this.configMapDR.setEventSource(informerEventSource);
107+
97108
return EventSourceInitializer.nameEventSources(informerEventSource);
98109
}
99110

0 commit comments

Comments
 (0)