From 5330254ab2ba58c73dfeda6cbec3e65205d1ea94 Mon Sep 17 00:00:00 2001 From: yyy1000 <992364620@qq.com> Date: Fri, 14 Jul 2023 12:20:25 +0800 Subject: [PATCH 1/2] feat: support webhook in alpha generate --- pkg/rescaffold/migrate.go | 52 ++++++++++++++++++++----- test/e2e/alphagenerate/generate_test.go | 19 +++++++++ 2 files changed, 61 insertions(+), 10 deletions(-) diff --git a/pkg/rescaffold/migrate.go b/pkg/rescaffold/migrate.go index 29f975ef96e..94c8a0332c1 100644 --- a/pkg/rescaffold/migrate.go +++ b/pkg/rescaffold/migrate.go @@ -134,6 +134,9 @@ func kubebuilderCreate(store store.Store) error { if err = createAPI(r); err != nil { return err } + if err = createWebhook(r); err != nil { + return err + } } return nil @@ -153,18 +156,12 @@ func getInitArgs(store store.Store) []string { return args } -func createAPI(resource resource.Resource) error { - var args []string - args = append(args, "create") - args = append(args, "api") - args = append(args, getAPIGVKFlags(resource)...) - args = append(args, getAPIResourceFlags(resource)...) - return util.RunCmd("kubebuilder create api", "kubebuilder", args...) -} - -func getAPIGVKFlags(resource resource.Resource) []string { +func getGVKFlags(resource resource.Resource) []string { var args []string + if len(resource.Plural) > 0 { + args = append(args, "--plural", resource.Plural) + } if len(resource.Group) > 0 { args = append(args, "--group", resource.Group) } @@ -177,6 +174,15 @@ func getAPIGVKFlags(resource resource.Resource) []string { return args } +func createAPI(resource resource.Resource) error { + var args []string + args = append(args, "create") + args = append(args, "api") + args = append(args, getGVKFlags(resource)...) + args = append(args, getAPIResourceFlags(resource)...) + return util.RunCmd("kubebuilder create api", "kubebuilder", args...) +} + func getAPIResourceFlags(resource resource.Resource) []string { var args []string if resource.API == nil || resource.API.IsEmpty() { @@ -196,3 +202,29 @@ func getAPIResourceFlags(resource resource.Resource) []string { } return args } + +func createWebhook(resource resource.Resource) error { + if resource.Webhooks == nil || resource.Webhooks.IsEmpty() { + return nil + } + var args []string + args = append(args, "create") + args = append(args, "webhook") + args = append(args, getGVKFlags(resource)...) + args = append(args, getWebhookResourceFlags(resource)...) + return util.RunCmd("kubebuilder create webhook", "kubebuilder", args...) +} + +func getWebhookResourceFlags(resource resource.Resource) []string { + var args []string + if resource.HasConversionWebhook() { + args = append(args, "--conversion") + } + if resource.HasValidationWebhook() { + args = append(args, "--programmatic-validation") + } + if resource.HasDefaultingWebhook() { + args = append(args, "--defaulting") + } + return args +} \ No newline at end of file diff --git a/test/e2e/alphagenerate/generate_test.go b/test/e2e/alphagenerate/generate_test.go index 5dff728987f..30d9f478f7d 100644 --- a/test/e2e/alphagenerate/generate_test.go +++ b/test/e2e/alphagenerate/generate_test.go @@ -111,6 +111,16 @@ func ReGenerateProject(kbc *utils.TestContext) { ) ExpectWithOffset(1, err).NotTo(HaveOccurred()) + By("create Webhooks with conversion and validating webhook") + err = kbc.CreateWebhook( + "--group", "crew", + "--version", "v1", + "--kind", "Captain", + "--programmatic-validation", + "--conversion", + ) + ExpectWithOffset(1, err).NotTo(HaveOccurred()) + By("regenerating the project at another output directory") err = kbc.Regenerate( "--input-dir", kbc.Dir, @@ -159,4 +169,13 @@ func ReGenerateProject(kbc *utils.TestContext) { filepath.Join(kbc.Dir, "testdir2", "PROJECT"), controller) ExpectWithOffset(1, err).NotTo(HaveOccurred()) ExpectWithOffset(1, fileContainsExpr).To(BeTrue()) + + By("checking if the project file was generated with the expected webhook") + var webhook = `webhooks: + conversion: true + validation: true` + fileContainsExpr, err = pluginutil.HasFileContentWith( + filepath.Join(kbc.Dir, "testdir2", "PROJECT"), webhook) + ExpectWithOffset(1, err).NotTo(HaveOccurred()) + ExpectWithOffset(1, fileContainsExpr).To(BeTrue()) } From 38ee2c98847611a4dcd57bf12ef794dbde70f701 Mon Sep 17 00:00:00 2001 From: yyy1000 <992364620@qq.com> Date: Fri, 14 Jul 2023 12:29:03 +0800 Subject: [PATCH 2/2] fix: lint --- pkg/rescaffold/migrate.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/rescaffold/migrate.go b/pkg/rescaffold/migrate.go index 94c8a0332c1..bd329aa05c4 100644 --- a/pkg/rescaffold/migrate.go +++ b/pkg/rescaffold/migrate.go @@ -227,4 +227,4 @@ func getWebhookResourceFlags(resource resource.Resource) []string { args = append(args, "--defaulting") } return args -} \ No newline at end of file +}