Skip to content

Commit fd4da2f

Browse files
authored
feat: add a mapper that is based on owner reference kind (#1980)
1 parent 0cadef0 commit fd4da2f

File tree

1 file changed

+23
-0
lines changed
  • operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer

1 file changed

+23
-0
lines changed

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.Collections;
44
import java.util.Set;
5+
import java.util.stream.Collectors;
56

67
import io.fabric8.kubernetes.api.model.HasMetadata;
78
import io.javaoperatorsdk.operator.processing.event.ResourceID;
@@ -93,4 +94,26 @@ public static ResourceID fromString(String cacheKey) {
9394
throw new IllegalArgumentException("Cannot extract a ResourceID from " + cacheKey);
9495
}
9596
}
97+
98+
/**
99+
* Produces a mapper that will associate a secondary resource with all owners of the primary type.
100+
*/
101+
public static <OWNER extends HasMetadata, T extends HasMetadata> SecondaryToPrimaryMapper<T> fromOwnerType(
102+
Class<OWNER> clazz) {
103+
String kind = HasMetadata.getKind(clazz);
104+
return resource -> {
105+
var meta = resource.getMetadata();
106+
if (meta == null) {
107+
return Set.of();
108+
}
109+
var owners = meta.getOwnerReferences();
110+
if (owners == null || owners.isEmpty()) {
111+
return Set.of();
112+
}
113+
return owners.stream()
114+
.filter(it -> kind.equals(it.getKind()))
115+
.map(it -> new ResourceID(it.getName(), resource.getMetadata().getNamespace()))
116+
.collect(Collectors.toSet());
117+
};
118+
}
96119
}

0 commit comments

Comments
 (0)