Skip to content

Commit a8204fa

Browse files
authored
Merge pull request #3627 from camilamacedo86/fix-role
🐛 (kustomize/v2, go/v4): fix role and kustomize build when no CRDs are added to the project
2 parents 87c2b2b + fc12050 commit a8204fa

File tree

7 files changed

+107
-2
lines changed

7 files changed

+107
-2
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
apiVersion: rbac.authorization.k8s.io/v1
2+
kind: ClusterRole
3+
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: project
9+
app.kubernetes.io/part-of: project
10+
app.kubernetes.io/managed-by: kustomize
11+
name: manager-role
12+
rules:
13+
- apiGroups: [""]
14+
resources: ["pods"]
15+
verbs: ["get", "list", "watch"]

pkg/plugins/common/kustomize/v2/scaffolds/api.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package scaffolds
1818

1919
import (
2020
"fmt"
21+
pluginutil "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util"
2122

2223
log "github.com/sirupsen/logrus"
2324

@@ -90,6 +91,16 @@ func (s *apiScaffolder) Scaffold() error {
9091
return fmt.Errorf("error scaffolding manifests: %v", err)
9192
}
9293
}
94+
95+
kustomizeFilePath := "config/default/kustomization.yaml"
96+
err := pluginutil.UncommentCode(kustomizeFilePath, "#- ../crd", `#`)
97+
if err != nil {
98+
hasCRUncommented, err := pluginutil.HasFragment(kustomizeFilePath, "- ../crd")
99+
if !hasCRUncommented || err != nil {
100+
log.Errorf("Unable to find the target #- ../crd to uncomment in the file "+
101+
"%s.", kustomizeFilePath)
102+
}
103+
}
93104
}
94105

95106
return nil

pkg/plugins/common/kustomize/v2/scaffolds/init.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ func (s *initScaffolder) Scaffold() error {
6969
&rbac.AuthProxyService{},
7070
&rbac.AuthProxyClientRole{},
7171
&rbac.RoleBinding{},
72+
// We need to create a Role because if the project
73+
// has not CRD define the controller-gen will not generate this file
74+
&rbac.Role{},
7275
&rbac.LeaderElectionRole{},
7376
&rbac.LeaderElectionRoleBinding{},
7477
&rbac.ServiceAccount{},

pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/kustomization.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ namePrefix: {{ .ProjectName }}-
6161
# someName: someValue
6262
6363
resources:
64-
- ../crd
64+
#- ../crd
6565
- ../rbac
6666
- ../manager
6767
# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix including the one in
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/*
2+
Copyright 2023 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package rbac
18+
19+
import (
20+
"path/filepath"
21+
22+
"sigs.k8s.io/kubebuilder/v3/pkg/machinery"
23+
)
24+
25+
var _ machinery.Template = &Role{}
26+
27+
// Role scaffolds a file that defines the role for the manager
28+
type Role struct {
29+
machinery.TemplateMixin
30+
machinery.ProjectNameMixin
31+
}
32+
33+
// SetTemplateDefaults implements file.Template
34+
func (f *Role) SetTemplateDefaults() error {
35+
if f.Path == "" {
36+
f.Path = filepath.Join("config", "rbac", "role.yaml")
37+
}
38+
39+
f.TemplateBody = managerRoleTemplate
40+
41+
f.IfExistsAction = machinery.SkipFile
42+
43+
return nil
44+
}
45+
46+
const managerRoleTemplate = `apiVersion: rbac.authorization.k8s.io/v1
47+
kind: ClusterRole
48+
metadata:
49+
labels:
50+
app.kubernetes.io/name: clusterrole
51+
app.kubernetes.io/instance: manager-role
52+
app.kubernetes.io/component: rbac
53+
app.kubernetes.io/created-by: {{ .ProjectName }}
54+
app.kubernetes.io/part-of: {{ .ProjectName }}
55+
app.kubernetes.io/managed-by: kustomize
56+
name: manager-role
57+
rules:
58+
- apiGroups: [""]
59+
resources: ["pods"]
60+
verbs: ["get", "list", "watch"]
61+
`

testdata/project-v4-with-grafana/config/default/kustomization.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ namePrefix: project-v4-with-grafana-
1515
# someName: someValue
1616

1717
resources:
18-
- ../crd
18+
#- ../crd
1919
- ../rbac
2020
- ../manager
2121
# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix including the one in
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
apiVersion: rbac.authorization.k8s.io/v1
2+
kind: ClusterRole
3+
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: project-v4-with-grafana
9+
app.kubernetes.io/part-of: project-v4-with-grafana
10+
app.kubernetes.io/managed-by: kustomize
11+
name: manager-role
12+
rules:
13+
- apiGroups: [""]
14+
resources: ["pods"]
15+
verbs: ["get", "list", "watch"]

0 commit comments

Comments
 (0)