8
8
9
9
import io .fabric8 .kubernetes .api .model .HasMetadata ;
10
10
import io .fabric8 .kubernetes .api .model .apiextensions .v1 .CustomResourceDefinition ;
11
- import io .fabric8 .kubernetes .client .KubernetesClient ;
12
11
import io .javaoperatorsdk .operator .api .reconciler .Context ;
13
12
import io .javaoperatorsdk .operator .api .reconciler .dependent .DependentResource ;
14
- import io .javaoperatorsdk .operator .processing .GroupVersionKind ;
15
13
import io .javaoperatorsdk .operator .processing .expiration .Expiration ;
16
14
import io .javaoperatorsdk .operator .processing .expiration .ExpirationExecution ;
17
15
import io .javaoperatorsdk .operator .processing .expiration .RetryExpiration ;
@@ -36,7 +34,7 @@ public class CRDPresentActivationCondition implements Condition<HasMetadata, Has
36
34
.setIntervalMultiplier (DEFAULT_EXPIRATION_INTERVAL_MULTIPLIER )
37
35
.setMaxAttempts (DEFAULT_EXPIRATION_MAX_RETRY_ATTEMPTS );
38
36
39
- private final Map <GroupVersionKind , CRDCheckState > crdPresenceCache = new ConcurrentHashMap <>();
37
+ private final Map <String , CRDCheckState > crdPresenceCache = new ConcurrentHashMap <>();
40
38
41
39
private final Expiration expiration ;
42
40
@@ -53,56 +51,40 @@ public boolean isMet(DependentResource<HasMetadata, HasMetadata> dependentResour
53
51
HasMetadata primary , Context <HasMetadata > context ) {
54
52
55
53
var resourceClass = dependentResource .resourceType ();
56
- var apiVersion = HasMetadata .getApiVersion (resourceClass );
57
- var kind = HasMetadata .getKind (resourceClass );
58
- var gvk = new GroupVersionKind (apiVersion , kind );
54
+ final var crdName = HasMetadata .getFullResourceName (resourceClass );
59
55
60
- var crdCheckState = crdPresenceCache .computeIfAbsent (gvk ,
56
+ var crdCheckState = crdPresenceCache .computeIfAbsent (crdName ,
61
57
g -> new CRDCheckState (expiration .initExecution ()));
62
58
// in case of parallel execution it is only refreshed once
63
59
synchronized (crdCheckState ) {
64
- if (crdCheckState .getExpiration ().isExpired ()) {
65
- refreshCache (crdCheckState , gvk , context .getClient ());
60
+ if (crdCheckState .isExpired ()) {
61
+ log .debug ("Refreshing cache for resource: {}" , crdName );
62
+ final var found = context .getClient ().resources (CustomResourceDefinition .class ).withName (crdName ).get () != null ;
63
+ crdCheckState .refresh (found );
66
64
}
67
65
}
68
- return crdPresenceCache .get (gvk ).getCrdPresent ();
69
- }
70
-
71
- private void refreshCache (CRDCheckState crdCheckState , GroupVersionKind gvk ,
72
- KubernetesClient client ) {
73
- log .debug ("Refreshing cache for gvk: {}" , gvk );
74
- boolean found = client .resources (CustomResourceDefinition .class ).list ().getItems ()
75
- .stream ().anyMatch (crd -> crd .getSpec ().getNames ().getKind ().equals (gvk .getKind ())
76
- && crd .getSpec ().getGroup ().equals (gvk .getGroup ()));
77
-
78
- crdCheckState .setCrdPresent (found );
79
- crdCheckState .getExpiration ().refreshed ();
66
+ return crdPresenceCache .get (crdName ).isCrdPresent ();
80
67
}
81
68
82
69
static class CRDCheckState {
83
-
70
+ private final ExpirationExecution expirationExecution ;
71
+ private boolean crdPresent ;
72
+
84
73
public CRDCheckState (ExpirationExecution expirationExecution ) {
85
74
this .expirationExecution = expirationExecution ;
86
75
}
87
76
88
- private ExpirationExecution expirationExecution ;
89
-
90
- private Boolean crdPresent ;
91
-
92
- public ExpirationExecution getExpiration () {
93
- return expirationExecution ;
77
+ void refresh (boolean found ) {
78
+ crdPresent = found ;
79
+ expirationExecution .refreshed ();
94
80
}
95
81
96
- public void setExpiration ( ExpirationExecution expirationExecution ) {
97
- this . expirationExecution = expirationExecution ;
82
+ boolean isExpired ( ) {
83
+ return expirationExecution . isExpired () ;
98
84
}
99
85
100
- public Boolean getCrdPresent () {
86
+ public boolean isCrdPresent () {
101
87
return crdPresent ;
102
88
}
103
-
104
- public void setCrdPresent (Boolean crdPresent ) {
105
- this .crdPresent = crdPresent ;
106
- }
107
89
}
108
90
}
0 commit comments