Skip to content

Commit e0f61e7

Browse files
committed
[WIP] feat: external id provider for external dependent resources
Signed-off-by: Attila Mészáros <[email protected]>
1 parent 4b533c7 commit e0f61e7

File tree

3 files changed

+38
-1
lines changed

3 files changed

+38
-1
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractExternalDependentResource.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package io.javaoperatorsdk.operator.processing.dependent;
22

3+
import java.util.List;
4+
import java.util.Optional;
5+
import java.util.Set;
6+
37
import io.fabric8.kubernetes.api.model.HasMetadata;
48
import io.javaoperatorsdk.operator.api.reconciler.Context;
59
import io.javaoperatorsdk.operator.api.reconciler.dependent.RecentOperationCacheFiller;
@@ -106,4 +110,24 @@ public void handleDeleteTargetResource(P primary, R resource, String key, Contex
106110
protected InformerEventSource getExternalStateEventSource() {
107111
return externalStateEventSource;
108112
}
113+
114+
@Override
115+
protected Optional<R> selectTargetSecondaryResource(
116+
Set<R> secondaryResources, P primary, Context<P> context) {
117+
R desired = desired(primary, context);
118+
List<R> targetResources;
119+
if (desired instanceof ExternalDependentIDProvider<?> desiredWithId) {
120+
targetResources =
121+
secondaryResources.stream()
122+
.filter(r -> ((ExternalDependentIDProvider<?>) r).id().equals(desiredWithId.id()))
123+
.toList();
124+
} else {
125+
targetResources = secondaryResources.stream().filter(r -> r.equals(desired)).toList();
126+
}
127+
if (targetResources.size() > 1) {
128+
throw new IllegalStateException(
129+
"More than one secondary resource related to primary: " + targetResources);
130+
}
131+
return targetResources.isEmpty() ? Optional.empty() : Optional.of(targetResources.get(0));
132+
}
109133
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package io.javaoperatorsdk.operator.processing.dependent;
2+
3+
public interface ExternalDependentIDProvider<T> {
4+
5+
T id();
6+
}

sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/schema/Schema.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import java.io.Serializable;
44
import java.util.Objects;
55

6-
public class Schema implements Serializable {
6+
import io.javaoperatorsdk.operator.processing.dependent.ExternalDependentIDProvider;
7+
8+
public class Schema implements Serializable, ExternalDependentIDProvider<String> {
79

810
private final String name;
911
private final String characterSet;
@@ -38,4 +40,9 @@ public int hashCode() {
3840
public String toString() {
3941
return "Schema{" + "name='" + name + '\'' + ", characterSet='" + characterSet + '\'' + '}';
4042
}
43+
44+
@Override
45+
public String id() {
46+
return name;
47+
}
4148
}

0 commit comments

Comments
 (0)