Skip to content

Commit 2175670

Browse files
authored
(helm/v1): fix role.yaml init scaffolding (#6769)
Signed-off-by: Joe Lanford <joe.lanford@gmail.com>
1 parent 0d54bbd commit 2175670

File tree

7 files changed

+175
-19
lines changed

7 files changed

+175
-19
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# entries is a list of entries to include in
2+
# release notes and/or the migration guide
3+
entries:
4+
- description: >
5+
(helm/v1) Fix broken helm-operator role scaffolding which causes reconciler to hang due to lack of permissions.
6+
7+
# kind is one of:
8+
# - addition
9+
# - change
10+
# - deprecation
11+
# - removal
12+
# - bugfix
13+
kind: "bugfix"
14+
15+
# Is this a breaking change?
16+
breaking: false
17+
18+
# Migration can be defined to automatically add a section to
19+
# the migration guide. This is required for breaking changes.
20+
migration:
21+
header: Fix helm-operator scaffolding that was broken in 1.34.0, 1.34.1, and 1.34.2
22+
body: |
23+
Users who scaffolded a helm-operator project with 1.34.0, 1.34.1, or 1.34.2
24+
need re-generate the project in order to get a fixed `config/rbac/role.yaml` file.

hack/generate/samples/internal/helm/memcached.go

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func (mh *Memcached) Run() {
103103

104104
log.Infof("adding customized roles")
105105
err = kbutil.ReplaceInFile(filepath.Join(mh.ctx.Dir, "config", "rbac", "role.yaml"),
106-
rolesFragmentReplaceTarget, policyRolesFragment)
106+
"#+kubebuilder:scaffold:rules", policyRolesFragment)
107107
pkg.CheckError("adding customized roles", err)
108108

109109
log.Infof("creating the bundle")
@@ -122,12 +122,6 @@ func (mh *Memcached) Run() {
122122

123123
const createdAt = `createdAt: "2022-11-08T17:26:37Z"`
124124

125-
const rolesFragmentReplaceTarget = `
126-
- apiGroups: [""]
127-
resources: ["pods"]
128-
verbs: ["get", "list", "watch"]
129-
`
130-
131125
const policyRolesFragment = `
132126
##
133127
## Base operator rules

internal/plugins/helm/v1/scaffolds/init.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ limitations under the License.
1818
package scaffolds
1919

2020
import (
21-
"os"
22-
2321
kustomizev2 "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2"
2422

2523
"sigs.k8s.io/kubebuilder/v3/pkg/config"
@@ -67,9 +65,10 @@ func (s *initScaffolder) Scaffold() error {
6765
machinery.WithConfig(s.config),
6866
)
6967

70-
if err := os.MkdirAll(chartutil.HelmChartsDir, 0755); err != nil {
68+
if err := s.fs.FS.MkdirAll(chartutil.HelmChartsDir, 0755); err != nil {
7169
return err
7270
}
71+
7372
return scaffold.Execute(
7473
&templates.Dockerfile{
7574
HelmOperatorVersion: helmOperatorVersion,

internal/plugins/helm/v1/scaffolds/internal/templates/config/rbac/manager_role.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ func (f *ManagerRole) SetTemplateDefaults() error {
5252
}
5353

5454
f.TemplateBody = fmt.Sprintf(roleTemplate, machinery.NewMarkerFor(f.Path, rulesMarker))
55+
f.IfExistsAction = machinery.OverwriteFile
5556

5657
return nil
5758
}

testdata/helm/memcached-operator/bundle/manifests/memcached-operator.clusterserviceversion.yaml

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,72 @@ spec:
7575
spec:
7676
clusterPermissions:
7777
- rules:
78+
- apiGroups:
79+
- ""
80+
resources:
81+
- namespaces
82+
verbs:
83+
- get
84+
- apiGroups:
85+
- ""
86+
resources:
87+
- secrets
88+
verbs:
89+
- '*'
90+
- apiGroups:
91+
- ""
92+
resources:
93+
- events
94+
verbs:
95+
- create
96+
- apiGroups:
97+
- cache.example.com
98+
resources:
99+
- memcacheds
100+
- memcacheds/status
101+
- memcacheds/finalizers
102+
verbs:
103+
- create
104+
- delete
105+
- get
106+
- list
107+
- patch
108+
- update
109+
- watch
110+
- apiGroups:
111+
- ""
112+
resources:
113+
- pods
114+
- services
115+
- services/finalizers
116+
- endpoints
117+
- persistentvolumeclaims
118+
- events
119+
- configmaps
120+
- secrets
121+
verbs:
122+
- create
123+
- delete
124+
- get
125+
- list
126+
- patch
127+
- update
128+
- watch
129+
- apiGroups:
130+
- apps
131+
resources:
132+
- deployments
133+
- daemonsets
134+
- replicasets
135+
- statefulsets
136+
verbs:
137+
- create
138+
- delete
139+
- get
140+
- list
141+
- patch
142+
- update
143+
- watch
78144
- apiGroups:
79145
- ""
80146
resources:

testdata/helm/memcached-operator/config/rbac/role.yaml

Lines changed: 79 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
11
apiVersion: rbac.authorization.k8s.io/v1
22
kind: ClusterRole
33
metadata:
4-
labels:
5-
app.kubernetes.io/name: clusterrole
6-
app.kubernetes.io/instance: manager-role
7-
app.kubernetes.io/component: rbac
8-
app.kubernetes.io/created-by: memcached-operator
9-
app.kubernetes.io/part-of: memcached-operator
10-
app.kubernetes.io/managed-by: kustomize
114
name: manager-role
125
rules:
136
##
@@ -88,6 +81,84 @@ rules:
8881
- watch
8982

9083

84+
##
85+
## Base operator rules
86+
##
87+
# We need to get namespaces so the operator can read namespaces to ensure they exist
88+
- apiGroups:
89+
- ""
90+
resources:
91+
- namespaces
92+
verbs:
93+
- get
94+
# We need to manage Helm release secrets
95+
- apiGroups:
96+
- ""
97+
resources:
98+
- secrets
99+
verbs:
100+
- "*"
101+
# We need to create events on CRs about things happening during reconciliation
102+
- apiGroups:
103+
- ""
104+
resources:
105+
- events
106+
verbs:
107+
- create
108+
109+
##
110+
## Rules for cache.example.com/v1alpha1, Kind: Memcached
111+
##
112+
- apiGroups:
113+
- cache.example.com
114+
resources:
115+
- memcacheds
116+
- memcacheds/status
117+
- memcacheds/finalizers
118+
verbs:
119+
- create
120+
- delete
121+
- get
122+
- list
123+
- patch
124+
- update
125+
- watch
126+
- apiGroups:
127+
- ""
128+
resources:
129+
- pods
130+
- services
131+
- services/finalizers
132+
- endpoints
133+
- persistentvolumeclaims
134+
- events
135+
- configmaps
136+
- secrets
137+
verbs:
138+
- create
139+
- delete
140+
- get
141+
- list
142+
- patch
143+
- update
144+
- watch
145+
- apiGroups:
146+
- apps
147+
resources:
148+
- deployments
149+
- daemonsets
150+
- replicasets
151+
- statefulsets
152+
verbs:
153+
- create
154+
- delete
155+
- get
156+
- list
157+
- patch
158+
- update
159+
- watch
160+
161+
91162
##
92163
## Rules customized for cache.example.com/v1alpha1, Kind: Memcached
93164
##
@@ -119,3 +190,4 @@ rules:
119190
- watch
120191

121192
#+kubebuilder:scaffold:rules
193+

website/content/en/docs/contribution-guidelines/plugins.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ If you are looking to develop similar solutions to allow users for example to cr
7272
[plugin-manifest]: https://github.com/operator-framework/operator-sdk/tree/master/internal/plugins/manifests/v2
7373
[plugin-scorecard]: https://github.com/operator-framework/operator-sdk/tree/master/internal/plugins/scorecard/v2
7474
[kubebuilder-declarative-pattern]: https://github.com/kubernetes-sigs/kubebuilder-declarative-pattern
75-
[kubebuilder-declarative-pattern-example]: https://github.com/kubernetes-sigs/kubebuilder/blob/master/testdata/project-v3/controllers/firstmate_controller.go
76-
[default-scaffold]: https://github.com/kubernetes-sigs/kubebuilder/blob/master/testdata/project-v3/controllers/admiral_controller.go
75+
[kubebuilder-declarative-pattern-example]: https://github.com/kubernetes-sigs/kubebuilder/blob/v3.13.0/testdata/project-v3/controllers/firstmate_controller.go
76+
[default-scaffold]: https://github.com/kubernetes-sigs/kubebuilder/blob/v3.13.0/testdata/project-v3/controllers/admiral_controller.go
7777
[kb-issue]: https://github.com/kubernetes-sigs/kubebuilder/issues/1378
7878
[create-your-own-plugins]: https://master.book.kubebuilder.io/plugins/creating-plugins.html
7979
[scorecard]: /docs/testing-operators/scorecard/

0 commit comments

Comments
 (0)