Skip to content

Commit 2430233

Browse files
committed
IT skeleton
Signed-off-by: Attila Mészáros <csviri@gmail.com>
1 parent e376fa2 commit 2430233

File tree

12 files changed

+155
-10
lines changed

12 files changed

+155
-10
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ protected DefaultResourceConfiguration(Class<R> resourceClass,
3131
ItemStore<R> itemStore, Long informerListLimit) {
3232
this.resourceClass = resourceClass;
3333
this.resourceTypeName = resourceClass.isAssignableFrom(GenericKubernetesResource.class)
34+
// todo better handling?
3435
? GENERIC_KUBERNETES_RESOURCE
3536
: ReconcilerUtils.getResourceTypeName(resourceClass);
3637
this.onAddFilter = onAddFilter;

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerWrapper.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.slf4j.Logger;
1414
import org.slf4j.LoggerFactory;
1515

16+
import io.fabric8.kubernetes.api.model.GenericKubernetesResource;
1617
import io.fabric8.kubernetes.api.model.HasMetadata;
1718
import io.fabric8.kubernetes.client.informers.ExceptionHandler;
1819
import io.fabric8.kubernetes.client.informers.ResourceEventHandler;
@@ -113,6 +114,10 @@ public void start() throws OperatorException {
113114

114115
private String versionedFullResourceName() {
115116
final var apiTypeClass = informer.getApiTypeClass();
117+
// todo better messages handling
118+
if (apiTypeClass.isAssignableFrom(GenericKubernetesResource.class)) {
119+
return "GenericKubernetesResource";
120+
}
116121
return ReconcilerUtils.getResourceTypeNameWithVersion(apiTypeClass);
117122
}
118123

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/ManagedInformerEventSource.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,13 @@ public abstract class ManagedInformerEventSource<R extends HasMetadata, P extend
3333

3434
private static final Logger log = LoggerFactory.getLogger(ManagedInformerEventSource.class);
3535
private InformerManager<R, C> cache;
36-
private boolean parseResourceVersions;
36+
private final boolean parseResourceVersions;
3737
private ConfigurationService configurationService;
38-
private C configuration;
38+
private final C configuration;
3939
private Map<String, Function<R, List<String>>> indexers = new HashMap<>();
4040
protected TemporaryResourceCache<R> temporaryResourceCache;
4141
protected MixedOperation client;
4242

43-
44-
4543
protected ManagedInformerEventSource(
4644
MixedOperation client, C configuration,
4745
boolean parseResourceVersions) {
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package io.javaoperatorsdk.operator;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.junit.jupiter.api.extension.RegisterExtension;
5+
6+
import io.fabric8.kubernetes.api.model.ConfigMap;
7+
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
8+
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
9+
import io.javaoperatorsdk.operator.sample.generickubernetesdependentresourcemanaged.GenericKubernetesDependentManagedCustomResource;
10+
import io.javaoperatorsdk.operator.sample.generickubernetesdependentresourcemanaged.GenericKubernetesDependentManagedReconciler;
11+
import io.javaoperatorsdk.operator.sample.generickubernetesdependentresourcemanaged.GenericKubernetesDependentManagedSpec;
12+
import io.javaoperatorsdk.operator.sample.generickubernetesdependentstandalone.ConfigMapGenericKubernetesDependent;
13+
14+
import static org.assertj.core.api.Assertions.assertThat;
15+
import static org.awaitility.Awaitility.await;
16+
17+
public class GenericKubernetesDependentManagedIT {
18+
19+
public static final String INITIAL_DATA = "Initial data";
20+
21+
@RegisterExtension
22+
LocallyRunOperatorExtension operator =
23+
LocallyRunOperatorExtension.builder()
24+
.withReconciler(new GenericKubernetesDependentManagedReconciler())
25+
.build();
26+
27+
@Test
28+
void testReconcile() {
29+
operator.create(testResource());
30+
31+
await().untilAsserted(() -> {
32+
var cm = operator.get(ConfigMap.class, "test1");
33+
assertThat(cm).isNotNull();
34+
assertThat(cm.getData()).containsEntry(ConfigMapGenericKubernetesDependent.KEY, INITIAL_DATA);
35+
});
36+
}
37+
38+
GenericKubernetesDependentManagedCustomResource testResource() {
39+
var resource = new GenericKubernetesDependentManagedCustomResource();
40+
resource.setMetadata(new ObjectMetaBuilder()
41+
.withName("test1")
42+
.build());
43+
resource.setSpec(new GenericKubernetesDependentManagedSpec());
44+
resource.getSpec().setValue(INITIAL_DATA);
45+
return resource;
46+
}
47+
48+
}

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,9 @@ public class GenericKubernetesDependentStandaloneIT {
2424
@RegisterExtension
2525
LocallyRunOperatorExtension operator =
2626
LocallyRunOperatorExtension.builder()
27-
.withConfigurationService(o -> o.withCloseClientOnStop(false))
2827
.withReconciler(new GenericKubernetesDependentStandaloneReconciler())
2928
.build();
3029

31-
3230
@Test
3331
void testReconcile() {
3432
operator.create(testResource());
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package io.javaoperatorsdk.operator.sample.generickubernetesdependentresourcemanaged;
2+
3+
import java.io.IOException;
4+
import java.io.InputStream;
5+
import java.util.Map;
6+
7+
import io.fabric8.kubernetes.api.model.GenericKubernetesResource;
8+
import io.javaoperatorsdk.operator.api.reconciler.Context;
9+
import io.javaoperatorsdk.operator.api.reconciler.dependent.GarbageCollected;
10+
import io.javaoperatorsdk.operator.processing.GroupVersionKind;
11+
import io.javaoperatorsdk.operator.processing.dependent.Creator;
12+
import io.javaoperatorsdk.operator.processing.dependent.Updater;
13+
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.GenericKubernetesDependentResource;
14+
15+
public class ConfigMapGenericKubernetesDependent extends
16+
GenericKubernetesDependentResource<GenericKubernetesDependentManagedCustomResource>
17+
implements
18+
Creator<GenericKubernetesResource, GenericKubernetesDependentManagedCustomResource>,
19+
Updater<GenericKubernetesResource, GenericKubernetesDependentManagedCustomResource>,
20+
GarbageCollected<GenericKubernetesDependentManagedCustomResource> {
21+
22+
public static final String VERSION = "v1";
23+
public static final String KIND = "ConfigMap";
24+
public static final String KEY = "key";
25+
26+
public ConfigMapGenericKubernetesDependent() {
27+
super(new GroupVersionKind("", VERSION, KIND));
28+
}
29+
30+
@Override
31+
protected GenericKubernetesResource desired(
32+
GenericKubernetesDependentManagedCustomResource primary,
33+
Context<GenericKubernetesDependentManagedCustomResource> context) {
34+
35+
try (InputStream is = this.getClass().getResourceAsStream("/configmap.yaml")) {
36+
var res = context.getClient().genericKubernetesResources(VERSION, KIND).load(is).item();
37+
res.getMetadata().setName(primary.getMetadata().getName());
38+
res.getMetadata().setNamespace(primary.getMetadata().getNamespace());
39+
Map<String, String> data = (Map<String, String>) res.getAdditionalProperties().get("data");
40+
data.put(KEY, primary.getSpec().getValue());
41+
return res;
42+
} catch (IOException e) {
43+
throw new IllegalStateException(e);
44+
}
45+
}
46+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package io.javaoperatorsdk.operator.sample.generickubernetesdependentresourcemanaged;
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+
9+
@Group("sample.javaoperatorsdk")
10+
@Version("v1")
11+
@ShortNames("gkdm")
12+
public class GenericKubernetesDependentManagedCustomResource
13+
extends CustomResource<GenericKubernetesDependentManagedSpec, Void>
14+
implements Namespaced {
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package io.javaoperatorsdk.operator.sample.generickubernetesdependentresourcemanaged;
2+
3+
import io.javaoperatorsdk.operator.api.reconciler.*;
4+
import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
5+
6+
@ControllerConfiguration(
7+
dependents = {@Dependent(type = ConfigMapGenericKubernetesDependent.class)})
8+
public class GenericKubernetesDependentManagedReconciler
9+
implements Reconciler<GenericKubernetesDependentManagedCustomResource> {
10+
11+
@Override
12+
public UpdateControl<GenericKubernetesDependentManagedCustomResource> reconcile(
13+
GenericKubernetesDependentManagedCustomResource resource,
14+
Context<GenericKubernetesDependentManagedCustomResource> context) {
15+
16+
return UpdateControl.<GenericKubernetesDependentManagedCustomResource>noUpdate();
17+
}
18+
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package io.javaoperatorsdk.operator.sample.generickubernetesdependentresourcemanaged;
2+
3+
public class GenericKubernetesDependentManagedSpec {
4+
5+
private String value;
6+
7+
public String getValue() {
8+
return value;
9+
}
10+
11+
public GenericKubernetesDependentManagedSpec setValue(String value) {
12+
this.value = value;
13+
return this;
14+
}
15+
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/generickubernetesdependentstandalone/ConfigMapGenericKubernetesDependent.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import io.fabric8.kubernetes.api.model.GenericKubernetesResource;
88
import io.javaoperatorsdk.operator.api.reconciler.Context;
9-
import io.javaoperatorsdk.operator.api.reconciler.dependent.Deleter;
9+
import io.javaoperatorsdk.operator.api.reconciler.dependent.GarbageCollected;
1010
import io.javaoperatorsdk.operator.processing.GroupVersionKind;
1111
import io.javaoperatorsdk.operator.processing.dependent.Creator;
1212
import io.javaoperatorsdk.operator.processing.dependent.Updater;
@@ -17,7 +17,7 @@ public class ConfigMapGenericKubernetesDependent extends
1717
implements
1818
Creator<GenericKubernetesResource, GenericKubernetesDependentStandaloneCustomResource>,
1919
Updater<GenericKubernetesResource, GenericKubernetesDependentStandaloneCustomResource>,
20-
Deleter<GenericKubernetesDependentStandaloneCustomResource> {
20+
GarbageCollected<GenericKubernetesDependentStandaloneCustomResource> {
2121

2222
public static final String VERSION = "v1";
2323
public static final String KIND = "ConfigMap";
@@ -32,7 +32,7 @@ protected GenericKubernetesResource desired(
3232
GenericKubernetesDependentStandaloneCustomResource primary,
3333
Context<GenericKubernetesDependentStandaloneCustomResource> context) {
3434

35-
try (InputStream is = this.getClass().getResourceAsStream("configmap.yaml")) {
35+
try (InputStream is = this.getClass().getResourceAsStream("/configmap.yaml")) {
3636
var res = context.getClient().genericKubernetesResources(VERSION, KIND).load(is).item();
3737
res.getMetadata().setName(primary.getMetadata().getName());
3838
res.getMetadata().setNamespace(primary.getMetadata().getNamespace());

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/generickubernetesdependentstandalone/GenericKubernetesDependentStandaloneReconciler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public UpdateControl<GenericKubernetesDependentStandaloneCustomResource> reconci
2222

2323
dependent.reconcile(resource, context);
2424

25-
return UpdateControl.noUpdate();
25+
return UpdateControl.<GenericKubernetesDependentStandaloneCustomResource>noUpdate();
2626
}
2727

2828
@Override

0 commit comments

Comments
 (0)