Skip to content

Commit f028d0a

Browse files
committed
This commit adds pkg/model/file.ProjectNameMixin, which will inject
the Config.ProjectName into any structs that embed this mixin.
1 parent a7be4b7 commit f028d0a

File tree

10 files changed

+31
-23
lines changed

10 files changed

+31
-23
lines changed

pkg/model/config/config.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ type Config struct {
4242
Repo string `json:"repo,omitempty"`
4343

4444
// ProjectName is the name of this controller project set on initialization.
45-
ProjectName string `json:"project-name,omitempty"`
45+
ProjectName string `json:"projectName,omitempty"`
4646

4747
// Resources tracks scaffolded resources in the project
4848
// This info is tracked only in project with version 2

pkg/model/file/interfaces.go

+6
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,12 @@ type HasResource interface {
8585
InjectResource(*resource.Resource)
8686
}
8787

88+
// HasProjectName allows a project name to be used on a template.
89+
type HasProjectName interface {
90+
// InjectProjectName sets the template project name.
91+
InjectProjectName(string)
92+
}
93+
8894
// UseCustomFuncMap allows a template to use a custom template.FuncMap instead of the default FuncMap.
8995
type UseCustomFuncMap interface {
9096
// GetFuncMap returns a custom FuncMap.

pkg/model/file/mixins.go

+12
Original file line numberDiff line numberDiff line change
@@ -128,3 +128,15 @@ func (m *ResourceMixin) InjectResource(res *resource.Resource) {
128128
m.Resource = res
129129
}
130130
}
131+
132+
// ProjectNameMixin provides templates with an injectable project name field.
133+
type ProjectNameMixin struct {
134+
ProjectName string
135+
}
136+
137+
// InjectProjectName implements HasProjectName.
138+
func (m *ProjectNameMixin) InjectProjectName(projectName string) {
139+
if m.ProjectName == "" {
140+
m.ProjectName = projectName
141+
}
142+
}

pkg/model/universe.go

+3
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ func (u Universe) InjectInto(builder file.Builder) {
9191
if builderWithMultiGroup, hasMultiGroup := builder.(file.HasMultiGroup); hasMultiGroup {
9292
builderWithMultiGroup.InjectMultiGroup(u.Config.MultiGroup)
9393
}
94+
if builderWithProjectName, hasProjectName := builder.(file.HasProjectName); hasProjectName {
95+
builderWithProjectName.InjectProjectName(u.Config.ProjectName)
96+
}
9497
}
9598
// Inject boilerplate
9699
if builderWithBoilerplate, hasBoilerplate := builder.(file.HasBoilerplate); hasBoilerplate {

pkg/plugin/v3/init.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,9 @@ func (p *initPlugin) Validate() error {
117117
if err != nil {
118118
return fmt.Errorf("error getting current directory: %v", err)
119119
}
120-
p.config.ProjectName = path.Base(dir)
120+
p.config.ProjectName = strings.ToLower(path.Base(dir))
121121
}
122-
if err := validation.IsDNS1123Label(strings.ToLower(p.config.ProjectName)); err != nil {
122+
if err := validation.IsDNS1123Label(p.config.ProjectName); err != nil {
123123
return fmt.Errorf("project name (%s) is invalid: %v", p.config.ProjectName, err)
124124
}
125125

pkg/plugin/v3/scaffolds/init.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ func (s *initScaffolder) scaffold() error {
113113
},
114114
&templates.Dockerfile{},
115115
&templates.DockerignoreFile{},
116-
&templates.Kustomize{Prefix: s.config.ProjectName},
116+
&templates.Kustomize{},
117117
&templates.ManagerWebhookPatch{},
118118
&templates.ManagerRoleBinding{},
119119
&templates.LeaderElectionRole{},

pkg/plugin/v3/scaffolds/internal/templates/kustomize.go

+3-16
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,7 @@ limitations under the License.
1717
package templates
1818

1919
import (
20-
"os"
2120
"path/filepath"
22-
"strings"
2321

2422
"sigs.k8s.io/kubebuilder/pkg/model/file"
2523
)
@@ -29,9 +27,7 @@ var _ file.Template = &Kustomize{}
2927
// Kustomize scaffolds the Kustomization file for the default overlay
3028
type Kustomize struct {
3129
file.TemplateMixin
32-
33-
// Prefix to use for name prefix customization
34-
Prefix string
30+
file.ProjectNameMixin
3531
}
3632

3733
// SetTemplateDefaults implements input.Template
@@ -44,27 +40,18 @@ func (f *Kustomize) SetTemplateDefaults() error {
4440

4541
f.IfExistsAction = file.Error
4642

47-
if f.Prefix == "" {
48-
// Use directory name as prefix.
49-
wd, err := os.Getwd()
50-
if err != nil {
51-
return err
52-
}
53-
f.Prefix = strings.ToLower(filepath.Base(wd))
54-
}
55-
5643
return nil
5744
}
5845

5946
const kustomizeTemplate = `# Adds namespace to all resources.
60-
namespace: {{ .Prefix }}-system
47+
namespace: {{ .ProjectName }}-system
6148
6249
# Value of this field is prepended to the
6350
# names of all resources, e.g. a deployment named
6451
# "wordpress" becomes "alices-wordpress".
6552
# Note that it should also match with the prefix (text before '-') of the namespace
6653
# field above.
67-
namePrefix: {{ .Prefix }}-
54+
namePrefix: {{ .ProjectName }}-
6855
6956
# Labels to add to all resources and selectors.
7057
#commonLabels:

testdata/project-v3-addon/PROJECT

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
domain: testproject.org
22
layout: go.kubebuilder.io/v3-alpha
3-
project-name: project-v3-addon
3+
projectName: project-v3-addon
44
repo: sigs.k8s.io/kubebuilder/testdata/project-v3-addon
55
resources:
66
- group: crew

testdata/project-v3-multigroup/PROJECT

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
domain: testproject.org
22
layout: go.kubebuilder.io/v3-alpha
33
multigroup: true
4-
project-name: project-v3-multigroup
4+
projectName: project-v3-multigroup
55
repo: sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup
66
resources:
77
- group: crew

testdata/project-v3/PROJECT

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
domain: testproject.org
22
layout: go.kubebuilder.io/v3-alpha
3-
project-name: project-v3
3+
projectName: project-v3
44
repo: sigs.k8s.io/kubebuilder/testdata/project-v3
55
resources:
66
- group: crew

0 commit comments

Comments
 (0)