Skip to content

Commit 7f07e1a

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 operator-framework#2723
1 parent e764a11 commit 7f07e1a

File tree

2 files changed

+24
-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

+24
-1
lines changed

Diff for: 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
}

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

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

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

0 commit comments

Comments
 (0)