Skip to content

Commit eab3bf0

Browse files
committed
fix: make primary type computation overridable
Overriding getPrimaryResourceType should allow to make things work even in deeper hierarchies. Signed-off-by: Chris Laprun <[email protected]>
1 parent 89acf8d commit eab3bf0

File tree

5 files changed

+32
-7
lines changed

5 files changed

+32
-7
lines changed

Diff for: operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesDependentResource.java

+9-1
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22

33
import io.fabric8.kubernetes.api.model.GenericKubernetesResource;
44
import io.fabric8.kubernetes.api.model.HasMetadata;
5+
import io.javaoperatorsdk.operator.api.config.Utils;
56
import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration;
67
import io.javaoperatorsdk.operator.processing.GroupVersionKind;
78

89
public class GenericKubernetesDependentResource<P extends HasMetadata>
910
extends KubernetesDependentResource<GenericKubernetesResource, P> {
1011

11-
private GroupVersionKind groupVersionKind;
12+
private final GroupVersionKind groupVersionKind;
1213

1314
public GenericKubernetesDependentResource(GroupVersionKind groupVersionKind) {
1415
super(GenericKubernetesResource.class);
@@ -19,6 +20,13 @@ protected InformerConfiguration.InformerConfigurationBuilder<GenericKubernetesRe
1920
return InformerConfiguration.from(groupVersionKind);
2021
}
2122

23+
@SuppressWarnings("unchecked")
24+
@Override
25+
protected Class<P> getPrimaryResourceType() {
26+
return (Class<P>) Utils.getFirstTypeArgumentFromExtendedClass(getClass());
27+
}
28+
29+
@SuppressWarnings("unused")
2230
public GroupVersionKind getGroupVersionKind() {
2331
return groupVersionKind;
2432
}

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

+8-6
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@
3535
converter = KubernetesDependentConverter.class)
3636
public abstract class KubernetesDependentResource<R extends HasMetadata, P extends HasMetadata>
3737
extends AbstractEventSourceHolderDependentResource<R, P, InformerEventSource<R, P>>
38-
implements DependentResourceConfigurator<KubernetesDependentResourceConfig<R>> {
39-
38+
implements DependentResourceConfigurator<KubernetesDependentResourceConfig<R>>,
39+
DependentResource<R, P> {
4040
private static final Logger log = LoggerFactory.getLogger(KubernetesDependentResource.class);
4141
private final boolean garbageCollected = this instanceof GarbageCollected;
4242
private final boolean usingCustomResourceUpdateMatcher = this instanceof ResourceUpdaterMatcher;
@@ -47,12 +47,9 @@ public abstract class KubernetesDependentResource<R extends HasMetadata, P exten
4747
private final boolean clustered;
4848
private KubernetesDependentResourceConfig<R> kubernetesDependentResourceConfig;
4949

50-
5150
public KubernetesDependentResource(Class<R> resourceType) {
5251
super(resourceType);
53-
final var primaryResourceType =
54-
Utils.getTypeArgumentFromSuperClassOrInterfaceByIndex(getClass(), DependentResource.class,
55-
1);
52+
final var primaryResourceType = getPrimaryResourceType();
5653
clustered = !Namespaced.class.isAssignableFrom(primaryResourceType);
5754
}
5855

@@ -61,6 +58,11 @@ protected KubernetesDependentResource(Class<R> resourceType, boolean primaryIsCl
6158
clustered = primaryIsClustered;
6259
}
6360

61+
@SuppressWarnings("unchecked")
62+
protected Class<P> getPrimaryResourceType() {
63+
return (Class<P>) Utils.getTypeArgumentFromExtendedClassByIndex(getClass(), 1);
64+
}
65+
6466
@SuppressWarnings("unchecked")
6567
@Override
6668
public void configureWith(KubernetesDependentResourceConfig<R> config) {

Diff for: operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/AbstractWorkflowExecutorTest.java

+5
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ public TestDependent(String name) {
4242
this.name = name;
4343
}
4444

45+
@Override
46+
protected Class<TestCustomResource> getPrimaryResourceType() {
47+
return TestCustomResource.class;
48+
}
49+
4550
@Override
4651
public ReconcileResult<ConfigMap> reconcile(TestCustomResource primary,
4752
Context<TestCustomResource> context) {

Diff for: operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/bulkdependent/ConfigMapDeleterBulkDependentResource.java

+5
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ public ConfigMapDeleterBulkDependentResource() {
3434
super(ConfigMap.class);
3535
}
3636

37+
@Override
38+
protected Class<BulkDependentTestCustomResource> getPrimaryResourceType() {
39+
return BulkDependentTestCustomResource.class;
40+
}
41+
3742
@Override
3843
public Map<String, ConfigMap> desiredResources(BulkDependentTestCustomResource primary,
3944
Context<BulkDependentTestCustomResource> context) {

Diff for: operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/BaseDependentResource.java

+5
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ public BaseDependentResource(Class<R> resourceType, String component) {
1616
this.component = component;
1717
}
1818

19+
@Override
20+
protected Class<ComplexDependentCustomResource> getPrimaryResourceType() {
21+
return ComplexDependentCustomResource.class;
22+
}
23+
1924
protected String name(ComplexDependentCustomResource primary) {
2025
return String.format("%s-%s", component, primary.getSpec().getProjectId());
2126
}

0 commit comments

Comments
 (0)