Skip to content

Commit abebe8b

Browse files
committed
fix: apiVersion match for standard K8s resources
The HasMetadata.getApiVersion(primaryResourceType) method return "/v1" for the ConfigMap type. Since the K8s owner reference uses "v1" instead, the secondary resource of a primary ConfigMap will not be tracked correctly. Proposed fix for #2723 Signed-off-by: Mathias Nicolajsen Kjaergaard <[email protected]>
1 parent e764a11 commit abebe8b

File tree

2 files changed

+27
-1
lines changed
  • operator-framework-core/src
    • main/java/io/javaoperatorsdk/operator/processing/event/source/informer
    • test/java/io/javaoperatorsdk/operator/processing/event/source/informer

2 files changed

+27
-1
lines changed

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,10 @@ public static <T extends HasMetadata> SecondaryToPrimaryMapper<T> fromOwnerRefer
8383

8484
public static <T extends HasMetadata> SecondaryToPrimaryMapper<T> fromOwnerReferences(
8585
String apiVersion, String kind, boolean clusterScope) {
86+
String correctApiVersion = apiVersion.startsWith("/") ? apiVersion.substring(1) : apiVersion;
8687
return resource ->
8788
resource.getMetadata().getOwnerReferences().stream()
88-
.filter(r -> r.getKind().equals(kind) && r.getApiVersion().equals(apiVersion))
89+
.filter(r -> r.getKind().equals(kind) && r.getApiVersion().equals(correctApiVersion))
8990
.map(or -> ResourceID.fromOwnerReference(resource, or, clusterScope))
9091
.collect(Collectors.toSet());
9192
}

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/MappersTest.java

+25
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,31 @@ void secondaryToPrimaryMapperFromOwnerReference() {
2929
assertThat(res).contains(ResourceID.fromResource(primary));
3030
}
3131

32+
@Test
33+
void secondaryToPrimaryMapperFromOwnerReferenceWhereGroupIdIsEmpty() {
34+
var primary =
35+
new ConfigMapBuilder()
36+
.withNewMetadata()
37+
.withName("test")
38+
.withNamespace("default")
39+
.endMetadata()
40+
.build();
41+
primary.getMetadata().setUid(UUID.randomUUID().toString());
42+
var secondary =
43+
new ConfigMapBuilder()
44+
.withMetadata(
45+
new ObjectMetaBuilder()
46+
.withName("test1")
47+
.withNamespace(primary.getMetadata().getNamespace())
48+
.build())
49+
.build();
50+
secondary.addOwnerReference(primary);
51+
52+
var res = Mappers.fromOwnerReferences(ConfigMap.class).toPrimaryResourceIDs(secondary);
53+
54+
assertThat(res).contains(ResourceID.fromResource(primary));
55+
}
56+
3257
@Test
3358
void secondaryToPrimaryMapperFromOwnerReferenceFiltersByType() {
3459
var primary = TestUtils.testCustomResource();

0 commit comments

Comments
 (0)