Skip to content

Commit 8b0a5b8

Browse files
authored
Merge pull request #3497 from yyy1000/create-webhook
✨ Add Webhooks in alpha generate subcommand
2 parents fc50728 + 38ee2c9 commit 8b0a5b8

File tree

2 files changed

+61
-10
lines changed

2 files changed

+61
-10
lines changed

pkg/rescaffold/migrate.go

Lines changed: 42 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,9 @@ func kubebuilderCreate(store store.Store) error {
134134
if err = createAPI(r); err != nil {
135135
return err
136136
}
137+
if err = createWebhook(r); err != nil {
138+
return err
139+
}
137140
}
138141

139142
return nil
@@ -153,18 +156,12 @@ func getInitArgs(store store.Store) []string {
153156
return args
154157
}
155158

156-
func createAPI(resource resource.Resource) error {
157-
var args []string
158-
args = append(args, "create")
159-
args = append(args, "api")
160-
args = append(args, getAPIGVKFlags(resource)...)
161-
args = append(args, getAPIResourceFlags(resource)...)
162-
return util.RunCmd("kubebuilder create api", "kubebuilder", args...)
163-
}
164-
165-
func getAPIGVKFlags(resource resource.Resource) []string {
159+
func getGVKFlags(resource resource.Resource) []string {
166160
var args []string
167161

162+
if len(resource.Plural) > 0 {
163+
args = append(args, "--plural", resource.Plural)
164+
}
168165
if len(resource.Group) > 0 {
169166
args = append(args, "--group", resource.Group)
170167
}
@@ -177,6 +174,15 @@ func getAPIGVKFlags(resource resource.Resource) []string {
177174
return args
178175
}
179176

177+
func createAPI(resource resource.Resource) error {
178+
var args []string
179+
args = append(args, "create")
180+
args = append(args, "api")
181+
args = append(args, getGVKFlags(resource)...)
182+
args = append(args, getAPIResourceFlags(resource)...)
183+
return util.RunCmd("kubebuilder create api", "kubebuilder", args...)
184+
}
185+
180186
func getAPIResourceFlags(resource resource.Resource) []string {
181187
var args []string
182188
if resource.API == nil || resource.API.IsEmpty() {
@@ -196,3 +202,29 @@ func getAPIResourceFlags(resource resource.Resource) []string {
196202
}
197203
return args
198204
}
205+
206+
func createWebhook(resource resource.Resource) error {
207+
if resource.Webhooks == nil || resource.Webhooks.IsEmpty() {
208+
return nil
209+
}
210+
var args []string
211+
args = append(args, "create")
212+
args = append(args, "webhook")
213+
args = append(args, getGVKFlags(resource)...)
214+
args = append(args, getWebhookResourceFlags(resource)...)
215+
return util.RunCmd("kubebuilder create webhook", "kubebuilder", args...)
216+
}
217+
218+
func getWebhookResourceFlags(resource resource.Resource) []string {
219+
var args []string
220+
if resource.HasConversionWebhook() {
221+
args = append(args, "--conversion")
222+
}
223+
if resource.HasValidationWebhook() {
224+
args = append(args, "--programmatic-validation")
225+
}
226+
if resource.HasDefaultingWebhook() {
227+
args = append(args, "--defaulting")
228+
}
229+
return args
230+
}

test/e2e/alphagenerate/generate_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,16 @@ func ReGenerateProject(kbc *utils.TestContext) {
111111
)
112112
ExpectWithOffset(1, err).NotTo(HaveOccurred())
113113

114+
By("create Webhooks with conversion and validating webhook")
115+
err = kbc.CreateWebhook(
116+
"--group", "crew",
117+
"--version", "v1",
118+
"--kind", "Captain",
119+
"--programmatic-validation",
120+
"--conversion",
121+
)
122+
ExpectWithOffset(1, err).NotTo(HaveOccurred())
123+
114124
By("regenerating the project at another output directory")
115125
err = kbc.Regenerate(
116126
"--input-dir", kbc.Dir,
@@ -159,4 +169,13 @@ func ReGenerateProject(kbc *utils.TestContext) {
159169
filepath.Join(kbc.Dir, "testdir2", "PROJECT"), controller)
160170
ExpectWithOffset(1, err).NotTo(HaveOccurred())
161171
ExpectWithOffset(1, fileContainsExpr).To(BeTrue())
172+
173+
By("checking if the project file was generated with the expected webhook")
174+
var webhook = `webhooks:
175+
conversion: true
176+
validation: true`
177+
fileContainsExpr, err = pluginutil.HasFileContentWith(
178+
filepath.Join(kbc.Dir, "testdir2", "PROJECT"), webhook)
179+
ExpectWithOffset(1, err).NotTo(HaveOccurred())
180+
ExpectWithOffset(1, fileContainsExpr).To(BeTrue())
162181
}

0 commit comments

Comments
 (0)