Skip to content

Commit e24fa18

Browse files
committed
feat: retrieve id instead of associated secondary
1 parent 67de799 commit e24fa18

File tree

7 files changed

+45
-25
lines changed

7 files changed

+45
-25
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/dependent/DefaultDependentResourceConfiguration.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import io.fabric8.kubernetes.api.model.HasMetadata;
66
import io.javaoperatorsdk.operator.api.config.ConfigurationService;
77
import io.javaoperatorsdk.operator.api.config.DefaultResourceConfiguration;
8-
import io.javaoperatorsdk.operator.processing.event.source.AssociatedSecondaryRetriever;
8+
import io.javaoperatorsdk.operator.processing.event.source.AssociatedSecondaryIdentifier;
99
import io.javaoperatorsdk.operator.processing.event.source.PrimaryResourcesRetriever;
1010

1111
public class DefaultDependentResourceConfiguration<R extends HasMetadata, P extends HasMetadata>
@@ -15,14 +15,14 @@ public class DefaultDependentResourceConfiguration<R extends HasMetadata, P exte
1515
private final boolean updatable;
1616
private final boolean owned;
1717
private final PrimaryResourcesRetriever<R, P> associatedPrimaries;
18-
private final AssociatedSecondaryRetriever<R, P> associatedSecondary;
18+
private final AssociatedSecondaryIdentifier<P> associatedSecondary;
1919
private final boolean skipUpdateIfUnchanged;
2020

2121
public DefaultDependentResourceConfiguration(String crdName, Class<R> resourceClass,
2222
Set<String> namespaces, String labelSelector,
2323
ConfigurationService service, boolean creatable, boolean updatable, boolean owned,
2424
PrimaryResourcesRetriever<R, P> associatedPrimaries,
25-
AssociatedSecondaryRetriever<R, P> associatedSecondary, boolean skipUpdateIfUnchanged) {
25+
AssociatedSecondaryIdentifier<P> associatedSecondary, boolean skipUpdateIfUnchanged) {
2626
super(crdName, resourceClass, namespaces, labelSelector, service);
2727
this.creatable = creatable;
2828
this.updatable = updatable;
@@ -53,7 +53,7 @@ public PrimaryResourcesRetriever<R, P> getPrimaryResourcesRetriever() {
5353
}
5454

5555
@Override
56-
public AssociatedSecondaryRetriever<R, P> getAssociatedResourceRetriever() {
56+
public AssociatedSecondaryIdentifier<P> getAssociatedResourceIdentifier() {
5757
return associatedSecondary;
5858
}
5959

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/dependent/DependentResourceConfiguration.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import io.fabric8.kubernetes.api.model.HasMetadata;
44
import io.javaoperatorsdk.operator.api.config.ResourceConfiguration;
5+
import io.javaoperatorsdk.operator.processing.event.source.AssociatedSecondaryIdentifier;
56
import io.javaoperatorsdk.operator.processing.event.source.AssociatedSecondaryRetriever;
67
import io.javaoperatorsdk.operator.processing.event.source.Mappers;
78
import io.javaoperatorsdk.operator.processing.event.source.PrimaryResourcesRetriever;
@@ -29,7 +30,16 @@ default PrimaryResourcesRetriever<R, P> getPrimaryResourcesRetriever() {
2930
return Mappers.fromOwnerReference();
3031
}
3132

32-
AssociatedSecondaryRetriever<R, P> getAssociatedResourceRetriever();
33+
default AssociatedSecondaryIdentifier<P> getAssociatedResourceIdentifier() {
34+
return Mappers.sameNameAndNamespace();
35+
}
36+
37+
default AssociatedSecondaryRetriever<R, P> getAssociatedResourceRetriever() {
38+
return (primary, registry) -> registry.getResourceEventSourceFor(getResourceClass())
39+
.getResourceCache()
40+
.get(getAssociatedResourceIdentifier().associatedSecondaryID(primary, registry))
41+
.orElse(null);
42+
}
3343

3444
default boolean skipUpdateIfUnchanged() {
3545
return true;

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/DependentResourceConfiguration.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
import io.fabric8.kubernetes.api.model.HasMetadata;
66
import io.javaoperatorsdk.operator.processing.event.ResourceID;
7-
import io.javaoperatorsdk.operator.processing.event.source.AssociatedSecondaryRetriever;
7+
import io.javaoperatorsdk.operator.processing.event.source.AssociatedSecondaryIdentifier;
88
import io.javaoperatorsdk.operator.processing.event.source.EventSourceRegistry;
99
import io.javaoperatorsdk.operator.processing.event.source.PrimaryResourcesRetriever;
1010
import io.javaoperatorsdk.operator.processing.event.source.ResourceCache;
@@ -34,7 +34,7 @@
3434

3535
Class<? extends PrimaryResourcesRetriever> associatedPrimariesRetriever() default DEFAULT_PRIMARIES_RETRIEVER.class;
3636

37-
Class<? extends AssociatedSecondaryRetriever> associatedSecondaryRetriever() default DEFAULT_SECONDARY_RETRIEVER.class;
37+
Class<? extends AssociatedSecondaryIdentifier> associatedSecondaryIdentifier() default DEFAULT_SECONDARY_IDENTIFIER.class;
3838

3939
boolean skipUpdateIfUnchanged() default SKIP_UPDATE_DEFAULT;
4040

@@ -99,11 +99,11 @@ public Set<ResourceID> associatedPrimaryResources(HasMetadata dependentResource,
9999
}
100100
}
101101

102-
final class DEFAULT_SECONDARY_RETRIEVER
103-
implements AssociatedSecondaryRetriever<HasMetadata, HasMetadata> {
102+
final class DEFAULT_SECONDARY_IDENTIFIER implements AssociatedSecondaryIdentifier<HasMetadata> {
104103

105104
@Override
106-
public HasMetadata associatedSecondary(HasMetadata primary, EventSourceRegistry registry) {
105+
public ResourceID associatedSecondaryID(HasMetadata primary,
106+
EventSourceRegistry<HasMetadata> registry) {
107107
return null;
108108
}
109109
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package io.javaoperatorsdk.operator.processing.event.source;
2+
3+
import io.fabric8.kubernetes.api.model.HasMetadata;
4+
import io.javaoperatorsdk.operator.processing.event.ResourceID;
5+
6+
@FunctionalInterface
7+
public interface AssociatedSecondaryIdentifier<P extends HasMetadata> {
8+
ResourceID associatedSecondaryID(P primary, EventSourceRegistry<P> registry);
9+
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88

99
public class Mappers {
1010

11+
public static <P extends HasMetadata> AssociatedSecondaryIdentifier<P> sameNameAndNamespace() {
12+
return (primary, registry) -> ResourceID.fromResource(primary);
13+
}
14+
1115
public static <T extends HasMetadata, P extends HasMetadata> PrimaryResourcesRetriever<T, P> fromAnnotation(
1216
String nameKey) {
1317
return fromMetadata(nameKey, null, false);

operator-framework/src/main/java/io/javaoperatorsdk/operator/config/runtime/AnnotationConfiguration.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
1818
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResourceConfiguration;
1919
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResourceConfiguration.DEFAULT_PRIMARIES_RETRIEVER;
20-
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResourceConfiguration.DEFAULT_SECONDARY_RETRIEVER;
21-
import io.javaoperatorsdk.operator.processing.event.source.AssociatedSecondaryRetriever;
20+
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResourceConfiguration.DEFAULT_SECONDARY_IDENTIFIER;
21+
import io.javaoperatorsdk.operator.processing.event.source.AssociatedSecondaryIdentifier;
2222
import io.javaoperatorsdk.operator.processing.event.source.PrimaryResourcesRetriever;
2323
import io.javaoperatorsdk.operator.processing.event.source.ResourceEventFilter;
2424
import io.javaoperatorsdk.operator.processing.event.source.ResourceEventFilters;
@@ -136,10 +136,10 @@ public List<? extends DependentResource> getDependentResources() {
136136
valueIfPresentOrNull(
137137
dependentConfig, DependentResourceConfiguration::associatedPrimariesRetriever,
138138
DEFAULT_PRIMARIES_RETRIEVER.class);
139-
final AssociatedSecondaryRetriever secondaryMapper =
139+
final AssociatedSecondaryIdentifier secondaryMapper =
140140
valueIfPresentOrNull(
141-
dependentConfig, DependentResourceConfiguration::associatedSecondaryRetriever,
142-
DEFAULT_SECONDARY_RETRIEVER.class);
141+
dependentConfig, DependentResourceConfiguration::associatedSecondaryIdentifier,
142+
DEFAULT_SECONDARY_IDENTIFIER.class);
143143

144144

145145
final DefaultDependentResourceConfiguration configuration =

sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/WebappReconciler.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@
2525
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
2626
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResourceConfiguration;
2727
import io.javaoperatorsdk.operator.processing.event.ResourceID;
28-
import io.javaoperatorsdk.operator.processing.event.source.AssociatedSecondaryRetriever;
28+
import io.javaoperatorsdk.operator.processing.event.source.AssociatedSecondaryIdentifier;
2929
import io.javaoperatorsdk.operator.processing.event.source.EventSourceRegistry;
3030
import io.javaoperatorsdk.operator.processing.event.source.PrimaryResourcesRetriever;
31-
import io.javaoperatorsdk.operator.sample.WebappReconciler.TomcatRetriever;
31+
import io.javaoperatorsdk.operator.sample.WebappReconciler.TomcatIdentifier;
3232
import io.javaoperatorsdk.operator.sample.WebappReconciler.WebappRetriever;
3333

3434
import okhttp3.Response;
@@ -37,7 +37,7 @@
3737
dependents = @DependentResourceConfiguration(
3838
creatable = false, resourceType = Tomcat.class,
3939
associatedPrimariesRetriever = WebappRetriever.class,
40-
associatedSecondaryRetriever = TomcatRetriever.class))
40+
associatedSecondaryIdentifier = TomcatIdentifier.class))
4141
public class WebappReconciler implements Reconciler<Webapp> {
4242

4343
private KubernetesClient kubernetesClient;
@@ -63,13 +63,10 @@ public Set<ResourceID> associatedPrimaryResources(Tomcat t,
6363
}
6464
}
6565

66-
public static class TomcatRetriever implements AssociatedSecondaryRetriever<Tomcat, Webapp> {
67-
66+
public static class TomcatIdentifier implements AssociatedSecondaryIdentifier<Webapp> {
6867
@Override
69-
public Tomcat associatedSecondary(Webapp primary, EventSourceRegistry<Webapp> registry) {
70-
return registry.getResourceEventSourceFor(Tomcat.class).getResourceCache()
71-
.get(new ResourceID(primary.getSpec().getTomcat(), primary.getMetadata().getNamespace()))
72-
.orElse(null);
68+
public ResourceID associatedSecondaryID(Webapp primary, EventSourceRegistry<Webapp> registry) {
69+
return new ResourceID(primary.getSpec().getTomcat(), primary.getMetadata().getNamespace());
7370
}
7471
}
7572

@@ -120,7 +117,7 @@ public UpdateControl<Webapp> reconcile(Webapp webapp, Context<Webapp> context) {
120117
}
121118

122119
@Override
123-
public DeleteControl cleanup(Webapp webapp, Context context) {
120+
public DeleteControl cleanup(Webapp webapp, Context<Webapp> context) {
124121

125122
String[] command = new String[] {"rm", "/data/" + webapp.getSpec().getContextPath() + ".war"};
126123
String[] commandStatusInAllPods = executeCommandInAllPods(kubernetesClient, webapp, command);

0 commit comments

Comments
 (0)