8
8
import org .slf4j .LoggerFactory ;
9
9
10
10
import io .fabric8 .kubernetes .api .model .HasMetadata ;
11
+ import io .fabric8 .kubernetes .api .model .Namespaced ;
11
12
import io .fabric8 .kubernetes .client .dsl .Resource ;
12
13
import io .javaoperatorsdk .operator .OperatorException ;
13
14
import io .javaoperatorsdk .operator .ReconcilerUtils ;
15
+ import io .javaoperatorsdk .operator .api .config .Utils ;
14
16
import io .javaoperatorsdk .operator .api .config .dependent .Configured ;
15
17
import io .javaoperatorsdk .operator .api .config .informer .InformerConfiguration ;
16
18
import io .javaoperatorsdk .operator .api .reconciler .Constants ;
17
19
import io .javaoperatorsdk .operator .api .reconciler .Context ;
18
20
import io .javaoperatorsdk .operator .api .reconciler .EventSourceContext ;
19
21
import io .javaoperatorsdk .operator .api .reconciler .Ignore ;
22
+ import io .javaoperatorsdk .operator .api .reconciler .dependent .DependentResource ;
20
23
import io .javaoperatorsdk .operator .api .reconciler .dependent .GarbageCollected ;
21
24
import io .javaoperatorsdk .operator .api .reconciler .dependent .managed .DependentResourceConfigurator ;
22
25
import io .javaoperatorsdk .operator .processing .dependent .AbstractEventSourceHolderDependentResource ;
@@ -35,20 +38,27 @@ public abstract class KubernetesDependentResource<R extends HasMetadata, P exten
35
38
implements DependentResourceConfigurator <KubernetesDependentResourceConfig <R >> {
36
39
37
40
private static final Logger log = LoggerFactory .getLogger (KubernetesDependentResource .class );
38
- private final ResourceUpdaterMatcher <R > updaterMatcher ;
39
41
private final boolean garbageCollected = this instanceof GarbageCollected ;
42
+ private final boolean usingCustomResourceUpdateMatcher = this instanceof ResourceUpdaterMatcher ;
43
+ @ SuppressWarnings ("unchecked" )
44
+ private final ResourceUpdaterMatcher <R > updaterMatcher = usingCustomResourceUpdateMatcher
45
+ ? (ResourceUpdaterMatcher <R >) this
46
+ : GenericResourceUpdaterMatcher .updaterMatcherFor (resourceType ());
47
+ private final boolean clustered ;
40
48
private KubernetesDependentResourceConfig <R > kubernetesDependentResourceConfig ;
41
49
42
- private final boolean usingCustomResourceUpdateMatcher ;
43
50
44
- @ SuppressWarnings ("unchecked" )
45
51
public KubernetesDependentResource (Class <R > resourceType ) {
46
52
super (resourceType );
53
+ final var primaryResourceType =
54
+ Utils .getTypeArgumentFromSuperClassOrInterfaceByIndex (getClass (), DependentResource .class ,
55
+ 1 );
56
+ clustered = !Namespaced .class .isAssignableFrom (primaryResourceType );
57
+ }
47
58
48
- usingCustomResourceUpdateMatcher = this instanceof ResourceUpdaterMatcher ;
49
- updaterMatcher = usingCustomResourceUpdateMatcher
50
- ? (ResourceUpdaterMatcher <R >) this
51
- : GenericResourceUpdaterMatcher .updaterMatcherFor (resourceType );
59
+ protected KubernetesDependentResource (Class <R > resourceType , boolean primaryIsClustered ) {
60
+ super (resourceType );
61
+ clustered = primaryIsClustered ;
52
62
}
53
63
54
64
@ SuppressWarnings ("unchecked" )
@@ -87,7 +97,7 @@ private SecondaryToPrimaryMapper<R> getSecondaryToPrimaryMapper() {
87
97
if (this instanceof SecondaryToPrimaryMapper ) {
88
98
return (SecondaryToPrimaryMapper <R >) this ;
89
99
} else if (garbageCollected ) {
90
- return Mappers .fromOwnerReferences (false );
100
+ return Mappers .fromOwnerReferences (clustered );
91
101
} else if (useNonOwnerRefBasedSecondaryToPrimaryMapping ()) {
92
102
return Mappers .fromDefaultAnnotations ();
93
103
} else {
0 commit comments