@@ -6,21 +6,16 @@ metadata:
66 labels :
77 {{- include "operator.labels" . | nindent 4 }}
88rules :
9- # For automatic cluster domain detection: the operator fetches the kubelet config from
10- # /api/v1/nodes/{name}/proxy/configz to read clusterDomain. The node name is provided
11- # via the downward API (KUBERNETES_NODE_NAME env var) so no list/watch on nodes is needed.
9+ # For automatic cluster domain detection
1210 - apiGroups :
1311 - " "
1412 resources :
1513 - nodes/proxy
1614 verbs :
1715 - get
18- # Manage core workload resources created per DruidCluster.
19- # Applied via Server-Side Apply (create + patch) and tracked for orphan cleanup (list + delete).
20- # get is also required: when reconciliation is paused the framework calls client.get() instead
21- # of apply_patch(). Both types are owned by the controller (.owns()) and therefore also need watch.
22- # - configmaps: role-group config maps and discovery config maps
23- # - services: headless and metrics services per role group
16+ # Manage core workload resources created per AirflowCluster.
17+ # All resources are applied via Server-Side Apply (create + patch) and tracked for
18+ # orphan cleanup (list + delete).
2419 - apiGroups :
2520 - " "
2621 resources :
3429 - patch
3530 - watch
3631 # Shared internal authentication secret (cookie passphrase and internal client password).
37- # Managed directly via client.apply_patch() / client.delete() in internal_secret.rs —
38- # not via ClusterResources — so list and watch are not needed.
32+ # Orphan cleanup not needed (instead, Kubernetes GC via owner reference).
3933 - apiGroups :
4034 - " "
4135 resources :
7973 resourceNames :
8074 - {{ include "operator.name" . }}-clusterrole
8175 # StatefulSet created per role group. Applied via SSA, tracked for orphan cleanup, and
82- # owned by the controller (.owns()), so watch is also required .
76+ # owned by the controller.
8377 - apiGroups :
8478 - apps
8579 resources :
@@ -120,7 +114,7 @@ rules:
120114 - list
121115 - watch
122116 # Listener created per role group for external access. Applied via SSA and tracked for orphan
123- # cleanup. Not watched by the controller (no .owns() or .watches() on Listener in main.rs).
117+ # cleanup.
124118 - apiGroups :
125119 - listeners.stackable.tech
126120 resources :
@@ -140,8 +134,6 @@ rules:
140134 - create
141135 - patch
142136 # Primary CRD: watched by Controller::new() and read during reconciliation.
143- # The operator only modifies the status subresource (see druiddclusters/status below),
144- # so patch on the main object is not needed.
145137 - apiGroups :
146138 - {{ include "operator.name" . }}.stackable.tech
147139 resources :
@@ -150,7 +142,7 @@ rules:
150142 - get
151143 - list
152144 - watch
153- # Status subresource: updated at the end of every reconciliation via apply_patch_status() .
145+ # Status subresource: updated at the end of every reconciliation.
154146 - apiGroups :
155147 - {{ include "operator.name" . }}.stackable.tech
156148 resources :
@@ -177,6 +169,8 @@ rules:
177169 - list
178170 - watch
179171---
172+ # Product ClusterRole: bound (via per DruidCluster RoleBinding) to the ServiceAccount that Druid
173+ # workload pods (webserver, scheduler, worker, triggerer, dag-processor) run as.
180174apiVersion : rbac.authorization.k8s.io/v1
181175kind : ClusterRole
182176metadata :
0 commit comments