6
6
import java .util .LinkedHashSet ;
7
7
import java .util .List ;
8
8
import java .util .Map ;
9
- import java .util .Optional ;
10
9
import java .util .Set ;
11
10
import java .util .TreeSet ;
12
11
import java .util .stream .Collectors ;
13
12
14
13
import org .jboss .logging .Logger ;
15
14
16
15
import io .dekorate .kubernetes .decorator .ResourceProvidingDecorator ;
17
- import io .fabric8 .kubernetes .api .Pluralize ;
18
16
import io .fabric8 .kubernetes .api .model .HasMetadata ;
19
17
import io .fabric8 .kubernetes .api .model .KubernetesListBuilder ;
20
18
import io .fabric8 .kubernetes .api .model .rbac .ClusterRole ;
21
19
import io .fabric8 .kubernetes .api .model .rbac .ClusterRoleBuilder ;
22
20
import io .fabric8 .kubernetes .api .model .rbac .PolicyRule ;
23
21
import io .fabric8 .kubernetes .api .model .rbac .PolicyRuleBuilder ;
24
- import io .javaoperatorsdk .operator .api .config .ConfigurationService ;
25
22
import io .javaoperatorsdk .operator .api .config .Utils ;
26
23
import io .javaoperatorsdk .operator .api .reconciler .dependent .Deleter ;
27
24
import io .javaoperatorsdk .operator .processing .dependent .Creator ;
28
25
import io .javaoperatorsdk .operator .processing .dependent .Updater ;
29
26
import io .javaoperatorsdk .operator .processing .dependent .kubernetes .GenericKubernetesDependentResource ;
30
27
import io .javaoperatorsdk .operator .processing .dependent .kubernetes .KubernetesDependentResource ;
31
- import io .javaoperatorsdk .operator .processing .dependent .kubernetes .KubernetesDependentResourceConfig ;
32
- import io .javaoperatorsdk .operator .processing .dependent .kubernetes .ResourceUpdaterMatcher ;
33
28
import io .quarkiverse .operatorsdk .annotations .RBACVerbs ;
34
29
import io .quarkiverse .operatorsdk .runtime .DependentResourceSpecMetadata ;
35
30
import io .quarkiverse .operatorsdk .runtime .QuarkusControllerConfiguration ;
@@ -107,6 +102,7 @@ private static String getKeyFor(PolicyRule rule) {
107
102
+ rule .getResources ().stream ().sorted ().collect (Collectors .joining ("-" ));
108
103
}
109
104
105
+ @ SuppressWarnings ("unchecked" )
110
106
private static Set <PolicyRule > getClusterRolePolicyRulesFromDependentResources (QuarkusControllerConfiguration <?> cri ) {
111
107
Set <PolicyRule > rules = new LinkedHashSet <>();
112
108
final Map <String , DependentResourceSpecMetadata <?, ?, ?>> dependentsMetadata = cri .getDependentsMetadata ();
@@ -133,21 +129,19 @@ private static Set<PolicyRule> getClusterRolePolicyRulesFromDependentResources(Q
133
129
// Check if we're dealing with typeless Kubernetes resource or if we need to deal with SSA
134
130
if (KubernetesDependentResource .class .isAssignableFrom (dependentResourceClass )) {
135
131
try {
136
- @ SuppressWarnings ({ "unchecked" , " rawtypes" } )
132
+ @ SuppressWarnings (" rawtypes" )
137
133
var kubeResource = Utils .instantiate (
138
134
(Class <? extends KubernetesDependentResource >) dependentResourceClass ,
139
135
KubernetesDependentResource .class , ADD_CLUSTER_ROLES_DECORATOR );
140
136
141
137
if (kubeResource instanceof GenericKubernetesDependentResource <? extends HasMetadata > genericKubeRes ) {
142
138
final var gvk = genericKubeRes .getGroupVersionKind ();
143
139
resourceGroup = gvk .getGroup ();
144
- // todo: use plural form on GVK if available, see https://github.com/operator-framework/java-operator-sdk/pull/2515
145
- resourcePlural = Pluralize .toPlural (gvk .getKind ());
140
+ resourcePlural = gvk .getPluralOrDefault ();
146
141
}
147
142
148
143
// if we use SSA and the dependent resource class is not excluded from using SSA, we also need PATCH permissions for finalizer
149
- // todo: replace by using ConfigurationService.isUsingSSA once available see https://github.com/operator-framework/java-operator-sdk/pull/2516
150
- if (isUsingSSA (kubeResource , cri .getConfigurationService ())) {
144
+ if (cri .getConfigurationService ().shouldUseSSA (kubeResource )) {
151
145
verbs .add (RBACVerbs .PATCH );
152
146
}
153
147
} catch (Exception e ) {
@@ -166,21 +160,6 @@ private static Set<PolicyRule> getClusterRolePolicyRulesFromDependentResources(Q
166
160
return rules ;
167
161
}
168
162
169
- private static boolean isUsingSSA (KubernetesDependentResource <?, ?> dependentResource ,
170
- ConfigurationService configurationService ) {
171
- if (dependentResource instanceof ResourceUpdaterMatcher ) {
172
- return false ;
173
- }
174
- Optional <Boolean > useSSAConfig = dependentResource .configuration ()
175
- .flatMap (KubernetesDependentResourceConfig ::useSSA );
176
- // don't use SSA for certain resources by default, only if explicitly overriden
177
- if (useSSAConfig .isEmpty ()
178
- && configurationService .defaultNonSSAResource ().contains (dependentResource .resourceType ())) {
179
- return false ;
180
- }
181
- return useSSAConfig .orElse (configurationService .ssaBasedCreateUpdateMatchForDependentResources ());
182
- }
183
-
184
163
private static PolicyRule getClusterRolePolicyRuleFromPrimaryResource (QuarkusControllerConfiguration <?> cri ) {
185
164
final var rule = new PolicyRuleBuilder ();
186
165
final var resourceClass = cri .getResourceClass ();
0 commit comments