Skip to content

Commit fe3fff7

Browse files
author
tazhate
committed
fix(rbac): fix RBAC role generation by adding dedicated rbac_markers.go
controller-gen v0.17.1 silently ignores markers in files that start with a /* */ block comment (copyright header). Investigated by testing various marker placements and comparing with chainversioncatalog_controller.go which has no copyright header and works correctly. Created rbac_markers.go without a copyright header as the single source of truth for all RBAC markers. Removed duplicate markers from blockchainnode_controller.go and nodehealth_controller.go. After fix, make manifests correctly generates all required permissions including blockchainnodes, statefulsets, services, configmaps, pods, podmonitors, chainversioncatalogs, and endpoints. Context: spent ~3h debugging CI E2E failures caused by missing RBAC permissions; traced to controller-gen ignoring markers due to /* */ header
1 parent 964fc09 commit fe3fff7

4 files changed

Lines changed: 99 additions & 23 deletions

File tree

config/rbac/role.yaml

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,81 @@ kind: ClusterRole
44
metadata:
55
name: manager-role
66
rules:
7+
- apiGroups:
8+
- ""
9+
resources:
10+
- configmaps
11+
- persistentvolumeclaims
12+
- services
13+
verbs:
14+
- create
15+
- delete
16+
- get
17+
- list
18+
- patch
19+
- update
20+
- watch
21+
- apiGroups:
22+
- ""
23+
resources:
24+
- endpoints
25+
verbs:
26+
- get
27+
- list
28+
- watch
29+
- apiGroups:
30+
- ""
31+
resources:
32+
- events
33+
verbs:
34+
- create
35+
- patch
36+
- apiGroups:
37+
- ""
38+
resources:
39+
- pods
40+
verbs:
41+
- create
42+
- delete
43+
- get
44+
- list
45+
- patch
46+
- watch
47+
- apiGroups:
48+
- ""
49+
resources:
50+
- pods/log
51+
- secrets
52+
verbs:
53+
- get
54+
- apiGroups:
55+
- apps
56+
resources:
57+
- statefulsets
58+
verbs:
59+
- create
60+
- delete
61+
- get
62+
- list
63+
- patch
64+
- update
65+
- watch
66+
- apiGroups:
67+
- monitoring.coreos.com
68+
resources:
69+
- podmonitors
70+
verbs:
71+
- create
72+
- delete
73+
- get
74+
- list
75+
- patch
76+
- update
77+
- watch
778
- apiGroups:
879
- nodes.chainplane.io
980
resources:
81+
- blockchainnodes
1082
- chainversioncatalogs
1183
verbs:
1284
- create
@@ -19,12 +91,14 @@ rules:
1991
- apiGroups:
2092
- nodes.chainplane.io
2193
resources:
94+
- blockchainnodes/finalizers
2295
- chainversioncatalogs/finalizers
2396
verbs:
2497
- update
2598
- apiGroups:
2699
- nodes.chainplane.io
27100
resources:
101+
- blockchainnodes/status
28102
- chainversioncatalogs/status
29103
verbs:
30104
- get

internal/controller/blockchainnode_controller.go

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,6 @@ const (
5151

5252
// BlockchainNodeReconciler drives the full lifecycle of a BlockchainNode CR:
5353
// StatefulSet, Service, ConfigMap, health monitoring, and rolling upgrades.
54-
//
55-
// +kubebuilder:rbac:groups=nodes.chainplane.io,resources=blockchainnodes,verbs=get;list;watch;create;update;patch;delete
56-
// +kubebuilder:rbac:groups=nodes.chainplane.io,resources=blockchainnodes/status,verbs=get;update;patch
57-
// +kubebuilder:rbac:groups=nodes.chainplane.io,resources=blockchainnodes/finalizers,verbs=update
58-
// +kubebuilder:rbac:groups=apps,resources=statefulsets,verbs=get;list;watch;create;update;patch;delete
59-
// +kubebuilder:rbac:groups="",resources=services;configmaps;persistentvolumeclaims,verbs=get;list;watch;create;update;patch;delete
60-
// +kubebuilder:rbac:groups="",resources=pods,verbs=get;list;watch;patch;delete
61-
// +kubebuilder:rbac:groups="",resources=pods/log,verbs=get
62-
// +kubebuilder:rbac:groups="",resources=events,verbs=create;patch
63-
// +kubebuilder:rbac:groups="",resources=secrets,verbs=get
64-
// +kubebuilder:rbac:groups=monitoring.coreos.com,resources=podmonitors,verbs=get;list;watch;create;update;patch;delete
6554
type BlockchainNodeReconciler struct {
6655
client.Client
6756
APIReader client.Reader
@@ -80,10 +69,6 @@ func (r *BlockchainNodeReconciler) SetupWithManager(mgr ctrl.Manager) error {
8069
Complete(r)
8170
}
8271

83-
// Reconcile is the top-level entry point for a single reconciliation pass.
84-
// It follows a deterministic sequence: fetch CR, resolve adapter, handle
85-
// deletion, ensure finalizer, reconcile child resources, run upgrade logic,
86-
// and finally refresh the observed status.
8772
func (r *BlockchainNodeReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
8873
logger := log.FromContext(ctx)
8974

internal/controller/nodehealth_controller.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,6 @@ const (
5454
// alongside BlockchainNodeReconciler without conflict: the main reconciler
5555
// manages the desired state (StatefulSet, Service, ConfigMap) while this one
5656
// handles health monitoring and blue/green replacement.
57-
//
58-
// +kubebuilder:rbac:groups=nodes.chainplane.io,resources=blockchainnodes,verbs=get;list;watch;patch
59-
// +kubebuilder:rbac:groups=nodes.chainplane.io,resources=blockchainnodes/status,verbs=get;update;patch
60-
// +kubebuilder:rbac:groups="",resources=pods,verbs=get;list;watch;create;delete;patch
61-
// +kubebuilder:rbac:groups="",resources=services,verbs=get;list;watch
62-
// +kubebuilder:rbac:groups="",resources=endpoints,verbs=get;list;watch
63-
// +kubebuilder:rbac:groups="",resources=persistentvolumeclaims,verbs=get;list;delete
64-
// +kubebuilder:rbac:groups="",resources=events,verbs=create;patch
6557
type NodeHealthReconciler struct {
6658
client.Client
6759
Scheme *runtime.Scheme
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package controller
2+
3+
// BlockchainNode controller RBAC
4+
5+
// +kubebuilder:rbac:groups=nodes.chainplane.io,resources=blockchainnodes,verbs=get;list;watch;create;update;patch;delete
6+
// +kubebuilder:rbac:groups=nodes.chainplane.io,resources=blockchainnodes/status,verbs=get;update;patch
7+
// +kubebuilder:rbac:groups=nodes.chainplane.io,resources=blockchainnodes/finalizers,verbs=update
8+
// +kubebuilder:rbac:groups=apps,resources=statefulsets,verbs=get;list;watch;create;update;patch;delete
9+
// +kubebuilder:rbac:groups="",resources=services;configmaps;persistentvolumeclaims,verbs=get;list;watch;create;update;patch;delete
10+
// +kubebuilder:rbac:groups="",resources=pods,verbs=get;list;watch;patch;delete
11+
// +kubebuilder:rbac:groups="",resources=pods/log,verbs=get
12+
// +kubebuilder:rbac:groups="",resources=endpoints,verbs=get;list;watch
13+
// +kubebuilder:rbac:groups="",resources=events,verbs=create;patch
14+
// +kubebuilder:rbac:groups="",resources=secrets,verbs=get
15+
// +kubebuilder:rbac:groups=monitoring.coreos.com,resources=podmonitors,verbs=get;list;watch;create;update;patch;delete
16+
17+
// NodeHealth controller RBAC
18+
19+
// +kubebuilder:rbac:groups=nodes.chainplane.io,resources=blockchainnodes,verbs=get;list;watch;patch
20+
// +kubebuilder:rbac:groups=nodes.chainplane.io,resources=blockchainnodes/status,verbs=get;update;patch
21+
// +kubebuilder:rbac:groups="",resources=pods,verbs=get;list;watch;create;delete;patch
22+
// +kubebuilder:rbac:groups="",resources=services,verbs=get;list;watch
23+
// +kubebuilder:rbac:groups="",resources=endpoints,verbs=get;list;watch
24+
// +kubebuilder:rbac:groups="",resources=persistentvolumeclaims,verbs=get;list;delete
25+
// +kubebuilder:rbac:groups="",resources=events,verbs=create;patch

0 commit comments

Comments
 (0)