Skip to content

Commit 0d198cc

Browse files
committed
pure resource handling test
Signed-off-by: Attila Mészáros <csviri@gmail.com>
1 parent 899e0e4 commit 0d198cc

File tree

6 files changed

+139
-6
lines changed

6 files changed

+139
-6
lines changed

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,9 @@ static <R extends HasMetadata> InformerConfigurationBuilder<R> from(
275275
return new InformerConfigurationBuilder<>(resourceClass);
276276
}
277277

278+
/**
279+
* * For the case when want to use {@link GenericKubernetesResource}
280+
*/
278281
static <R extends HasMetadata> InformerConfigurationBuilder<R> from(
279282
GroupVersionKind groupVersionKind) {
280283
return new InformerConfigurationBuilder<>(groupVersionKind);
@@ -295,10 +298,13 @@ static <R extends HasMetadata> InformerConfigurationBuilder<R> from(
295298
.withNamespacesInheritedFromController(eventSourceContext);
296299
}
297300

301+
/**
302+
* * For the case when want to use {@link GenericKubernetesResource}
303+
*/
298304
@SuppressWarnings("unchecked")
299-
static <R extends HasMetadata> InformerConfigurationBuilder<R> from(
305+
static InformerConfigurationBuilder<GenericKubernetesResource> from(
300306
GroupVersionKind groupVersionKind, EventSourceContext<?> eventSourceContext) {
301-
return (InformerConfigurationBuilder<R>) new InformerConfigurationBuilder<>(groupVersionKind)
307+
return new InformerConfigurationBuilder<GenericKubernetesResource>(groupVersionKind)
302308
.withNamespacesInheritedFromController(eventSourceContext);
303309
}
304310

operator-framework/src/test/java/io/javaoperatorsdk/operator/GenericKubernetesDependentManagedIT.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111
public class GenericKubernetesDependentManagedIT
1212
extends GenericKubernetesDependentTestBase<GenericKubernetesDependentManagedCustomResource> {
1313

14-
public static final String INITIAL_DATA = "Initial data";
15-
1614
@RegisterExtension
1715
LocallyRunOperatorExtension extension =
1816
LocallyRunOperatorExtension.builder()

operator-framework/src/test/java/io/javaoperatorsdk/operator/GenericKubernetesDependentTestBase.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.javaoperatorsdk.operator;
22

3+
import java.time.Duration;
4+
35
import org.junit.jupiter.api.Test;
46

57
import io.fabric8.kubernetes.api.model.ConfigMap;
@@ -8,8 +10,6 @@
810
import io.javaoperatorsdk.operator.sample.generickubernetesresource.GenericKubernetesDependentSpec;
911
import io.javaoperatorsdk.operator.sample.generickubernetesresource.generickubernetesdependentstandalone.ConfigMapGenericKubernetesDependent;
1012

11-
import java.time.Duration;
12-
1313
import static org.assertj.core.api.Assertions.assertThat;
1414
import static org.awaitility.Awaitility.await;
1515

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package io.javaoperatorsdk.operator;
2+
3+
import org.junit.jupiter.api.extension.RegisterExtension;
4+
5+
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
6+
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
7+
import io.javaoperatorsdk.operator.sample.generickubernetesresource.GenericKubernetesDependentSpec;
8+
import io.javaoperatorsdk.operator.sample.generickubernetesresource.generickubernetesresourcehandling.GenericKubernetesResourceHandlingCustomResource;
9+
import io.javaoperatorsdk.operator.sample.generickubernetesresource.generickubernetesresourcehandling.GenericKubernetesResourceHandlingReconciler;
10+
11+
public class GenericKubernetesResourceHandlingIT
12+
extends GenericKubernetesDependentTestBase<GenericKubernetesResourceHandlingCustomResource> {
13+
14+
@RegisterExtension
15+
LocallyRunOperatorExtension extension =
16+
LocallyRunOperatorExtension.builder()
17+
.withReconciler(new GenericKubernetesResourceHandlingReconciler())
18+
.build();
19+
20+
@Override
21+
public LocallyRunOperatorExtension extension() {
22+
return extension;
23+
}
24+
25+
@Override
26+
GenericKubernetesResourceHandlingCustomResource testResource(String name, String data) {
27+
var resource = new GenericKubernetesResourceHandlingCustomResource();
28+
resource.setMetadata(new ObjectMetaBuilder()
29+
.withName(name)
30+
.build());
31+
resource.setSpec(new GenericKubernetesDependentSpec());
32+
resource.getSpec().setValue(INITIAL_DATA);
33+
return resource;
34+
}
35+
36+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package io.javaoperatorsdk.operator.sample.generickubernetesresource.generickubernetesresourcehandling;
2+
3+
import io.fabric8.kubernetes.api.model.Namespaced;
4+
import io.fabric8.kubernetes.client.CustomResource;
5+
import io.fabric8.kubernetes.model.annotation.Group;
6+
import io.fabric8.kubernetes.model.annotation.ShortNames;
7+
import io.fabric8.kubernetes.model.annotation.Version;
8+
import io.javaoperatorsdk.operator.sample.generickubernetesresource.GenericKubernetesDependentSpec;
9+
10+
@Group("sample.javaoperatorsdk")
11+
@Version("v1")
12+
@ShortNames("gkrr")
13+
public class GenericKubernetesResourceHandlingCustomResource
14+
extends CustomResource<GenericKubernetesDependentSpec, Void>
15+
implements Namespaced {
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package io.javaoperatorsdk.operator.sample.generickubernetesresource.generickubernetesresourcehandling;
2+
3+
import java.io.IOException;
4+
import java.io.InputStream;
5+
import java.util.HashMap;
6+
import java.util.Map;
7+
8+
import io.fabric8.kubernetes.api.model.GenericKubernetesResource;
9+
import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration;
10+
import io.javaoperatorsdk.operator.api.reconciler.*;
11+
import io.javaoperatorsdk.operator.processing.GroupVersionKind;
12+
import io.javaoperatorsdk.operator.processing.event.source.EventSource;
13+
import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
14+
15+
@ControllerConfiguration
16+
public class GenericKubernetesResourceHandlingReconciler
17+
implements Reconciler<GenericKubernetesResourceHandlingCustomResource>,
18+
EventSourceInitializer<GenericKubernetesResourceHandlingCustomResource> {
19+
20+
21+
public static final String VERSION = "v1";
22+
public static final String KIND = "ConfigMap";
23+
public static final String KEY = "key";
24+
25+
@Override
26+
public UpdateControl<GenericKubernetesResourceHandlingCustomResource> reconcile(
27+
GenericKubernetesResourceHandlingCustomResource primary,
28+
Context<GenericKubernetesResourceHandlingCustomResource> context) {
29+
30+
var secondary = context.getSecondaryResource(GenericKubernetesResource.class);
31+
32+
secondary.ifPresentOrElse(r -> {
33+
var desired = desiredConfigMap(primary, context);
34+
if (!matches(r, desired)) {
35+
context.getClient().genericKubernetesResources(VERSION, KIND).resource(desired).update();
36+
}
37+
}, () -> context.getClient().genericKubernetesResources(VERSION, KIND)
38+
.resource(desiredConfigMap(primary, context)).create());
39+
40+
return UpdateControl.noUpdate();
41+
}
42+
43+
@SuppressWarnings("unchecked")
44+
private boolean matches(GenericKubernetesResource actual, GenericKubernetesResource desired) {
45+
var actualData = (HashMap<String, String>) actual.getAdditionalProperties().get("data");
46+
var desiredData = (HashMap<String, String>) desired.getAdditionalProperties().get("data");
47+
return actualData.equals(desiredData);
48+
}
49+
50+
GenericKubernetesResource desiredConfigMap(
51+
GenericKubernetesResourceHandlingCustomResource primary,
52+
Context<GenericKubernetesResourceHandlingCustomResource> context) {
53+
try (InputStream is = this.getClass().getResourceAsStream("/configmap.yaml")) {
54+
var res = context.getClient().genericKubernetesResources(VERSION, KIND).load(is).item();
55+
res.getMetadata().setName(primary.getMetadata().getName());
56+
res.getMetadata().setNamespace(primary.getMetadata().getNamespace());
57+
Map<String, String> data = (Map<String, String>) res.getAdditionalProperties().get("data");
58+
data.put(KEY, primary.getSpec().getValue());
59+
res.addOwnerReference(primary);
60+
return res;
61+
} catch (IOException e) {
62+
throw new IllegalStateException(e);
63+
}
64+
}
65+
66+
67+
@Override
68+
public Map<String, EventSource> prepareEventSources(
69+
EventSourceContext<GenericKubernetesResourceHandlingCustomResource> context) {
70+
71+
var informerEventSource = new InformerEventSource<>(InformerConfiguration.from(
72+
new GroupVersionKind("", VERSION, KIND), context).build(),
73+
context);
74+
75+
return EventSourceInitializer.nameEventSources(informerEventSource);
76+
}
77+
}

0 commit comments

Comments
 (0)