@@ -21,8 +21,11 @@ import (
21
21
"path/filepath"
22
22
"strings"
23
23
24
+ "github.com/gobuffalo/flect"
25
+ "sigs.k8s.io/kubebuilder/pkg/model"
24
26
"sigs.k8s.io/kubebuilder/pkg/scaffold/input"
25
27
"sigs.k8s.io/kubebuilder/pkg/scaffold/project"
28
+ "sigs.k8s.io/kubebuilder/pkg/scaffold/util"
26
29
"sigs.k8s.io/kubebuilder/pkg/scaffold/v1/controller"
27
30
resourcev1 "sigs.k8s.io/kubebuilder/pkg/scaffold/v1/resource"
28
31
resourcev2 "sigs.k8s.io/kubebuilder/pkg/scaffold/v2"
@@ -34,6 +37,9 @@ import (
34
37
type API struct {
35
38
scaffold * Scaffold
36
39
40
+ // Plugins is the list of plugins we should allow to transform our generated scaffolding
41
+ Plugins []Plugin
42
+
37
43
Resource * resourcev1.Resource
38
44
39
45
project * input.ProjectFile
@@ -60,6 +66,7 @@ func (api *API) Validate() error {
60
66
if api .Resource .Kind == "" {
61
67
return fmt .Errorf ("missing kind information for resource" )
62
68
}
69
+
63
70
return nil
64
71
}
65
72
@@ -89,6 +96,23 @@ func (api *API) Scaffold() error {
89
96
}
90
97
}
91
98
99
+ func (api * API ) buildUniverse () * model.Universe {
100
+ resource := & model.Resource {
101
+ Namespaced : api .Resource .Namespaced ,
102
+ Group : api .Resource .Group ,
103
+ Version : api .Resource .Version ,
104
+ Kind : api .Resource .Kind ,
105
+ Resource : api .Resource .Resource ,
106
+ Plural : flect .Pluralize (strings .ToLower (api .Resource .Kind )),
107
+ }
108
+
109
+ resource .GoPackage , resource .GroupDomain = util .GetResourceInfo (api .Resource , api .project .Repo , api .project .Domain )
110
+
111
+ return & model.Universe {
112
+ Resource : resource ,
113
+ }
114
+ }
115
+
92
116
func (api * API ) scaffoldV1 () error {
93
117
r := api .Resource
94
118
@@ -98,7 +122,7 @@ func (api *API) scaffoldV1() error {
98
122
fmt .Println (filepath .Join ("pkg" , "apis" , r .Group , r .Version ,
99
123
fmt .Sprintf ("%s_types_test.go" , strings .ToLower (r .Kind ))))
100
124
101
- err := (& Scaffold {}).Execute (input.Options {},
125
+ err := (& Scaffold {}).Execute (api . buildUniverse (), input.Options {},
102
126
& resourcev1.Register {Resource : r },
103
127
& resourcev1.Types {Resource : r },
104
128
& resourcev1.VersionSuiteTest {Resource : r },
@@ -125,7 +149,7 @@ func (api *API) scaffoldV1() error {
125
149
fmt .Println (filepath .Join ("pkg" , "controller" , strings .ToLower (r .Kind ),
126
150
fmt .Sprintf ("%s_controller_test.go" , strings .ToLower (r .Kind ))))
127
151
128
- err := (& Scaffold {}).Execute (input.Options {},
152
+ err := (& Scaffold {}).Execute (api . buildUniverse (), input.Options {},
129
153
& controller.Controller {Resource : r },
130
154
& controller.AddController {Resource : r },
131
155
& controller.Test {Resource : r },
@@ -150,8 +174,7 @@ func (api *API) scaffoldV2() error {
150
174
fmt .Println (filepath .Join ("api" , r .Version ,
151
175
fmt .Sprintf ("%s_types.go" , strings .ToLower (r .Kind ))))
152
176
153
- err := (& Scaffold {}).Execute (
154
- input.Options {},
177
+ files := []input.File {
155
178
& resourcev2.Types {
156
179
Input : input.Input {
157
180
Path : filepath .Join ("api" , r .Version , fmt .Sprintf ("%s_types.go" , strings .ToLower (r .Kind ))),
@@ -161,13 +184,18 @@ func (api *API) scaffoldV2() error {
161
184
& resourcev2.CRDSample {Resource : r },
162
185
& crdv2.EnableWebhookPatch {Resource : r },
163
186
& crdv2.EnableCAInjectionPatch {Resource : r },
164
- )
165
- if err != nil {
187
+ }
188
+
189
+ scaffold := & Scaffold {
190
+ Plugins : api .Plugins ,
191
+ }
192
+
193
+ if err := scaffold .Execute (api .buildUniverse (), input.Options {}, files ... ); err != nil {
166
194
return fmt .Errorf ("error scaffolding APIs: %v" , err )
167
195
}
168
196
169
197
crdKustomization := & crdv2.Kustomization {Resource : r }
170
- err = (& Scaffold {}).Execute (
198
+ err : = (& Scaffold {}).Execute (api . buildUniverse (),
171
199
input.Options {},
172
200
crdKustomization ,
173
201
& crdv2.KustomizeConfig {},
@@ -203,6 +231,7 @@ func (api *API) scaffoldV2() error {
203
231
ctrlScaffolder := & resourcev2.Controller {Resource : r }
204
232
testsuiteScaffolder := & resourcev2.ControllerSuiteTest {Resource : r }
205
233
err := (& Scaffold {}).Execute (
234
+ api .buildUniverse (),
206
235
input.Options {},
207
236
testsuiteScaffolder ,
208
237
ctrlScaffolder ,
0 commit comments