Skip to content

Commit f8dba2e

Browse files
committed
🏃 move current scaffolding under v1 pkg
1 parent e904181 commit f8dba2e

Some content is hidden

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

53 files changed

+1081
-260
lines changed

cmd/api.go

Lines changed: 38 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -21,112 +21,74 @@ import (
2121
"fmt"
2222
"log"
2323
"os"
24-
"os/exec"
25-
"path/filepath"
26-
"strings"
2724

2825
"github.com/spf13/cobra"
2926
flag "github.com/spf13/pflag"
3027

3128
"sigs.k8s.io/kubebuilder/cmd/util"
3229
"sigs.k8s.io/kubebuilder/pkg/scaffold"
33-
"sigs.k8s.io/kubebuilder/pkg/scaffold/controller"
34-
"sigs.k8s.io/kubebuilder/pkg/scaffold/input"
35-
"sigs.k8s.io/kubebuilder/pkg/scaffold/resource"
30+
"sigs.k8s.io/kubebuilder/pkg/scaffold/v1/resource"
3631
)
3732

3833
type apiOptions struct {
39-
r *resource.Resource
40-
resourceFlag, controllerFlag *flag.Flag
41-
doResource, doController, doMake bool
34+
apiScaffolder scaffold.API
35+
resourceFlag, controllerFlag *flag.Flag
4236
}
4337

44-
// APICmd represents the resource command
38+
func (o *apiOptions) bindCmdFlags(cmd *cobra.Command) {
39+
cmd.Flags().BoolVar(&o.apiScaffolder.RunMake, "make", true,
40+
"if true, run make after generating files")
41+
cmd.Flags().BoolVar(&o.apiScaffolder.DoResource, "resource", true,
42+
"if set, generate the resource without prompting the user")
43+
o.resourceFlag = cmd.Flag("resource")
44+
cmd.Flags().BoolVar(&o.apiScaffolder.DoController, "controller", true,
45+
"if set, generate the controller without prompting the user")
46+
o.controllerFlag = cmd.Flag("controller")
47+
o.apiScaffolder.Resource = resourceForFlags(cmd.Flags())
48+
}
49+
50+
// resourceForFlags registers flags for Resource fields and returns the Resource
51+
func resourceForFlags(f *flag.FlagSet) *resource.Resource {
52+
r := &resource.Resource{}
53+
f.StringVar(&r.Kind, "kind", "", "resource Kind")
54+
f.StringVar(&r.Group, "group", "", "resource Group")
55+
f.StringVar(&r.Version, "version", "", "resource Version")
56+
f.BoolVar(&r.Namespaced, "namespaced", true, "resource is namespaced")
57+
f.BoolVar(&r.CreateExampleReconcileBody, "example", true,
58+
"if true an example reconcile body should be written while scaffolding a resource.")
59+
return r
60+
}
4561

62+
// APICmd represents the resource command
4663
func (o *apiOptions) runAddAPI() {
4764
dieIfNoProject()
4865

4966
reader := bufio.NewReader(os.Stdin)
5067
if !o.resourceFlag.Changed {
5168
fmt.Println("Create Resource under pkg/apis [y/n]?")
52-
o.doResource = util.Yesno(reader)
69+
o.apiScaffolder.DoResource = util.Yesno(reader)
5370
}
5471

5572
if !o.controllerFlag.Changed {
5673
fmt.Println("Create Controller under pkg/controller [y/n]?")
57-
o.doController = util.Yesno(reader)
74+
o.apiScaffolder.DoController = util.Yesno(reader)
5875
}
5976

60-
if o.r.Group == "" {
61-
log.Fatalf("Must specify --group")
62-
}
63-
if o.r.Version == "" {
64-
log.Fatalf("Must specify --version")
65-
}
66-
if o.r.Kind == "" {
67-
log.Fatalf("Must specify --kind")
77+
if err := o.apiScaffolder.Validate(); err != nil {
78+
log.Fatalln(err)
6879
}
6980

7081
fmt.Println("Writing scaffold for you to edit...")
7182

72-
r := o.r
73-
if o.doResource {
74-
fmt.Println(filepath.Join("pkg", "apis", r.Group, r.Version,
75-
fmt.Sprintf("%s_types.go", strings.ToLower(r.Kind))))
76-
fmt.Println(filepath.Join("pkg", "apis", r.Group, r.Version,
77-
fmt.Sprintf("%s_types_test.go", strings.ToLower(r.Kind))))
78-
79-
err := (&scaffold.Scaffold{}).Execute(input.Options{},
80-
&resource.Register{Resource: r},
81-
&resource.Types{Resource: r},
82-
&resource.VersionSuiteTest{Resource: r},
83-
&resource.TypesTest{Resource: r},
84-
&resource.Doc{Resource: r},
85-
&resource.Group{Resource: r},
86-
&resource.AddToScheme{Resource: r},
87-
&resource.CRDSample{Resource: r},
88-
)
89-
if err != nil {
90-
log.Fatal(err)
91-
}
92-
} else {
93-
// disable generation of example reconcile body if not scaffolding resource
94-
// because this could result in a fork-bomb of k8s resources where watching a
95-
// deployment, replicaset etc. results in generating deployment which
96-
// end up generating replicaset, pod etc recursively.
97-
r.CreateExampleReconcileBody = false
98-
}
99-
100-
if o.doController {
101-
fmt.Println(filepath.Join("pkg", "controller", strings.ToLower(r.Kind),
102-
fmt.Sprintf("%s_controller.go", strings.ToLower(r.Kind))))
103-
fmt.Println(filepath.Join("pkg", "controller", strings.ToLower(r.Kind),
104-
fmt.Sprintf("%s_controller_test.go", strings.ToLower(r.Kind))))
105-
106-
err := (&scaffold.Scaffold{}).Execute(input.Options{},
107-
&controller.Controller{Resource: r},
108-
&controller.AddController{Resource: r},
109-
&controller.Test{Resource: r},
110-
&controller.SuiteTest{Resource: r},
111-
)
112-
if err != nil {
113-
log.Fatal(err)
114-
}
115-
}
116-
117-
if o.doMake {
118-
fmt.Println("Running make...")
119-
cm := exec.Command("make") // #nosec
120-
cm.Stderr = os.Stderr
121-
cm.Stdout = os.Stdout
122-
if err := cm.Run(); err != nil {
123-
log.Fatal(err)
124-
}
83+
if err := o.apiScaffolder.Scaffold(); err != nil {
84+
log.Fatal(err)
12585
}
12686
}
12787

12888
func newAPICommand() *cobra.Command {
129-
o := apiOptions{}
89+
options := apiOptions{
90+
apiScaffolder: scaffold.API{},
91+
}
13092

13193
apiCmd := &cobra.Command{
13294
Use: "create api",
@@ -158,19 +120,11 @@ After the scaffold is written, api will run make on the project.
158120
make run
159121
`,
160122
Run: func(cmd *cobra.Command, args []string) {
161-
o.runAddAPI()
123+
options.runAddAPI()
162124
},
163125
}
164126

165-
apiCmd.Flags().BoolVar(&o.doMake, "make", true,
166-
"if true, run make after generating files")
167-
apiCmd.Flags().BoolVar(&o.doResource, "resource", true,
168-
"if set, generate the resource without prompting the user")
169-
o.resourceFlag = apiCmd.Flag("resource")
170-
apiCmd.Flags().BoolVar(&o.doController, "controller", true,
171-
"if set, generate the controller without prompting the user")
172-
o.controllerFlag = apiCmd.Flag("controller")
173-
o.r = ResourceForFlags(apiCmd.Flags())
127+
options.bindCmdFlags(apiCmd)
174128

175129
return apiCmd
176130
}
@@ -181,15 +135,3 @@ func dieIfNoProject() {
181135
log.Fatalf("Command must be run from a directory containing %s", "PROJECT")
182136
}
183137
}
184-
185-
// ResourceForFlags registers flags for Resource fields and returns the Resource
186-
func ResourceForFlags(f *flag.FlagSet) *resource.Resource {
187-
r := &resource.Resource{}
188-
f.StringVar(&r.Kind, "kind", "", "resource Kind")
189-
f.StringVar(&r.Group, "group", "", "resource Group")
190-
f.StringVar(&r.Version, "version", "", "resource Version")
191-
f.BoolVar(&r.Namespaced, "namespaced", true, "resource is namespaced")
192-
f.BoolVar(&r.CreateExampleReconcileBody, "example", true,
193-
"if true an example reconcile body should be written while scaffolding a resource.")
194-
return r
195-
}

0 commit comments

Comments
 (0)