Skip to content

Commit ca41e56

Browse files
committed
Create resource Options to split the two step resource creation into two different types
Signed-off-by: Adrian Orive <[email protected]>
1 parent 1622db3 commit ca41e56

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+1128
-888
lines changed

cmd/api.go

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ import (
2929

3030
"sigs.k8s.io/kubebuilder/cmd/internal"
3131
"sigs.k8s.io/kubebuilder/internal/config"
32+
"sigs.k8s.io/kubebuilder/pkg/model/resource"
3233
"sigs.k8s.io/kubebuilder/pkg/scaffold"
33-
"sigs.k8s.io/kubebuilder/pkg/scaffold/resource"
3434
"sigs.k8s.io/kubebuilder/plugins/addon"
3535
)
3636

@@ -92,7 +92,7 @@ type apiOptions struct {
9292
// pattern indicates that we should use a plugin to build according to a pattern
9393
pattern string
9494

95-
resource *resource.Resource
95+
resource *resource.Options
9696

9797
// Check if we have to scaffold resource and/or controller
9898
resourceFlag *flag.Flag
@@ -125,7 +125,7 @@ func (o *apiOptions) bindFlags(cmd *cobra.Command) {
125125
cmd.Flags().BoolVar(&o.force, "force", false,
126126
"attempt to create resource even if it already exists")
127127

128-
o.resource = &resource.Resource{}
128+
o.resource = &resource.Options{}
129129
cmd.Flags().StringVar(&o.resource.Kind, "kind", "", "resource Kind")
130130
cmd.Flags().StringVar(&o.resource.Group, "group", "", "resource Group")
131131
cmd.Flags().StringVar(&o.resource.Version, "version", "", "resource Version")
@@ -202,6 +202,18 @@ func (o *apiOptions) validate(c *config.Config) error {
202202
}
203203

204204
func (o *apiOptions) scaffolder(c *config.Config) (scaffold.Scaffolder, error) {
205+
// Create the actual resource from the resource options
206+
var res *resource.Resource
207+
switch {
208+
case c.IsV1():
209+
res = o.resource.NewV1Resource(&c.Config, o.doResource)
210+
case c.IsV2():
211+
res = o.resource.NewResource(&c.Config, o.doResource)
212+
default:
213+
return nil, fmt.Errorf("unknown project version %v", c.Version)
214+
}
215+
216+
// Load the requested plugins
205217
plugins := make([]scaffold.Plugin, 0)
206218
switch strings.ToLower(o.pattern) {
207219
case "":
@@ -214,9 +226,13 @@ func (o *apiOptions) scaffolder(c *config.Config) (scaffold.Scaffolder, error) {
214226
return nil, fmt.Errorf("unknown pattern %q", o.pattern)
215227
}
216228

217-
return scaffold.NewAPIScaffolder(c, o.resource, o.doResource, o.doController, plugins), nil
229+
return scaffold.NewAPIScaffolder(c, res, o.doResource, o.doController, plugins), nil
218230
}
219231

220232
func (o *apiOptions) postScaffold(_ *config.Config) error {
221-
return internal.RunCmd("Running make", "make")
233+
if o.runMake {
234+
return internal.RunCmd("Running make", "make")
235+
}
236+
237+
return nil
222238
}

cmd/webhook.go

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ import (
2626

2727
"sigs.k8s.io/kubebuilder/cmd/internal"
2828
"sigs.k8s.io/kubebuilder/internal/config"
29+
"sigs.k8s.io/kubebuilder/pkg/model/resource"
2930
"sigs.k8s.io/kubebuilder/pkg/scaffold"
30-
"sigs.k8s.io/kubebuilder/pkg/scaffold/resource"
3131
)
3232

3333
type webhookError struct {
@@ -67,7 +67,7 @@ This command is only available for v1 scaffolding project.
6767
var _ commandOptions = &webhookV1Options{}
6868

6969
type webhookV1Options struct {
70-
resource *resource.Resource
70+
resource *resource.Options
7171
server string
7272
webhookType string
7373
operations []string
@@ -82,11 +82,11 @@ func (o *webhookV1Options) bindFlags(cmd *cobra.Command) {
8282

8383
cmd.Flags().BoolVar(&o.doMake, "make", true, "if true, run make after generating files")
8484

85-
o.resource = &resource.Resource{}
85+
o.resource = &resource.Options{}
8686
cmd.Flags().StringVar(&o.resource.Group, "group", "", "resource Group")
8787
cmd.Flags().StringVar(&o.resource.Version, "version", "", "resource Version")
8888
cmd.Flags().StringVar(&o.resource.Kind, "kind", "", "resource Kind")
89-
cmd.Flags().StringVar(&o.resource.Resource, "resource", "", "resource Resource")
89+
cmd.Flags().StringVar(&o.resource.Plural, "resource", "", "resource Resource")
9090
}
9191

9292
func (o *webhookV1Options) loadConfig() (*config.Config, error) {
@@ -111,7 +111,18 @@ func (o *webhookV1Options) validate(c *config.Config) error {
111111
}
112112

113113
func (o *webhookV1Options) scaffolder(c *config.Config) (scaffold.Scaffolder, error) { // nolint:unparam
114-
return scaffold.NewV1WebhookScaffolder(&c.Config, o.resource, o.server, o.webhookType, o.operations), nil
114+
// Create the actual resource from the resource options
115+
var res *resource.Resource
116+
switch {
117+
case c.IsV1():
118+
res = o.resource.NewV1Resource(&c.Config, false)
119+
case c.IsV2():
120+
res = o.resource.NewResource(&c.Config, false)
121+
default:
122+
return nil, fmt.Errorf("unknown project version %v", c.Version)
123+
}
124+
125+
return scaffold.NewV1WebhookScaffolder(&c.Config, res, o.server, o.webhookType, o.operations), nil
115126
}
116127

117128
func (o *webhookV1Options) postScaffold(_ *config.Config) error {
@@ -154,18 +165,18 @@ func newWebhookV2Cmd() *cobra.Command {
154165
var _ commandOptions = &webhookV2Options{}
155166

156167
type webhookV2Options struct {
157-
resource *resource.Resource
168+
resource *resource.Options
158169
defaulting bool
159170
validation bool
160171
conversion bool
161172
}
162173

163174
func (o *webhookV2Options) bindFlags(cmd *cobra.Command) {
164-
o.resource = &resource.Resource{}
175+
o.resource = &resource.Options{}
165176
cmd.Flags().StringVar(&o.resource.Group, "group", "", "resource Group")
166177
cmd.Flags().StringVar(&o.resource.Version, "version", "", "resource Version")
167178
cmd.Flags().StringVar(&o.resource.Kind, "kind", "", "resource Kind")
168-
cmd.Flags().StringVar(&o.resource.Resource, "resource", "", "resource Resource")
179+
cmd.Flags().StringVar(&o.resource.Plural, "resource", "", "resource Resource")
169180

170181
cmd.Flags().BoolVar(&o.defaulting, "defaulting", false,
171182
"if set, scaffold the defaulting webhook")
@@ -202,7 +213,18 @@ func (o *webhookV2Options) validate(c *config.Config) error {
202213
}
203214

204215
func (o *webhookV2Options) scaffolder(c *config.Config) (scaffold.Scaffolder, error) { // nolint:unparam
205-
return scaffold.NewV2WebhookScaffolder(&c.Config, o.resource, o.defaulting, o.validation, o.conversion), nil
216+
// Create the actual resource from the resource options
217+
var res *resource.Resource
218+
switch {
219+
case c.IsV1():
220+
res = o.resource.NewV1Resource(&c.Config, false)
221+
case c.IsV2():
222+
res = o.resource.NewResource(&c.Config, false)
223+
default:
224+
return nil, fmt.Errorf("unknown project version %v", c.Version)
225+
}
226+
227+
return scaffold.NewV2WebhookScaffolder(&c.Config, res, o.defaulting, o.validation, o.conversion), nil
206228
}
207229

208230
func (o *webhookV2Options) postScaffold(_ *config.Config) error {

pkg/model/config/config.go

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,6 @@ limitations under the License.
1616

1717
package config
1818

19-
import (
20-
"sigs.k8s.io/kubebuilder/pkg/scaffold/resource"
21-
)
22-
2319
const (
2420
// Scaffolding versions
2521
Version1 = "1"
@@ -72,7 +68,7 @@ func (config Config) ResourceGroups() []string {
7268

7369
// HasResource returns true if API resource is already tracked
7470
// NOTE: this works only for v2, since in v1 resources are not tracked
75-
func (config Config) HasResource(target *resource.Resource) bool {
71+
func (config Config) HasResource(target GVK) bool {
7672
// Short-circuit v1
7773
if config.Version == Version1 {
7874
return false
@@ -92,20 +88,19 @@ func (config Config) HasResource(target *resource.Resource) bool {
9288
// AddResource appends the provided resource to the tracked ones
9389
// It returns if the configuration was modified
9490
// NOTE: this works only for v2, since in v1 resources are not tracked
95-
func (config *Config) AddResource(r *resource.Resource) bool {
91+
func (config *Config) AddResource(gvk GVK) bool {
9692
// Short-circuit v1
9793
if config.Version == Version1 {
9894
return false
9995
}
10096

10197
// No-op if the resource was already tracked, return false
102-
if config.HasResource(r) {
98+
if config.HasResource(gvk) {
10399
return false
104100
}
105101

106102
// Append the resource to the tracked ones, return true
107-
config.Resources = append(config.Resources,
108-
GVK{Group: r.Group, Version: r.Version, Kind: r.Kind})
103+
config.Resources = append(config.Resources, gvk)
109104
return true
110105
}
111106

@@ -117,14 +112,7 @@ type GVK struct {
117112
}
118113

119114
// isEqualTo compares it with another resource
120-
func (r GVK) isEqualTo(other *resource.Resource) bool {
121-
// Prevent panic if other is nil
122-
if other == nil {
123-
return r.Group == "" &&
124-
r.Version == "" &&
125-
r.Kind == ""
126-
}
127-
115+
func (r GVK) isEqualTo(other GVK) bool {
128116
return r.Group == other.Group &&
129117
r.Version == other.Version &&
130118
r.Kind == other.Kind

pkg/model/resource.go

Lines changed: 0 additions & 45 deletions
This file was deleted.

0 commit comments

Comments
 (0)