Skip to content

Commit a4d0a3a

Browse files
authored
Merge pull request #1847 from prafull01/kb-force
🐛 Fix --force option to recreate the files by kubebuilder create api
2 parents c9114ed + 0c02833 commit a4d0a3a

File tree

16 files changed

+100
-18
lines changed

16 files changed

+100
-18
lines changed

generate_testdata.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ scaffold_test_project() {
5757
if [ $project == "project-v2" ] || [ $project == "project-v3" ] || [ $project == "project-v3-config" ]; then
5858
header_text 'Creating APIs ...'
5959
$kb create api --group crew --version v1 --kind Captain --controller=true --resource=true --make=false
60+
$kb create api --group crew --version v1 --kind Captain --controller=true --resource=true --make=false --force
6061
$kb create webhook --group crew --version v1 --kind Captain --defaulting --programmatic-validation
6162
$kb create api --group crew --version v1 --kind FirstMate --controller=true --resource=true --make=false
6263
$kb create webhook --group crew --version v1 --kind FirstMate --conversion

pkg/plugins/golang/v2/api.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ func (p *createAPISubcommand) GetScaffolder() (cmdutil.Scaffolder, error) {
177177

178178
// Create the actual resource from the resource options
179179
res := p.resource.NewResource(p.config, p.doResource)
180-
return scaffolds.NewAPIScaffolder(p.config, string(bp), res, p.doResource, p.doController, plugins), nil
180+
return scaffolds.NewAPIScaffolder(p.config, string(bp), res, p.doResource, p.doController, p.force, plugins), nil
181181
}
182182

183183
func (p *createAPISubcommand) PostScaffold() error {

pkg/plugins/golang/v2/scaffolds/api.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,16 @@ type apiScaffolder struct {
5151
doResource bool
5252
// doController indicates whether to scaffold controller files or not
5353
doController bool
54+
55+
force bool
5456
}
5557

5658
// NewAPIScaffolder returns a new Scaffolder for API/controller creation operations
5759
func NewAPIScaffolder(
5860
config *config.Config,
5961
boilerplate string,
6062
res *resource.Resource,
61-
doResource, doController bool,
63+
doResource, doController, force bool,
6264
plugins []model.Plugin,
6365
) cmdutil.Scaffolder {
6466
return &apiScaffolder{
@@ -68,6 +70,7 @@ func NewAPIScaffolder(
6870
plugins: plugins,
6971
doResource: doResource,
7072
doController: doController,
73+
force: force,
7174
}
7275
}
7376

@@ -97,9 +100,9 @@ func (s *apiScaffolder) scaffold() error {
97100

98101
if err := machinery.NewScaffold(s.plugins...).Execute(
99102
s.newUniverse(),
100-
&api.Types{},
103+
&api.Types{Force: s.force},
101104
&api.Group{},
102-
&samples.CRDSample{},
105+
&samples.CRDSample{Force: s.force},
103106
&rbac.CRDEditorRole{},
104107
&rbac.CRDViewerRole{},
105108
&patches.EnableWebhookPatch{},
@@ -121,8 +124,8 @@ func (s *apiScaffolder) scaffold() error {
121124
if s.doController {
122125
if err := machinery.NewScaffold(s.plugins...).Execute(
123126
s.newUniverse(),
124-
&controllers.SuiteTest{WireResource: s.doResource},
125-
&controllers.Controller{WireResource: s.doResource},
127+
&controllers.SuiteTest{WireResource: s.doResource, Force: s.force},
128+
&controllers.Controller{WireResource: s.doResource, Force: s.force},
126129
); err != nil {
127130
return fmt.Errorf("error scaffolding controller: %v", err)
128131
}

pkg/plugins/golang/v2/scaffolds/internal/templates/api/types.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,14 @@ import (
2626
var _ file.Template = &Types{}
2727

2828
// Types scaffolds the file that defines the schema for a CRD
29+
// nolint:maligned
2930
type Types struct {
3031
file.TemplateMixin
3132
file.MultiGroupMixin
3233
file.BoilerplateMixin
3334
file.ResourceMixin
35+
36+
Force bool
3437
}
3538

3639
// SetTemplateDefaults implements file.Template
@@ -47,7 +50,11 @@ func (f *Types) SetTemplateDefaults() error {
4750

4851
f.TemplateBody = typesTemplate
4952

50-
f.IfExistsAction = file.Error
53+
if f.Force {
54+
f.IfExistsAction = file.Overwrite
55+
} else {
56+
f.IfExistsAction = file.Error
57+
}
5158

5259
return nil
5360
}

pkg/plugins/golang/v2/scaffolds/internal/templates/config/samples/crd_sample.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ var _ file.Template = &CRDSample{}
2828
type CRDSample struct {
2929
file.TemplateMixin
3030
file.ResourceMixin
31+
32+
Force bool
3133
}
3234

3335
// SetTemplateDefaults implements file.Template
@@ -37,7 +39,11 @@ func (f *CRDSample) SetTemplateDefaults() error {
3739
}
3840
f.Path = f.Resource.Replacer().Replace(f.Path)
3941

40-
f.IfExistsAction = file.Error
42+
if f.Force {
43+
f.IfExistsAction = file.Overwrite
44+
} else {
45+
f.IfExistsAction = file.Error
46+
}
4147

4248
f.TemplateBody = crdSampleTemplate
4349

pkg/plugins/golang/v2/scaffolds/internal/templates/controllers/controller.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ type Controller struct {
3535

3636
// WireResource defines the api resources are generated or not.
3737
WireResource bool
38+
39+
Force bool
3840
}
3941

4042
// SetTemplateDefaults implements file.Template
@@ -51,7 +53,11 @@ func (f *Controller) SetTemplateDefaults() error {
5153

5254
f.TemplateBody = controllerTemplate
5355

54-
f.IfExistsAction = file.Error
56+
if f.Force {
57+
f.IfExistsAction = file.Overwrite
58+
} else {
59+
f.IfExistsAction = file.Error
60+
}
5561

5662
return nil
5763
}

pkg/plugins/golang/v2/scaffolds/internal/templates/controllers/controller_suitetest.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ type SuiteTest struct {
3939

4040
// WireResource defines the api resources are generated or not.
4141
WireResource bool
42+
43+
Force bool
4244
}
4345

4446
// SetTemplateDefaults implements file.Template
@@ -64,6 +66,10 @@ func (f *SuiteTest) SetTemplateDefaults() error {
6466
f.CRDDirectoryRelativePath = `"..", ".."`
6567
}
6668

69+
if f.Force {
70+
f.IfExistsAction = file.Overwrite
71+
}
72+
6773
return nil
6874
}
6975

pkg/plugins/golang/v3/api.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ func (p *createAPISubcommand) GetScaffolder() (cmdutil.Scaffolder, error) {
211211

212212
// Create the actual resource from the resource options
213213
res := p.resource.NewResource(p.config, p.doResource)
214-
return scaffolds.NewAPIScaffolder(p.config, string(bp), res, p.doResource, p.doController, plugins), nil
214+
return scaffolds.NewAPIScaffolder(p.config, string(bp), res, p.doResource, p.doController, p.force, plugins), nil
215215
}
216216

217217
func (p *createAPISubcommand) PostScaffold() error {

pkg/plugins/golang/v3/scaffolds/api.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,16 @@ type apiScaffolder struct {
4747
doResource bool
4848
// doController indicates whether to scaffold controller files or not
4949
doController bool
50+
// force indicates whether to scaffold controller files even if it exists or not
51+
force bool
5052
}
5153

5254
// NewAPIScaffolder returns a new Scaffolder for API/controller creation operations
5355
func NewAPIScaffolder(
5456
config *config.Config,
5557
boilerplate string,
5658
res *resource.Resource,
57-
doResource, doController bool,
59+
doResource, doController, force bool,
5860
plugins []model.Plugin,
5961
) cmdutil.Scaffolder {
6062
return &apiScaffolder{
@@ -64,6 +66,7 @@ func NewAPIScaffolder(
6466
plugins: plugins,
6567
doResource: doResource,
6668
doController: doController,
69+
force: force,
6770
}
6871
}
6972

@@ -89,9 +92,9 @@ func (s *apiScaffolder) scaffold() error {
8992

9093
if err := machinery.NewScaffold(s.plugins...).Execute(
9194
s.newUniverse(),
92-
&api.Types{},
95+
&api.Types{Force: s.force},
9396
&api.Group{},
94-
&samples.CRDSample{},
97+
&samples.CRDSample{Force: s.force},
9598
&rbac.CRDEditorRole{},
9699
&rbac.CRDViewerRole{},
97100
&patches.EnableWebhookPatch{CRDVersion: s.resource.API.CRDVersion},
@@ -113,8 +116,9 @@ func (s *apiScaffolder) scaffold() error {
113116
if s.doController {
114117
if err := machinery.NewScaffold(s.plugins...).Execute(
115118
s.newUniverse(),
116-
&controllers.SuiteTest{WireResource: s.doResource},
117-
&controllers.Controller{ControllerRuntimeVersion: ControllerRuntimeVersion, WireResource: s.doResource},
119+
&controllers.SuiteTest{WireResource: s.doResource, Force: s.force},
120+
&controllers.Controller{ControllerRuntimeVersion: ControllerRuntimeVersion, WireResource: s.doResource,
121+
Force: s.force},
118122
); err != nil {
119123
return fmt.Errorf("error scaffolding controller: %v", err)
120124
}

pkg/plugins/golang/v3/scaffolds/internal/templates/api/types.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,14 @@ import (
2626
var _ file.Template = &Types{}
2727

2828
// Types scaffolds the file that defines the schema for a CRD
29+
// nolint:maligned
2930
type Types struct {
3031
file.TemplateMixin
3132
file.MultiGroupMixin
3233
file.BoilerplateMixin
3334
file.ResourceMixin
35+
36+
Force bool
3437
}
3538

3639
// SetTemplateDefaults implements file.Template
@@ -51,7 +54,11 @@ func (f *Types) SetTemplateDefaults() error {
5154

5255
f.TemplateBody = typesTemplate
5356

54-
f.IfExistsAction = file.Error
57+
if f.Force {
58+
f.IfExistsAction = file.Overwrite
59+
} else {
60+
f.IfExistsAction = file.Error
61+
}
5562

5663
return nil
5764
}

0 commit comments

Comments
 (0)