From c57e9a1459662bd4dfa121b4717242006a9fc1f7 Mon Sep 17 00:00:00 2001 From: Camila Macedo Date: Fri, 8 May 2020 14:24:13 +0100 Subject: [PATCH] fix: any layout should keep api/ as dir --- docs/book/src/migration/multi-group.md | 6 +- docs/testing/integration.md | 4 +- docs/using_an_external_type.md | 10 +- pkg/model/resource/options.go | 2 +- pkg/model/resource/resource_test.go | 6 +- pkg/scaffold/internal/templates/group.go | 2 +- pkg/scaffold/internal/templates/types.go | 2 +- .../internal/templates/webhook/webhook.go | 2 +- plugins/addon/type.go | 2 +- test/e2e/utils/test_context.go | 8 + test/e2e/v2/e2e_suite.go | 286 ++++++++++++++++++ test/e2e/v3/e2e_suite.go | 285 +++++++++++++++++ testdata/project-v2-addon/go.mod | 10 +- .../{apis => api}/crew/v1/captain_types.go | 0 .../{apis => api}/crew/v1/captain_webhook.go | 0 .../crew/v1/groupversion_info.go | 0 .../crew/v1/zz_generated.deepcopy.go | 0 .../foo.policy/v1/groupversion_info.go | 0 .../foo.policy/v1/healthcheckpolicy_types.go | 0 .../foo.policy/v1/zz_generated.deepcopy.go | 0 .../v1beta1/groupversion_info.go | 0 .../sea-creatures/v1beta1/kraken_types.go | 0 .../v1beta1/zz_generated.deepcopy.go | 0 .../v1beta2/groupversion_info.go | 0 .../sea-creatures/v1beta2/leviathan_types.go | 0 .../v1beta2/zz_generated.deepcopy.go | 0 .../{apis => api}/ship/v1/destroyer_types.go | 0 .../ship/v1/groupversion_info.go | 0 .../ship/v1/zz_generated.deepcopy.go | 0 .../ship/v1beta1/frigate_types.go | 0 .../ship/v1beta1/frigate_webhook.go | 0 .../ship/v1beta1/groupversion_info.go | 0 .../ship/v1beta1/zz_generated.deepcopy.go | 0 .../ship/v2alpha1/cruiser_types.go | 0 .../ship/v2alpha1/groupversion_info.go | 0 .../ship/v2alpha1/zz_generated.deepcopy.go | 0 .../controllers/crew/captain_controller.go | 2 +- .../controllers/crew/suite_test.go | 2 +- .../healthcheckpolicy_controller.go | 2 +- .../controllers/foo.policy/suite_test.go | 2 +- .../sea-creatures/kraken_controller.go | 2 +- .../sea-creatures/leviathan_controller.go | 2 +- .../controllers/sea-creatures/suite_test.go | 4 +- .../controllers/ship/cruiser_controller.go | 2 +- .../controllers/ship/destroyer_controller.go | 2 +- .../controllers/ship/frigate_controller.go | 2 +- .../controllers/ship/suite_test.go | 6 +- testdata/project-v2-multigroup/main.go | 14 +- testdata/project-v3-addon/go.mod | 10 +- .../{apis => api}/crew/v1/captain_types.go | 0 .../{apis => api}/crew/v1/captain_webhook.go | 0 .../crew/v1/groupversion_info.go | 0 .../crew/v1/zz_generated.deepcopy.go | 0 .../foo.policy/v1/groupversion_info.go | 0 .../foo.policy/v1/healthcheckpolicy_types.go | 0 .../foo.policy/v1/zz_generated.deepcopy.go | 0 .../v1beta1/groupversion_info.go | 0 .../sea-creatures/v1beta1/kraken_types.go | 0 .../v1beta1/zz_generated.deepcopy.go | 0 .../v1beta2/groupversion_info.go | 0 .../sea-creatures/v1beta2/leviathan_types.go | 0 .../v1beta2/zz_generated.deepcopy.go | 0 .../{apis => api}/ship/v1/destroyer_types.go | 0 .../ship/v1/groupversion_info.go | 0 .../ship/v1/zz_generated.deepcopy.go | 0 .../ship/v1beta1/frigate_types.go | 0 .../ship/v1beta1/frigate_webhook.go | 0 .../ship/v1beta1/groupversion_info.go | 0 .../ship/v1beta1/zz_generated.deepcopy.go | 0 .../ship/v2alpha1/cruiser_types.go | 0 .../ship/v2alpha1/groupversion_info.go | 0 .../ship/v2alpha1/zz_generated.deepcopy.go | 0 .../controllers/crew/captain_controller.go | 2 +- .../controllers/crew/suite_test.go | 2 +- .../healthcheckpolicy_controller.go | 2 +- .../controllers/foo.policy/suite_test.go | 2 +- .../sea-creatures/kraken_controller.go | 2 +- .../sea-creatures/leviathan_controller.go | 2 +- .../controllers/sea-creatures/suite_test.go | 4 +- .../controllers/ship/cruiser_controller.go | 2 +- .../controllers/ship/destroyer_controller.go | 2 +- .../controllers/ship/frigate_controller.go | 2 +- .../controllers/ship/suite_test.go | 6 +- testdata/project-v3-multigroup/main.go | 14 +- 84 files changed, 651 insertions(+), 68 deletions(-) rename testdata/project-v2-multigroup/{apis => api}/crew/v1/captain_types.go (100%) rename testdata/project-v2-multigroup/{apis => api}/crew/v1/captain_webhook.go (100%) rename testdata/project-v2-multigroup/{apis => api}/crew/v1/groupversion_info.go (100%) rename testdata/project-v2-multigroup/{apis => api}/crew/v1/zz_generated.deepcopy.go (100%) rename testdata/project-v2-multigroup/{apis => api}/foo.policy/v1/groupversion_info.go (100%) rename testdata/project-v2-multigroup/{apis => api}/foo.policy/v1/healthcheckpolicy_types.go (100%) rename testdata/project-v2-multigroup/{apis => api}/foo.policy/v1/zz_generated.deepcopy.go (100%) rename testdata/project-v2-multigroup/{apis => api}/sea-creatures/v1beta1/groupversion_info.go (100%) rename testdata/project-v2-multigroup/{apis => api}/sea-creatures/v1beta1/kraken_types.go (100%) rename testdata/project-v2-multigroup/{apis => api}/sea-creatures/v1beta1/zz_generated.deepcopy.go (100%) rename testdata/project-v2-multigroup/{apis => api}/sea-creatures/v1beta2/groupversion_info.go (100%) rename testdata/project-v2-multigroup/{apis => api}/sea-creatures/v1beta2/leviathan_types.go (100%) rename testdata/project-v2-multigroup/{apis => api}/sea-creatures/v1beta2/zz_generated.deepcopy.go (100%) rename testdata/project-v2-multigroup/{apis => api}/ship/v1/destroyer_types.go (100%) rename testdata/project-v2-multigroup/{apis => api}/ship/v1/groupversion_info.go (100%) rename testdata/project-v2-multigroup/{apis => api}/ship/v1/zz_generated.deepcopy.go (100%) rename testdata/project-v2-multigroup/{apis => api}/ship/v1beta1/frigate_types.go (100%) rename testdata/project-v2-multigroup/{apis => api}/ship/v1beta1/frigate_webhook.go (100%) rename testdata/project-v2-multigroup/{apis => api}/ship/v1beta1/groupversion_info.go (100%) rename testdata/project-v2-multigroup/{apis => api}/ship/v1beta1/zz_generated.deepcopy.go (100%) rename testdata/project-v2-multigroup/{apis => api}/ship/v2alpha1/cruiser_types.go (100%) rename testdata/project-v2-multigroup/{apis => api}/ship/v2alpha1/groupversion_info.go (100%) rename testdata/project-v2-multigroup/{apis => api}/ship/v2alpha1/zz_generated.deepcopy.go (100%) rename testdata/project-v3-multigroup/{apis => api}/crew/v1/captain_types.go (100%) rename testdata/project-v3-multigroup/{apis => api}/crew/v1/captain_webhook.go (100%) rename testdata/project-v3-multigroup/{apis => api}/crew/v1/groupversion_info.go (100%) rename testdata/project-v3-multigroup/{apis => api}/crew/v1/zz_generated.deepcopy.go (100%) rename testdata/project-v3-multigroup/{apis => api}/foo.policy/v1/groupversion_info.go (100%) rename testdata/project-v3-multigroup/{apis => api}/foo.policy/v1/healthcheckpolicy_types.go (100%) rename testdata/project-v3-multigroup/{apis => api}/foo.policy/v1/zz_generated.deepcopy.go (100%) rename testdata/project-v3-multigroup/{apis => api}/sea-creatures/v1beta1/groupversion_info.go (100%) rename testdata/project-v3-multigroup/{apis => api}/sea-creatures/v1beta1/kraken_types.go (100%) rename testdata/project-v3-multigroup/{apis => api}/sea-creatures/v1beta1/zz_generated.deepcopy.go (100%) rename testdata/project-v3-multigroup/{apis => api}/sea-creatures/v1beta2/groupversion_info.go (100%) rename testdata/project-v3-multigroup/{apis => api}/sea-creatures/v1beta2/leviathan_types.go (100%) rename testdata/project-v3-multigroup/{apis => api}/sea-creatures/v1beta2/zz_generated.deepcopy.go (100%) rename testdata/project-v3-multigroup/{apis => api}/ship/v1/destroyer_types.go (100%) rename testdata/project-v3-multigroup/{apis => api}/ship/v1/groupversion_info.go (100%) rename testdata/project-v3-multigroup/{apis => api}/ship/v1/zz_generated.deepcopy.go (100%) rename testdata/project-v3-multigroup/{apis => api}/ship/v1beta1/frigate_types.go (100%) rename testdata/project-v3-multigroup/{apis => api}/ship/v1beta1/frigate_webhook.go (100%) rename testdata/project-v3-multigroup/{apis => api}/ship/v1beta1/groupversion_info.go (100%) rename testdata/project-v3-multigroup/{apis => api}/ship/v1beta1/zz_generated.deepcopy.go (100%) rename testdata/project-v3-multigroup/{apis => api}/ship/v2alpha1/cruiser_types.go (100%) rename testdata/project-v3-multigroup/{apis => api}/ship/v2alpha1/groupversion_info.go (100%) rename testdata/project-v3-multigroup/{apis => api}/ship/v2alpha1/zz_generated.deepcopy.go (100%) diff --git a/docs/book/src/migration/multi-group.md b/docs/book/src/migration/multi-group.md index 6527e045859..39c331fdb4d 100644 --- a/docs/book/src/migration/multi-group.md +++ b/docs/book/src/migration/multi-group.md @@ -32,8 +32,8 @@ Then, we'll rename `api` to `apis` to be more clear, and we'll move our existing APIs into a new subdirectory, "batch": ```bash -mkdir apis/batch -mv api/* apis/batch +mkdir api/batch +mv api/* api/batch # After ensuring that all was moved successfully remove the old directory `api/` rm -rf api/ ``` @@ -72,7 +72,7 @@ Note that this option indicates to KubeBuilder that this is a multi-group projec In this way, if the project is not new and has previous APIs already implemented will be in the previous structure. Notice that with the `multi-group` project the Kind API's files are -created under `apis//` instead of `api/`. +created under `api//` instead of `api/`. Also, note that the controllers will be created under `controllers/` instead of `controllers`. That is the reason why we moved the previously generated APIs with the provided scripts in the previous steps. Remember to update the references afterwards. diff --git a/docs/testing/integration.md b/docs/testing/integration.md index 300066fd0dc..df1ac5ae4a3 100644 --- a/docs/testing/integration.md +++ b/docs/testing/integration.md @@ -11,9 +11,9 @@ package parent import ( _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" childapis "k8s.io/child/pkg/apis" - childv1alpha1 "k8s.io/childrepo/pkg/apis/child/v1alpha1" + childv1alpha1 "k8s.io/childrepo/pkg/api/child/v1alpha1" parentapis "k8s.io/parent/pkg/apis" - parentv1alpha1 "k8s.io/parentrepo/pkg/apis/parent/v1alpha1" + parentv1alpha1 "k8s.io/parentrepo/pkg/api/parent/v1alpha1" ...... ) diff --git a/docs/using_an_external_type.md b/docs/using_an_external_type.md index 9c36acaf334..5ba9375af3b 100644 --- a/docs/using_an_external_type.md +++ b/docs/using_an_external_type.md @@ -60,13 +60,13 @@ kubebuilder create api --group mygroup --version $APIVERSION --kind MyKind Edit the following file to the pkg/apis directory to append their `AddToScheme` to your `AddToSchemes`: -file: pkg/apis/mytype_addtoscheme.go +file: pkg/api/mytype_addtoscheme.go ``` package apis import ( - mygroupv1alpha1 "github.com/myuser/myrepo/apis/mygroup/v1alpha1" - theirgroupv1alpha1 "github.com/theiruser/theirproject/apis/theirgroup/v1alpha1" + mygroupv1alpha1 "github.com/myuser/myrepo/api/mygroup/v1alpha1" + theirgroupv1alpha1 "github.com/theiruser/theirproject/api/theirgroup/v1alpha1" ) func init() { @@ -88,8 +88,8 @@ func init() { file: pkg/controllers/mytype_controller.go ``` import ( - mygroupv1alpha1 "github.com/myuser/myrepo/apis/mygroup/v1alpha1" - theirgroupv1alpha1 "github.com/theiruser/theirproject/apis/theirgroup/v1alpha1" + mygroupv1alpha1 "github.com/myuser/myrepo/api/mygroup/v1alpha1" + theirgroupv1alpha1 "github.com/theiruser/theirproject/api/theirgroup/v1alpha1" ) ``` diff --git a/pkg/model/resource/options.go b/pkg/model/resource/options.go index d6ce892b794..1f658a370a5 100644 --- a/pkg/model/resource/options.go +++ b/pkg/model/resource/options.go @@ -167,7 +167,7 @@ func (opts *Options) NewResource(c *config.Config, doResource bool) *Resource { pkg := replacer.Replace(path.Join(c.Repo, "api", "%[version]")) if c.MultiGroup { - pkg = replacer.Replace(path.Join(c.Repo, "apis", "%[group]", "%[version]")) + pkg = replacer.Replace(path.Join(c.Repo, "api", "%[group]", "%[version]")) } domain := c.Domain diff --git a/pkg/model/resource/resource_test.go b/pkg/model/resource/resource_test.go index 73b6ac69f46..c32ab2a8410 100644 --- a/pkg/model/resource/resource_test.go +++ b/pkg/model/resource/resource_test.go @@ -66,7 +66,7 @@ var _ = Describe("Resource", func() { Expect(resource.Kind).To(Equal(options.Kind)) Expect(resource.Plural).To(Equal("firstmates")) Expect(resource.ImportAlias).To(Equal("crewv1")) - Expect(resource.Package).To(Equal(path.Join("test", "apis", "crew", "v1"))) + Expect(resource.Package).To(Equal(path.Join("test", "api", "crew", "v1"))) Expect(resource.Domain).To(Equal("crew.test.io")) }) @@ -156,7 +156,7 @@ var _ = Describe("Resource", func() { Expect(resource.Group).To(Equal(options.Group)) Expect(resource.GroupPackageName).To(Equal("myproject")) Expect(resource.ImportAlias).To(Equal("myprojectv1")) - Expect(resource.Package).To(Equal(path.Join("test", "apis", "my-project", "v1"))) + Expect(resource.Package).To(Equal(path.Join("test", "api", "my-project", "v1"))) Expect(resource.Domain).To(Equal("my-project.test.io")) options = &Options{Group: "my.project", Version: "v1", Kind: "FirstMate"} @@ -173,7 +173,7 @@ var _ = Describe("Resource", func() { Expect(resource.Group).To(Equal(options.Group)) Expect(resource.GroupPackageName).To(Equal("myproject")) Expect(resource.ImportAlias).To(Equal("myprojectv1")) - Expect(resource.Package).To(Equal(path.Join("test", "apis", "my.project", "v1"))) + Expect(resource.Package).To(Equal(path.Join("test", "api", "my.project", "v1"))) Expect(resource.Domain).To(Equal("my.project.test.io")) }) diff --git a/pkg/scaffold/internal/templates/group.go b/pkg/scaffold/internal/templates/group.go index a3b09def6cc..5248b1da8b0 100644 --- a/pkg/scaffold/internal/templates/group.go +++ b/pkg/scaffold/internal/templates/group.go @@ -36,7 +36,7 @@ type Group struct { func (f *Group) SetTemplateDefaults() error { if f.Path == "" { if f.MultiGroup { - f.Path = filepath.Join("apis", "%[group]", "%[version]", "groupversion_info.go") + f.Path = filepath.Join("api", "%[group]", "%[version]", "groupversion_info.go") } else { f.Path = filepath.Join("api", "%[version]", "groupversion_info.go") } diff --git a/pkg/scaffold/internal/templates/types.go b/pkg/scaffold/internal/templates/types.go index 97cc0ca29cc..9b432daabaf 100644 --- a/pkg/scaffold/internal/templates/types.go +++ b/pkg/scaffold/internal/templates/types.go @@ -37,7 +37,7 @@ type Types struct { func (f *Types) SetTemplateDefaults() error { if f.Path == "" { if f.MultiGroup { - f.Path = filepath.Join("apis", "%[group]", "%[version]", "%[kind]_types.go") + f.Path = filepath.Join("api", "%[group]", "%[version]", "%[kind]_types.go") } else { f.Path = filepath.Join("api", "%[version]", "%[kind]_types.go") } diff --git a/pkg/scaffold/internal/templates/webhook/webhook.go b/pkg/scaffold/internal/templates/webhook/webhook.go index 4af8b46f8f3..c933cc0884e 100644 --- a/pkg/scaffold/internal/templates/webhook/webhook.go +++ b/pkg/scaffold/internal/templates/webhook/webhook.go @@ -46,7 +46,7 @@ type Webhook struct { // nolint:maligned func (f *Webhook) SetTemplateDefaults() error { if f.Path == "" { if f.MultiGroup { - f.Path = filepath.Join("apis", "%[group]", "%[version]", "%[kind]_webhook.go") + f.Path = filepath.Join("api", "%[group]", "%[version]", "%[kind]_webhook.go") } else { f.Path = filepath.Join("api", "%[version]", "%[kind]_webhook.go") } diff --git a/plugins/addon/type.go b/plugins/addon/type.go index 171ddc0d29c..d81b73cb176 100644 --- a/plugins/addon/type.go +++ b/plugins/addon/type.go @@ -21,7 +21,7 @@ func ReplaceTypes(u *model.Universe) error { var path string if u.Config.MultiGroup { - path = filepath.Join("apis", u.Resource.Version, strings.ToLower(u.Resource.Kind)+"_types.go") + path = filepath.Join("api", u.Resource.Version, strings.ToLower(u.Resource.Kind)+"_types.go") } else { path = filepath.Join("api", u.Resource.Version, strings.ToLower(u.Resource.Kind)+"_types.go") } diff --git a/test/e2e/utils/test_context.go b/test/e2e/utils/test_context.go index 3ab2c4b5cf8..04d50eb70b0 100644 --- a/test/e2e/utils/test_context.go +++ b/test/e2e/utils/test_context.go @@ -160,6 +160,14 @@ func (kc *KBTestContext) CreateAPI(resourceOptions ...string) error { return err } +// Edit is for running `kubebuilder edit` +func (kc *KBTestContext) Edit(editOptions ...string) error { + editOptions = append([]string{"edit"}, editOptions...) + cmd := exec.Command("kubebuilder", editOptions...) + _, err := kc.Run(cmd) + return err +} + // CreateWebhook is for running `kubebuilder create webhook` func (kc *KBTestContext) CreateWebhook(resourceOptions ...string) error { resourceOptions = append([]string{"create", "webhook"}, resourceOptions...) diff --git a/test/e2e/v2/e2e_suite.go b/test/e2e/v2/e2e_suite.go index ccead8d48b1..5069ee55933 100644 --- a/test/e2e/v2/e2e_suite.go +++ b/test/e2e/v2/e2e_suite.go @@ -31,6 +31,7 @@ import ( "sigs.k8s.io/kubebuilder/test/e2e/utils" ) +//todo: (cleanup) try to centralize the impl without lost the flexibility of have tests for each project version var _ = Describe("kubebuilder", func() { Context("with v2 scaffolding", func() { var kbc *utils.KBTestContext @@ -328,6 +329,291 @@ var _ = Describe("kubebuilder", func() { Expect(err).NotTo(HaveOccurred()) Expect(count).To(BeNumerically("==", 5)) }) + + It("should generate a runnable project with multi-group layout", func() { + var controllerPodName string + By("init v2 project") + err := kbc.Init( + "--project-version", "2", + "--domain", kbc.Domain, + "--dep=false") + Expect(err).Should(Succeed()) + + By("editing default layout") + err = kbc.Edit( + "--multigroup", "true") + Expect(err).Should(Succeed()) + + By("creating api definition") + err = kbc.CreateAPI( + "--group", kbc.Group, + "--version", kbc.Version, + "--kind", kbc.Kind, + "--namespaced", + "--resource", + "--controller", + "--make=false") + Expect(err).Should(Succeed()) + + By("creating second api definition with same kind and version") + err = kbc.CreateAPI( + "--group", kbc.Group+"-example", + "--version", kbc.Version, + "--kind", kbc.Kind, + "--namespaced", + "--resource", + "--controller", + "--make=false") + Expect(err).Should(Succeed()) + + By("implementing the API") + Expect(utils.InsertCode( + filepath.Join(kbc.Dir, "api", kbc.Version, fmt.Sprintf("%s_types.go", strings.ToLower(kbc.Kind))), + fmt.Sprintf(`type %sSpec struct { +`, kbc.Kind), + ` // +optional + Count int `+"`"+`json:"count,omitempty"`+"`"+` +`)).Should(Succeed()) + + By("scaffolding mutating and validating webhook") + err = kbc.CreateWebhook( + "--group", kbc.Group, + "--version", kbc.Version, + "--kind", kbc.Kind, + "--defaulting", + "--programmatic-validation") + Expect(err).Should(Succeed()) + + By("implementing the mutating and validating webhooks") + err = implementWebhooks(filepath.Join( + kbc.Dir, "api", kbc.Version, + fmt.Sprintf("%s_webhook.go", strings.ToLower(kbc.Kind)))) + Expect(err).Should(Succeed()) + + By("uncomment kustomization.yaml to enable webhook and ca injection") + Expect(utils.UncommentCode( + filepath.Join(kbc.Dir, "config", "default", "kustomization.yaml"), + "#- ../webhook", "#")).To(Succeed()) + Expect(utils.UncommentCode( + filepath.Join(kbc.Dir, "config", "default", "kustomization.yaml"), + "#- ../certmanager", "#")).To(Succeed()) + Expect(utils.UncommentCode( + filepath.Join(kbc.Dir, "config", "default", "kustomization.yaml"), + "#- ../prometheus", "#")).To(Succeed()) + Expect(utils.UncommentCode( + filepath.Join(kbc.Dir, "config", "default", "kustomization.yaml"), + "#- manager_webhook_patch.yaml", "#")).To(Succeed()) + Expect(utils.UncommentCode( + filepath.Join(kbc.Dir, "config", "default", "kustomization.yaml"), + "#- webhookcainjection_patch.yaml", "#")).To(Succeed()) + Expect(utils.UncommentCode(filepath.Join(kbc.Dir, "config", "default", "kustomization.yaml"), + `#- name: CERTIFICATE_NAMESPACE # namespace of the certificate CR +# objref: +# kind: Certificate +# group: cert-manager.io +# version: v1alpha2 +# name: serving-cert # this name should match the one in certificate.yaml +# fieldref: +# fieldpath: metadata.namespace +#- name: CERTIFICATE_NAME +# objref: +# kind: Certificate +# group: cert-manager.io +# version: v1alpha2 +# name: serving-cert # this name should match the one in certificate.yaml +#- name: SERVICE_NAMESPACE # namespace of the service +# objref: +# kind: Service +# version: v1 +# name: webhook-service +# fieldref: +# fieldpath: metadata.namespace +#- name: SERVICE_NAME +# objref: +# kind: Service +# version: v1 +# name: webhook-service`, "#")).To(Succeed()) + + By("building image") + err = kbc.Make("docker-build", "IMG="+kbc.ImageName) + Expect(err).Should(Succeed()) + + By("loading docker image into kind cluster") + err = kbc.LoadImageToKindCluster() + Expect(err).Should(Succeed()) + + // NOTE: If you want to run the test against a GKE cluster, you will need to grant yourself permission. + // Otherwise, you may see "... is forbidden: attempt to grant extra privileges" + // $ kubectl create clusterrolebinding myname-cluster-admin-binding \ + // --clusterrole=cluster-admin --user=myname@mycompany.com + // https://cloud.google.com/kubernetes-engine/docs/how-to/role-based-access-control + By("deploying controller manager") + err = kbc.Make("deploy", "IMG="+kbc.ImageName) + Expect(err).Should(Succeed()) + + By("validate the controller-manager pod running as expected") + verifyControllerUp := func() error { + // Get pod name + podOutput, err := kbc.Kubectl.Get( + true, + "pods", "-l", "control-plane=controller-manager", + "-o", "go-template={{ range .items }}{{ if not .metadata.deletionTimestamp }}{{ .metadata.name }}"+ + "{{ \"\\n\" }}{{ end }}{{ end }}") + Expect(err).NotTo(HaveOccurred()) + podNames := utils.GetNonEmptyLines(podOutput) + if len(podNames) != 1 { + return fmt.Errorf("expect 1 controller pods running, but got %d", len(podNames)) + } + controllerPodName = podNames[0] + Expect(controllerPodName).Should(ContainSubstring("controller-manager")) + + // Validate pod status + status, err := kbc.Kubectl.Get( + true, + "pods", controllerPodName, "-o", "jsonpath={.status.phase}") + Expect(err).NotTo(HaveOccurred()) + if status != "Running" { + return fmt.Errorf("controller pod in %s status", status) + } + return nil + } + Eventually(verifyControllerUp, time.Minute, time.Second).Should(Succeed()) + + By("granting permissions to access the metrics and read the token") + _, err = kbc.Kubectl.Command( + "create", "clusterrolebinding", fmt.Sprintf("metrics-%s", kbc.TestSuffix), + fmt.Sprintf("--clusterrole=e2e-%s-metrics-reader", kbc.TestSuffix), + fmt.Sprintf("--serviceaccount=%s:default", kbc.Kubectl.Namespace)) + Expect(err).NotTo(HaveOccurred()) + + b64Token, err := kbc.Kubectl.Get(true, "secrets", "-o=jsonpath={.items[0].data.token}") + Expect(err).NotTo(HaveOccurred()) + token, err := base64.StdEncoding.DecodeString(strings.TrimSpace(b64Token)) + Expect(err).NotTo(HaveOccurred()) + Expect(len(token)).To(BeNumerically(">", 0)) + + By("creating a pod with curl image") + cmdOpts := []string{ + "run", "--generator=run-pod/v1", "curl", "--image=curlimages/curl:7.68.0", "--restart=OnFailure", "--", + "curl", "-v", "-k", "-H", fmt.Sprintf(`Authorization: Bearer %s`, token), + fmt.Sprintf("https://e2e-%v-controller-manager-metrics-service.e2e-%v-system.svc:8443/metrics", + kbc.TestSuffix, kbc.TestSuffix), + } + _, err = kbc.Kubectl.CommandInNamespace(cmdOpts...) + Expect(err).NotTo(HaveOccurred()) + + By("validating the curl pod running as expected") + verifyCurlUp := func() error { + // Validate pod status + status, err := kbc.Kubectl.Get( + true, + "pods", "curl", "-o", "jsonpath={.status.phase}") + Expect(err).NotTo(HaveOccurred()) + if status != "Completed" && status != "Succeeded" { + return fmt.Errorf("curl pod in %s status", status) + } + return nil + } + Eventually(verifyCurlUp, 30*time.Second, time.Second).Should(Succeed()) + + By("validating the metrics endpoint is serving as expected") + getCurlLogs := func() string { + logOutput, err := kbc.Kubectl.Logs("curl") + Expect(err).NotTo(HaveOccurred()) + return logOutput + } + Eventually(getCurlLogs, 10*time.Second, time.Second).Should(ContainSubstring("< HTTP/2 200")) + + By("validate cert manager has provisioned the certificate secret") + Eventually(func() error { + _, err := kbc.Kubectl.Get( + true, + "secrets", "webhook-server-cert") + return err + }, time.Minute, time.Second).Should(Succeed()) + + By("validate prometheus manager has provisioned the Service") + Eventually(func() error { + _, err := kbc.Kubectl.Get( + false, + "Service", "prometheus-operator") + return err + }, time.Minute, time.Second).Should(Succeed()) + + By("validate Service Monitor for Prometheus is applied in the namespace") + _, err = kbc.Kubectl.Get( + true, + "ServiceMonitor") + Expect(err).NotTo(HaveOccurred()) + + By("validate the mutating|validating webhooks have the CA injected") + verifyCAInjection := func() error { + mwhOutput, err := kbc.Kubectl.Get( + false, + "mutatingwebhookconfigurations.admissionregistration.k8s.io", + fmt.Sprintf("e2e-%s-mutating-webhook-configuration", kbc.TestSuffix), + "-o", "go-template={{ range .webhooks }}{{ .clientConfig.caBundle }}{{ end }}") + Expect(err).NotTo(HaveOccurred()) + // sanity check that ca should be long enough, because there may be a place holder "\n" + Expect(len(mwhOutput)).To(BeNumerically(">", 10)) + + vwhOutput, err := kbc.Kubectl.Get( + false, + "validatingwebhookconfigurations.admissionregistration.k8s.io", + fmt.Sprintf("e2e-%s-validating-webhook-configuration", kbc.TestSuffix), + "-o", "go-template={{ range .webhooks }}{{ .clientConfig.caBundle }}{{ end }}") + Expect(err).NotTo(HaveOccurred()) + // sanity check that ca should be long enough, because there may be a place holder "\n" + Expect(len(vwhOutput)).To(BeNumerically(">", 10)) + + return nil + } + Eventually(verifyCAInjection, time.Minute, time.Second).Should(Succeed()) + + By("creating an instance of CR") + // currently controller-runtime doesn't provide a readiness probe, we retry a few times + // we can change it to probe the readiness endpoint after CR supports it. + sampleFile := filepath.Join("config", "samples", + fmt.Sprintf("%s_%s_%s.yaml", kbc.Group, kbc.Version, strings.ToLower(kbc.Kind))) + Eventually(func() error { + _, err = kbc.Kubectl.Apply(true, "-f", sampleFile) + return err + }, time.Minute, time.Second).Should(Succeed()) + + By("applying CRD Editor Role") + crdEditorRole := filepath.Join("config", "rbac", + fmt.Sprintf("%s_editor_role.yaml", strings.ToLower(kbc.Kind))) + Eventually(func() error { + _, err = kbc.Kubectl.Apply(true, "-f", crdEditorRole) + return err + }, time.Minute, time.Second).Should(Succeed()) + + By("applying CRD Viewer Role") + crdViewerRole := filepath.Join("config", "rbac", fmt.Sprintf("%s_viewer_role.yaml", strings.ToLower(kbc.Kind))) + Eventually(func() error { + _, err = kbc.Kubectl.Apply(true, "-f", crdViewerRole) + return err + }, time.Minute, time.Second).Should(Succeed()) + + By("validate the created resource object gets reconciled in controller") + managerContainerLogs := func() string { + logOutput, err := kbc.Kubectl.Logs(controllerPodName, "-c", "manager") + Expect(err).NotTo(HaveOccurred()) + return logOutput + } + Eventually(managerContainerLogs, time.Minute, time.Second).Should(ContainSubstring("Successfully Reconciled")) + + By("validate mutating and validating webhooks are working fine") + cnt, err := kbc.Kubectl.Get( + true, + "-f", sampleFile, + "-o", "go-template={{ .spec.count }}") + Expect(err).NotTo(HaveOccurred()) + count, err := strconv.Atoi(cnt) + Expect(err).NotTo(HaveOccurred()) + Expect(count).To(BeNumerically("==", 5)) + }) + }) }) diff --git a/test/e2e/v3/e2e_suite.go b/test/e2e/v3/e2e_suite.go index edd2836b27f..8c00276a599 100644 --- a/test/e2e/v3/e2e_suite.go +++ b/test/e2e/v3/e2e_suite.go @@ -31,6 +31,7 @@ import ( "sigs.k8s.io/kubebuilder/test/e2e/utils" ) +//todo: (cleanup) try to centralize the impl without lost the flexibility of have tests for each project version var _ = Describe("kubebuilder", func() { Context("with v3 scaffolding", func() { var kbc *utils.KBTestContext @@ -61,6 +62,290 @@ var _ = Describe("kubebuilder", func() { kbc.Destroy() }) + It("should generate a runnable project with multi-group layout", func() { + var controllerPodName string + By("init v3 project") + err := kbc.Init( + "--project-version", "3-alpha", + "--domain", kbc.Domain, + "--dep=false") + Expect(err).Should(Succeed()) + + By("editing default layout") + err = kbc.Edit( + "--multigroup", "true") + Expect(err).Should(Succeed()) + + By("creating api definition") + err = kbc.CreateAPI( + "--group", kbc.Group, + "--version", kbc.Version, + "--kind", kbc.Kind, + "--namespaced", + "--resource", + "--controller", + "--make=false") + Expect(err).Should(Succeed()) + + By("creating second api definition with same kind and version") + err = kbc.CreateAPI( + "--group", kbc.Group+"-example", + "--version", kbc.Version, + "--kind", kbc.Kind, + "--namespaced", + "--resource", + "--controller", + "--make=false") + Expect(err).Should(Succeed()) + + By("implementing the API") + Expect(utils.InsertCode( + filepath.Join(kbc.Dir, "api", kbc.Version, fmt.Sprintf("%s_types.go", strings.ToLower(kbc.Kind))), + fmt.Sprintf(`type %sSpec struct { +`, kbc.Kind), + ` // +optional + Count int `+"`"+`json:"count,omitempty"`+"`"+` +`)).Should(Succeed()) + + By("scaffolding mutating and validating webhook") + err = kbc.CreateWebhook( + "--group", kbc.Group, + "--version", kbc.Version, + "--kind", kbc.Kind, + "--defaulting", + "--programmatic-validation") + Expect(err).Should(Succeed()) + + By("implementing the mutating and validating webhooks") + err = implementWebhooks(filepath.Join( + kbc.Dir, "api", kbc.Version, + fmt.Sprintf("%s_webhook.go", strings.ToLower(kbc.Kind)))) + Expect(err).Should(Succeed()) + + By("uncomment kustomization.yaml to enable webhook and ca injection") + Expect(utils.UncommentCode( + filepath.Join(kbc.Dir, "config", "default", "kustomization.yaml"), + "#- ../webhook", "#")).To(Succeed()) + Expect(utils.UncommentCode( + filepath.Join(kbc.Dir, "config", "default", "kustomization.yaml"), + "#- ../certmanager", "#")).To(Succeed()) + Expect(utils.UncommentCode( + filepath.Join(kbc.Dir, "config", "default", "kustomization.yaml"), + "#- ../prometheus", "#")).To(Succeed()) + Expect(utils.UncommentCode( + filepath.Join(kbc.Dir, "config", "default", "kustomization.yaml"), + "#- manager_webhook_patch.yaml", "#")).To(Succeed()) + Expect(utils.UncommentCode( + filepath.Join(kbc.Dir, "config", "default", "kustomization.yaml"), + "#- webhookcainjection_patch.yaml", "#")).To(Succeed()) + Expect(utils.UncommentCode(filepath.Join(kbc.Dir, "config", "default", "kustomization.yaml"), + `#- name: CERTIFICATE_NAMESPACE # namespace of the certificate CR +# objref: +# kind: Certificate +# group: cert-manager.io +# version: v1alpha2 +# name: serving-cert # this name should match the one in certificate.yaml +# fieldref: +# fieldpath: metadata.namespace +#- name: CERTIFICATE_NAME +# objref: +# kind: Certificate +# group: cert-manager.io +# version: v1alpha2 +# name: serving-cert # this name should match the one in certificate.yaml +#- name: SERVICE_NAMESPACE # namespace of the service +# objref: +# kind: Service +# version: v1 +# name: webhook-service +# fieldref: +# fieldpath: metadata.namespace +#- name: SERVICE_NAME +# objref: +# kind: Service +# version: v1 +# name: webhook-service`, "#")).To(Succeed()) + + By("building image") + err = kbc.Make("docker-build", "IMG="+kbc.ImageName) + Expect(err).Should(Succeed()) + + By("loading docker image into kind cluster") + err = kbc.LoadImageToKindCluster() + Expect(err).Should(Succeed()) + + // NOTE: If you want to run the test against a GKE cluster, you will need to grant yourself permission. + // Otherwise, you may see "... is forbidden: attempt to grant extra privileges" + // $ kubectl create clusterrolebinding myname-cluster-admin-binding \ + // --clusterrole=cluster-admin --user=myname@mycompany.com + // https://cloud.google.com/kubernetes-engine/docs/how-to/role-based-access-control + By("deploying controller manager") + err = kbc.Make("deploy", "IMG="+kbc.ImageName) + Expect(err).Should(Succeed()) + + By("validate the controller-manager pod running as expected") + verifyControllerUp := func() error { + // Get pod name + podOutput, err := kbc.Kubectl.Get( + true, + "pods", "-l", "control-plane=controller-manager", + "-o", "go-template={{ range .items }}{{ if not .metadata.deletionTimestamp }}{{ .metadata.name }}"+ + "{{ \"\\n\" }}{{ end }}{{ end }}") + Expect(err).NotTo(HaveOccurred()) + podNames := utils.GetNonEmptyLines(podOutput) + if len(podNames) != 1 { + return fmt.Errorf("expect 1 controller pods running, but got %d", len(podNames)) + } + controllerPodName = podNames[0] + Expect(controllerPodName).Should(ContainSubstring("controller-manager")) + + // Validate pod status + status, err := kbc.Kubectl.Get( + true, + "pods", controllerPodName, "-o", "jsonpath={.status.phase}") + Expect(err).NotTo(HaveOccurred()) + if status != "Running" { + return fmt.Errorf("controller pod in %s status", status) + } + return nil + } + Eventually(verifyControllerUp, time.Minute, time.Second).Should(Succeed()) + + By("granting permissions to access the metrics and read the token") + _, err = kbc.Kubectl.Command( + "create", "clusterrolebinding", fmt.Sprintf("metrics-%s", kbc.TestSuffix), + fmt.Sprintf("--clusterrole=e2e-%s-metrics-reader", kbc.TestSuffix), + fmt.Sprintf("--serviceaccount=%s:default", kbc.Kubectl.Namespace)) + Expect(err).NotTo(HaveOccurred()) + + b64Token, err := kbc.Kubectl.Get(true, "secrets", "-o=jsonpath={.items[0].data.token}") + Expect(err).NotTo(HaveOccurred()) + token, err := base64.StdEncoding.DecodeString(strings.TrimSpace(b64Token)) + Expect(err).NotTo(HaveOccurred()) + Expect(len(token)).To(BeNumerically(">", 0)) + + By("creating a pod with curl image") + cmdOpts := []string{ + "run", "--generator=run-pod/v1", "curl", "--image=curlimages/curl:7.68.0", "--restart=OnFailure", "--", + "curl", "-v", "-k", "-H", fmt.Sprintf(`Authorization: Bearer %s`, token), + fmt.Sprintf("https://e2e-%v-controller-manager-metrics-service.e2e-%v-system.svc:8443/metrics", + kbc.TestSuffix, kbc.TestSuffix), + } + _, err = kbc.Kubectl.CommandInNamespace(cmdOpts...) + Expect(err).NotTo(HaveOccurred()) + + By("validating the curl pod running as expected") + verifyCurlUp := func() error { + // Validate pod status + status, err := kbc.Kubectl.Get( + true, + "pods", "curl", "-o", "jsonpath={.status.phase}") + Expect(err).NotTo(HaveOccurred()) + if status != "Completed" && status != "Succeeded" { + return fmt.Errorf("curl pod in %s status", status) + } + return nil + } + Eventually(verifyCurlUp, 30*time.Second, time.Second).Should(Succeed()) + + By("validating the metrics endpoint is serving as expected") + getCurlLogs := func() string { + logOutput, err := kbc.Kubectl.Logs("curl") + Expect(err).NotTo(HaveOccurred()) + return logOutput + } + Eventually(getCurlLogs, 10*time.Second, time.Second).Should(ContainSubstring("< HTTP/2 200")) + + By("validate cert manager has provisioned the certificate secret") + Eventually(func() error { + _, err := kbc.Kubectl.Get( + true, + "secrets", "webhook-server-cert") + return err + }, time.Minute, time.Second).Should(Succeed()) + + By("validate prometheus manager has provisioned the Service") + Eventually(func() error { + _, err := kbc.Kubectl.Get( + false, + "Service", "prometheus-operator") + return err + }, time.Minute, time.Second).Should(Succeed()) + + By("validate Service Monitor for Prometheus is applied in the namespace") + _, err = kbc.Kubectl.Get( + true, + "ServiceMonitor") + Expect(err).NotTo(HaveOccurred()) + + By("validate the mutating|validating webhooks have the CA injected") + verifyCAInjection := func() error { + mwhOutput, err := kbc.Kubectl.Get( + false, + "mutatingwebhookconfigurations.admissionregistration.k8s.io", + fmt.Sprintf("e2e-%s-mutating-webhook-configuration", kbc.TestSuffix), + "-o", "go-template={{ range .webhooks }}{{ .clientConfig.caBundle }}{{ end }}") + Expect(err).NotTo(HaveOccurred()) + // sanity check that ca should be long enough, because there may be a place holder "\n" + Expect(len(mwhOutput)).To(BeNumerically(">", 10)) + + vwhOutput, err := kbc.Kubectl.Get( + false, + "validatingwebhookconfigurations.admissionregistration.k8s.io", + fmt.Sprintf("e2e-%s-validating-webhook-configuration", kbc.TestSuffix), + "-o", "go-template={{ range .webhooks }}{{ .clientConfig.caBundle }}{{ end }}") + Expect(err).NotTo(HaveOccurred()) + // sanity check that ca should be long enough, because there may be a place holder "\n" + Expect(len(vwhOutput)).To(BeNumerically(">", 10)) + + return nil + } + Eventually(verifyCAInjection, time.Minute, time.Second).Should(Succeed()) + + By("creating an instance of CR") + // currently controller-runtime doesn't provide a readiness probe, we retry a few times + // we can change it to probe the readiness endpoint after CR supports it. + sampleFile := filepath.Join("config", "samples", + fmt.Sprintf("%s_%s_%s.yaml", kbc.Group, kbc.Version, strings.ToLower(kbc.Kind))) + Eventually(func() error { + _, err = kbc.Kubectl.Apply(true, "-f", sampleFile) + return err + }, time.Minute, time.Second).Should(Succeed()) + + By("applying CRD Editor Role") + crdEditorRole := filepath.Join("config", "rbac", + fmt.Sprintf("%s_editor_role.yaml", strings.ToLower(kbc.Kind))) + Eventually(func() error { + _, err = kbc.Kubectl.Apply(true, "-f", crdEditorRole) + return err + }, time.Minute, time.Second).Should(Succeed()) + + By("applying CRD Viewer Role") + crdViewerRole := filepath.Join("config", "rbac", fmt.Sprintf("%s_viewer_role.yaml", strings.ToLower(kbc.Kind))) + Eventually(func() error { + _, err = kbc.Kubectl.Apply(true, "-f", crdViewerRole) + return err + }, time.Minute, time.Second).Should(Succeed()) + + By("validate the created resource object gets reconciled in controller") + managerContainerLogs := func() string { + logOutput, err := kbc.Kubectl.Logs(controllerPodName, "-c", "manager") + Expect(err).NotTo(HaveOccurred()) + return logOutput + } + Eventually(managerContainerLogs, time.Minute, time.Second).Should(ContainSubstring("Successfully Reconciled")) + + By("validate mutating and validating webhooks are working fine") + cnt, err := kbc.Kubectl.Get( + true, + "-f", sampleFile, + "-o", "go-template={{ .spec.count }}") + Expect(err).NotTo(HaveOccurred()) + count, err := strconv.Atoi(cnt) + Expect(err).NotTo(HaveOccurred()) + Expect(count).To(BeNumerically("==", 5)) + }) + It("should generate a runnable project", func() { var controllerPodName string By("init v3 project") diff --git a/testdata/project-v2-addon/go.mod b/testdata/project-v2-addon/go.mod index adaa9b08668..5f764af929d 100644 --- a/testdata/project-v2-addon/go.mod +++ b/testdata/project-v2-addon/go.mod @@ -6,8 +6,10 @@ require ( github.com/go-logr/logr v0.1.0 github.com/onsi/ginkgo v1.11.0 github.com/onsi/gomega v1.8.1 - k8s.io/apimachinery v0.17.2 - k8s.io/client-go v0.17.2 - sigs.k8s.io/controller-runtime v0.5.0 - sigs.k8s.io/kubebuilder-declarative-pattern v0.0.0-20200415210853-85eb326a6add + gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e // indirect + k8s.io/apimachinery v0.18.2 + k8s.io/client-go v0.18.2 + sigs.k8s.io/controller-runtime v0.6.0 + sigs.k8s.io/kubebuilder-declarative-pattern v0.0.0-20200508060342-d7f9f832e44b + sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06 // indirect ) diff --git a/testdata/project-v2-multigroup/apis/crew/v1/captain_types.go b/testdata/project-v2-multigroup/api/crew/v1/captain_types.go similarity index 100% rename from testdata/project-v2-multigroup/apis/crew/v1/captain_types.go rename to testdata/project-v2-multigroup/api/crew/v1/captain_types.go diff --git a/testdata/project-v2-multigroup/apis/crew/v1/captain_webhook.go b/testdata/project-v2-multigroup/api/crew/v1/captain_webhook.go similarity index 100% rename from testdata/project-v2-multigroup/apis/crew/v1/captain_webhook.go rename to testdata/project-v2-multigroup/api/crew/v1/captain_webhook.go diff --git a/testdata/project-v2-multigroup/apis/crew/v1/groupversion_info.go b/testdata/project-v2-multigroup/api/crew/v1/groupversion_info.go similarity index 100% rename from testdata/project-v2-multigroup/apis/crew/v1/groupversion_info.go rename to testdata/project-v2-multigroup/api/crew/v1/groupversion_info.go diff --git a/testdata/project-v2-multigroup/apis/crew/v1/zz_generated.deepcopy.go b/testdata/project-v2-multigroup/api/crew/v1/zz_generated.deepcopy.go similarity index 100% rename from testdata/project-v2-multigroup/apis/crew/v1/zz_generated.deepcopy.go rename to testdata/project-v2-multigroup/api/crew/v1/zz_generated.deepcopy.go diff --git a/testdata/project-v2-multigroup/apis/foo.policy/v1/groupversion_info.go b/testdata/project-v2-multigroup/api/foo.policy/v1/groupversion_info.go similarity index 100% rename from testdata/project-v2-multigroup/apis/foo.policy/v1/groupversion_info.go rename to testdata/project-v2-multigroup/api/foo.policy/v1/groupversion_info.go diff --git a/testdata/project-v2-multigroup/apis/foo.policy/v1/healthcheckpolicy_types.go b/testdata/project-v2-multigroup/api/foo.policy/v1/healthcheckpolicy_types.go similarity index 100% rename from testdata/project-v2-multigroup/apis/foo.policy/v1/healthcheckpolicy_types.go rename to testdata/project-v2-multigroup/api/foo.policy/v1/healthcheckpolicy_types.go diff --git a/testdata/project-v2-multigroup/apis/foo.policy/v1/zz_generated.deepcopy.go b/testdata/project-v2-multigroup/api/foo.policy/v1/zz_generated.deepcopy.go similarity index 100% rename from testdata/project-v2-multigroup/apis/foo.policy/v1/zz_generated.deepcopy.go rename to testdata/project-v2-multigroup/api/foo.policy/v1/zz_generated.deepcopy.go diff --git a/testdata/project-v2-multigroup/apis/sea-creatures/v1beta1/groupversion_info.go b/testdata/project-v2-multigroup/api/sea-creatures/v1beta1/groupversion_info.go similarity index 100% rename from testdata/project-v2-multigroup/apis/sea-creatures/v1beta1/groupversion_info.go rename to testdata/project-v2-multigroup/api/sea-creatures/v1beta1/groupversion_info.go diff --git a/testdata/project-v2-multigroup/apis/sea-creatures/v1beta1/kraken_types.go b/testdata/project-v2-multigroup/api/sea-creatures/v1beta1/kraken_types.go similarity index 100% rename from testdata/project-v2-multigroup/apis/sea-creatures/v1beta1/kraken_types.go rename to testdata/project-v2-multigroup/api/sea-creatures/v1beta1/kraken_types.go diff --git a/testdata/project-v2-multigroup/apis/sea-creatures/v1beta1/zz_generated.deepcopy.go b/testdata/project-v2-multigroup/api/sea-creatures/v1beta1/zz_generated.deepcopy.go similarity index 100% rename from testdata/project-v2-multigroup/apis/sea-creatures/v1beta1/zz_generated.deepcopy.go rename to testdata/project-v2-multigroup/api/sea-creatures/v1beta1/zz_generated.deepcopy.go diff --git a/testdata/project-v2-multigroup/apis/sea-creatures/v1beta2/groupversion_info.go b/testdata/project-v2-multigroup/api/sea-creatures/v1beta2/groupversion_info.go similarity index 100% rename from testdata/project-v2-multigroup/apis/sea-creatures/v1beta2/groupversion_info.go rename to testdata/project-v2-multigroup/api/sea-creatures/v1beta2/groupversion_info.go diff --git a/testdata/project-v2-multigroup/apis/sea-creatures/v1beta2/leviathan_types.go b/testdata/project-v2-multigroup/api/sea-creatures/v1beta2/leviathan_types.go similarity index 100% rename from testdata/project-v2-multigroup/apis/sea-creatures/v1beta2/leviathan_types.go rename to testdata/project-v2-multigroup/api/sea-creatures/v1beta2/leviathan_types.go diff --git a/testdata/project-v2-multigroup/apis/sea-creatures/v1beta2/zz_generated.deepcopy.go b/testdata/project-v2-multigroup/api/sea-creatures/v1beta2/zz_generated.deepcopy.go similarity index 100% rename from testdata/project-v2-multigroup/apis/sea-creatures/v1beta2/zz_generated.deepcopy.go rename to testdata/project-v2-multigroup/api/sea-creatures/v1beta2/zz_generated.deepcopy.go diff --git a/testdata/project-v2-multigroup/apis/ship/v1/destroyer_types.go b/testdata/project-v2-multigroup/api/ship/v1/destroyer_types.go similarity index 100% rename from testdata/project-v2-multigroup/apis/ship/v1/destroyer_types.go rename to testdata/project-v2-multigroup/api/ship/v1/destroyer_types.go diff --git a/testdata/project-v2-multigroup/apis/ship/v1/groupversion_info.go b/testdata/project-v2-multigroup/api/ship/v1/groupversion_info.go similarity index 100% rename from testdata/project-v2-multigroup/apis/ship/v1/groupversion_info.go rename to testdata/project-v2-multigroup/api/ship/v1/groupversion_info.go diff --git a/testdata/project-v2-multigroup/apis/ship/v1/zz_generated.deepcopy.go b/testdata/project-v2-multigroup/api/ship/v1/zz_generated.deepcopy.go similarity index 100% rename from testdata/project-v2-multigroup/apis/ship/v1/zz_generated.deepcopy.go rename to testdata/project-v2-multigroup/api/ship/v1/zz_generated.deepcopy.go diff --git a/testdata/project-v2-multigroup/apis/ship/v1beta1/frigate_types.go b/testdata/project-v2-multigroup/api/ship/v1beta1/frigate_types.go similarity index 100% rename from testdata/project-v2-multigroup/apis/ship/v1beta1/frigate_types.go rename to testdata/project-v2-multigroup/api/ship/v1beta1/frigate_types.go diff --git a/testdata/project-v2-multigroup/apis/ship/v1beta1/frigate_webhook.go b/testdata/project-v2-multigroup/api/ship/v1beta1/frigate_webhook.go similarity index 100% rename from testdata/project-v2-multigroup/apis/ship/v1beta1/frigate_webhook.go rename to testdata/project-v2-multigroup/api/ship/v1beta1/frigate_webhook.go diff --git a/testdata/project-v2-multigroup/apis/ship/v1beta1/groupversion_info.go b/testdata/project-v2-multigroup/api/ship/v1beta1/groupversion_info.go similarity index 100% rename from testdata/project-v2-multigroup/apis/ship/v1beta1/groupversion_info.go rename to testdata/project-v2-multigroup/api/ship/v1beta1/groupversion_info.go diff --git a/testdata/project-v2-multigroup/apis/ship/v1beta1/zz_generated.deepcopy.go b/testdata/project-v2-multigroup/api/ship/v1beta1/zz_generated.deepcopy.go similarity index 100% rename from testdata/project-v2-multigroup/apis/ship/v1beta1/zz_generated.deepcopy.go rename to testdata/project-v2-multigroup/api/ship/v1beta1/zz_generated.deepcopy.go diff --git a/testdata/project-v2-multigroup/apis/ship/v2alpha1/cruiser_types.go b/testdata/project-v2-multigroup/api/ship/v2alpha1/cruiser_types.go similarity index 100% rename from testdata/project-v2-multigroup/apis/ship/v2alpha1/cruiser_types.go rename to testdata/project-v2-multigroup/api/ship/v2alpha1/cruiser_types.go diff --git a/testdata/project-v2-multigroup/apis/ship/v2alpha1/groupversion_info.go b/testdata/project-v2-multigroup/api/ship/v2alpha1/groupversion_info.go similarity index 100% rename from testdata/project-v2-multigroup/apis/ship/v2alpha1/groupversion_info.go rename to testdata/project-v2-multigroup/api/ship/v2alpha1/groupversion_info.go diff --git a/testdata/project-v2-multigroup/apis/ship/v2alpha1/zz_generated.deepcopy.go b/testdata/project-v2-multigroup/api/ship/v2alpha1/zz_generated.deepcopy.go similarity index 100% rename from testdata/project-v2-multigroup/apis/ship/v2alpha1/zz_generated.deepcopy.go rename to testdata/project-v2-multigroup/api/ship/v2alpha1/zz_generated.deepcopy.go diff --git a/testdata/project-v2-multigroup/controllers/crew/captain_controller.go b/testdata/project-v2-multigroup/controllers/crew/captain_controller.go index 2c4125e68ae..9136043e2e5 100644 --- a/testdata/project-v2-multigroup/controllers/crew/captain_controller.go +++ b/testdata/project-v2-multigroup/controllers/crew/captain_controller.go @@ -24,7 +24,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" - crewv1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/apis/crew/v1" + crewv1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/api/crew/v1" ) // CaptainReconciler reconciles a Captain object diff --git a/testdata/project-v2-multigroup/controllers/crew/suite_test.go b/testdata/project-v2-multigroup/controllers/crew/suite_test.go index 8859fd5ccaf..8583abf166c 100644 --- a/testdata/project-v2-multigroup/controllers/crew/suite_test.go +++ b/testdata/project-v2-multigroup/controllers/crew/suite_test.go @@ -30,7 +30,7 @@ import ( logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/log/zap" - crewv1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/apis/crew/v1" + crewv1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/api/crew/v1" // +kubebuilder:scaffold:imports ) diff --git a/testdata/project-v2-multigroup/controllers/foo.policy/healthcheckpolicy_controller.go b/testdata/project-v2-multigroup/controllers/foo.policy/healthcheckpolicy_controller.go index 99a54781c3d..c99934a7d2a 100644 --- a/testdata/project-v2-multigroup/controllers/foo.policy/healthcheckpolicy_controller.go +++ b/testdata/project-v2-multigroup/controllers/foo.policy/healthcheckpolicy_controller.go @@ -24,7 +24,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" - foopolicyv1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/apis/foo.policy/v1" + foopolicyv1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/api/foo.policy/v1" ) // HealthCheckPolicyReconciler reconciles a HealthCheckPolicy object diff --git a/testdata/project-v2-multigroup/controllers/foo.policy/suite_test.go b/testdata/project-v2-multigroup/controllers/foo.policy/suite_test.go index bef9440b9ea..48b5f0e4187 100644 --- a/testdata/project-v2-multigroup/controllers/foo.policy/suite_test.go +++ b/testdata/project-v2-multigroup/controllers/foo.policy/suite_test.go @@ -30,7 +30,7 @@ import ( logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/log/zap" - foopolicyv1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/apis/foo.policy/v1" + foopolicyv1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/api/foo.policy/v1" // +kubebuilder:scaffold:imports ) diff --git a/testdata/project-v2-multigroup/controllers/sea-creatures/kraken_controller.go b/testdata/project-v2-multigroup/controllers/sea-creatures/kraken_controller.go index 750498d39ca..053d1ef9208 100644 --- a/testdata/project-v2-multigroup/controllers/sea-creatures/kraken_controller.go +++ b/testdata/project-v2-multigroup/controllers/sea-creatures/kraken_controller.go @@ -24,7 +24,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" - seacreaturesv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/apis/sea-creatures/v1beta1" + seacreaturesv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/api/sea-creatures/v1beta1" ) // KrakenReconciler reconciles a Kraken object diff --git a/testdata/project-v2-multigroup/controllers/sea-creatures/leviathan_controller.go b/testdata/project-v2-multigroup/controllers/sea-creatures/leviathan_controller.go index dd32ce5d000..fabbabd2c0e 100644 --- a/testdata/project-v2-multigroup/controllers/sea-creatures/leviathan_controller.go +++ b/testdata/project-v2-multigroup/controllers/sea-creatures/leviathan_controller.go @@ -24,7 +24,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" - seacreaturesv1beta2 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/apis/sea-creatures/v1beta2" + seacreaturesv1beta2 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/api/sea-creatures/v1beta2" ) // LeviathanReconciler reconciles a Leviathan object diff --git a/testdata/project-v2-multigroup/controllers/sea-creatures/suite_test.go b/testdata/project-v2-multigroup/controllers/sea-creatures/suite_test.go index 77cf98cdf63..b798b4790a9 100644 --- a/testdata/project-v2-multigroup/controllers/sea-creatures/suite_test.go +++ b/testdata/project-v2-multigroup/controllers/sea-creatures/suite_test.go @@ -30,8 +30,8 @@ import ( logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/log/zap" - seacreaturesv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/apis/sea-creatures/v1beta1" - seacreaturesv1beta2 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/apis/sea-creatures/v1beta2" + seacreaturesv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/api/sea-creatures/v1beta1" + seacreaturesv1beta2 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/api/sea-creatures/v1beta2" // +kubebuilder:scaffold:imports ) diff --git a/testdata/project-v2-multigroup/controllers/ship/cruiser_controller.go b/testdata/project-v2-multigroup/controllers/ship/cruiser_controller.go index f8b0d01d336..df66e57ca04 100644 --- a/testdata/project-v2-multigroup/controllers/ship/cruiser_controller.go +++ b/testdata/project-v2-multigroup/controllers/ship/cruiser_controller.go @@ -24,7 +24,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" - shipv2alpha1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/apis/ship/v2alpha1" + shipv2alpha1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/api/ship/v2alpha1" ) // CruiserReconciler reconciles a Cruiser object diff --git a/testdata/project-v2-multigroup/controllers/ship/destroyer_controller.go b/testdata/project-v2-multigroup/controllers/ship/destroyer_controller.go index d2f07107b87..249bb8848d2 100644 --- a/testdata/project-v2-multigroup/controllers/ship/destroyer_controller.go +++ b/testdata/project-v2-multigroup/controllers/ship/destroyer_controller.go @@ -24,7 +24,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" - shipv1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/apis/ship/v1" + shipv1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/api/ship/v1" ) // DestroyerReconciler reconciles a Destroyer object diff --git a/testdata/project-v2-multigroup/controllers/ship/frigate_controller.go b/testdata/project-v2-multigroup/controllers/ship/frigate_controller.go index b9887cda17d..9205e34459c 100644 --- a/testdata/project-v2-multigroup/controllers/ship/frigate_controller.go +++ b/testdata/project-v2-multigroup/controllers/ship/frigate_controller.go @@ -24,7 +24,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" - shipv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/apis/ship/v1beta1" + shipv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/api/ship/v1beta1" ) // FrigateReconciler reconciles a Frigate object diff --git a/testdata/project-v2-multigroup/controllers/ship/suite_test.go b/testdata/project-v2-multigroup/controllers/ship/suite_test.go index f06f8035bb4..6eedb7a61b4 100644 --- a/testdata/project-v2-multigroup/controllers/ship/suite_test.go +++ b/testdata/project-v2-multigroup/controllers/ship/suite_test.go @@ -30,9 +30,9 @@ import ( logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/log/zap" - shipv1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/apis/ship/v1" - shipv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/apis/ship/v1beta1" - shipv2alpha1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/apis/ship/v2alpha1" + shipv1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/api/ship/v1" + shipv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/api/ship/v1beta1" + shipv2alpha1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/api/ship/v2alpha1" // +kubebuilder:scaffold:imports ) diff --git a/testdata/project-v2-multigroup/main.go b/testdata/project-v2-multigroup/main.go index e9009d18efc..697facc7c17 100644 --- a/testdata/project-v2-multigroup/main.go +++ b/testdata/project-v2-multigroup/main.go @@ -27,13 +27,13 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/log/zap" - crewv1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/apis/crew/v1" - foopolicyv1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/apis/foo.policy/v1" - seacreaturesv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/apis/sea-creatures/v1beta1" - seacreaturesv1beta2 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/apis/sea-creatures/v1beta2" - shipv1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/apis/ship/v1" - shipv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/apis/ship/v1beta1" - shipv2alpha1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/apis/ship/v2alpha1" + crewv1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/api/crew/v1" + foopolicyv1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/api/foo.policy/v1" + seacreaturesv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/api/sea-creatures/v1beta1" + seacreaturesv1beta2 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/api/sea-creatures/v1beta2" + shipv1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/api/ship/v1" + shipv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/api/ship/v1beta1" + shipv2alpha1 "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/api/ship/v2alpha1" crewcontroller "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/controllers/crew" foopolicycontroller "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/controllers/foo.policy" seacreaturescontroller "sigs.k8s.io/kubebuilder/testdata/project-v2-multigroup/controllers/sea-creatures" diff --git a/testdata/project-v3-addon/go.mod b/testdata/project-v3-addon/go.mod index d1b0ee94070..6960606b8bb 100644 --- a/testdata/project-v3-addon/go.mod +++ b/testdata/project-v3-addon/go.mod @@ -6,8 +6,10 @@ require ( github.com/go-logr/logr v0.1.0 github.com/onsi/ginkgo v1.11.0 github.com/onsi/gomega v1.8.1 - k8s.io/apimachinery v0.17.2 - k8s.io/client-go v0.17.2 - sigs.k8s.io/controller-runtime v0.5.0 - sigs.k8s.io/kubebuilder-declarative-pattern v0.0.0-20200415210853-85eb326a6add + gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e // indirect + k8s.io/apimachinery v0.18.2 + k8s.io/client-go v0.18.2 + sigs.k8s.io/controller-runtime v0.6.0 + sigs.k8s.io/kubebuilder-declarative-pattern v0.0.0-20200508060342-d7f9f832e44b + sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06 // indirect ) diff --git a/testdata/project-v3-multigroup/apis/crew/v1/captain_types.go b/testdata/project-v3-multigroup/api/crew/v1/captain_types.go similarity index 100% rename from testdata/project-v3-multigroup/apis/crew/v1/captain_types.go rename to testdata/project-v3-multigroup/api/crew/v1/captain_types.go diff --git a/testdata/project-v3-multigroup/apis/crew/v1/captain_webhook.go b/testdata/project-v3-multigroup/api/crew/v1/captain_webhook.go similarity index 100% rename from testdata/project-v3-multigroup/apis/crew/v1/captain_webhook.go rename to testdata/project-v3-multigroup/api/crew/v1/captain_webhook.go diff --git a/testdata/project-v3-multigroup/apis/crew/v1/groupversion_info.go b/testdata/project-v3-multigroup/api/crew/v1/groupversion_info.go similarity index 100% rename from testdata/project-v3-multigroup/apis/crew/v1/groupversion_info.go rename to testdata/project-v3-multigroup/api/crew/v1/groupversion_info.go diff --git a/testdata/project-v3-multigroup/apis/crew/v1/zz_generated.deepcopy.go b/testdata/project-v3-multigroup/api/crew/v1/zz_generated.deepcopy.go similarity index 100% rename from testdata/project-v3-multigroup/apis/crew/v1/zz_generated.deepcopy.go rename to testdata/project-v3-multigroup/api/crew/v1/zz_generated.deepcopy.go diff --git a/testdata/project-v3-multigroup/apis/foo.policy/v1/groupversion_info.go b/testdata/project-v3-multigroup/api/foo.policy/v1/groupversion_info.go similarity index 100% rename from testdata/project-v3-multigroup/apis/foo.policy/v1/groupversion_info.go rename to testdata/project-v3-multigroup/api/foo.policy/v1/groupversion_info.go diff --git a/testdata/project-v3-multigroup/apis/foo.policy/v1/healthcheckpolicy_types.go b/testdata/project-v3-multigroup/api/foo.policy/v1/healthcheckpolicy_types.go similarity index 100% rename from testdata/project-v3-multigroup/apis/foo.policy/v1/healthcheckpolicy_types.go rename to testdata/project-v3-multigroup/api/foo.policy/v1/healthcheckpolicy_types.go diff --git a/testdata/project-v3-multigroup/apis/foo.policy/v1/zz_generated.deepcopy.go b/testdata/project-v3-multigroup/api/foo.policy/v1/zz_generated.deepcopy.go similarity index 100% rename from testdata/project-v3-multigroup/apis/foo.policy/v1/zz_generated.deepcopy.go rename to testdata/project-v3-multigroup/api/foo.policy/v1/zz_generated.deepcopy.go diff --git a/testdata/project-v3-multigroup/apis/sea-creatures/v1beta1/groupversion_info.go b/testdata/project-v3-multigroup/api/sea-creatures/v1beta1/groupversion_info.go similarity index 100% rename from testdata/project-v3-multigroup/apis/sea-creatures/v1beta1/groupversion_info.go rename to testdata/project-v3-multigroup/api/sea-creatures/v1beta1/groupversion_info.go diff --git a/testdata/project-v3-multigroup/apis/sea-creatures/v1beta1/kraken_types.go b/testdata/project-v3-multigroup/api/sea-creatures/v1beta1/kraken_types.go similarity index 100% rename from testdata/project-v3-multigroup/apis/sea-creatures/v1beta1/kraken_types.go rename to testdata/project-v3-multigroup/api/sea-creatures/v1beta1/kraken_types.go diff --git a/testdata/project-v3-multigroup/apis/sea-creatures/v1beta1/zz_generated.deepcopy.go b/testdata/project-v3-multigroup/api/sea-creatures/v1beta1/zz_generated.deepcopy.go similarity index 100% rename from testdata/project-v3-multigroup/apis/sea-creatures/v1beta1/zz_generated.deepcopy.go rename to testdata/project-v3-multigroup/api/sea-creatures/v1beta1/zz_generated.deepcopy.go diff --git a/testdata/project-v3-multigroup/apis/sea-creatures/v1beta2/groupversion_info.go b/testdata/project-v3-multigroup/api/sea-creatures/v1beta2/groupversion_info.go similarity index 100% rename from testdata/project-v3-multigroup/apis/sea-creatures/v1beta2/groupversion_info.go rename to testdata/project-v3-multigroup/api/sea-creatures/v1beta2/groupversion_info.go diff --git a/testdata/project-v3-multigroup/apis/sea-creatures/v1beta2/leviathan_types.go b/testdata/project-v3-multigroup/api/sea-creatures/v1beta2/leviathan_types.go similarity index 100% rename from testdata/project-v3-multigroup/apis/sea-creatures/v1beta2/leviathan_types.go rename to testdata/project-v3-multigroup/api/sea-creatures/v1beta2/leviathan_types.go diff --git a/testdata/project-v3-multigroup/apis/sea-creatures/v1beta2/zz_generated.deepcopy.go b/testdata/project-v3-multigroup/api/sea-creatures/v1beta2/zz_generated.deepcopy.go similarity index 100% rename from testdata/project-v3-multigroup/apis/sea-creatures/v1beta2/zz_generated.deepcopy.go rename to testdata/project-v3-multigroup/api/sea-creatures/v1beta2/zz_generated.deepcopy.go diff --git a/testdata/project-v3-multigroup/apis/ship/v1/destroyer_types.go b/testdata/project-v3-multigroup/api/ship/v1/destroyer_types.go similarity index 100% rename from testdata/project-v3-multigroup/apis/ship/v1/destroyer_types.go rename to testdata/project-v3-multigroup/api/ship/v1/destroyer_types.go diff --git a/testdata/project-v3-multigroup/apis/ship/v1/groupversion_info.go b/testdata/project-v3-multigroup/api/ship/v1/groupversion_info.go similarity index 100% rename from testdata/project-v3-multigroup/apis/ship/v1/groupversion_info.go rename to testdata/project-v3-multigroup/api/ship/v1/groupversion_info.go diff --git a/testdata/project-v3-multigroup/apis/ship/v1/zz_generated.deepcopy.go b/testdata/project-v3-multigroup/api/ship/v1/zz_generated.deepcopy.go similarity index 100% rename from testdata/project-v3-multigroup/apis/ship/v1/zz_generated.deepcopy.go rename to testdata/project-v3-multigroup/api/ship/v1/zz_generated.deepcopy.go diff --git a/testdata/project-v3-multigroup/apis/ship/v1beta1/frigate_types.go b/testdata/project-v3-multigroup/api/ship/v1beta1/frigate_types.go similarity index 100% rename from testdata/project-v3-multigroup/apis/ship/v1beta1/frigate_types.go rename to testdata/project-v3-multigroup/api/ship/v1beta1/frigate_types.go diff --git a/testdata/project-v3-multigroup/apis/ship/v1beta1/frigate_webhook.go b/testdata/project-v3-multigroup/api/ship/v1beta1/frigate_webhook.go similarity index 100% rename from testdata/project-v3-multigroup/apis/ship/v1beta1/frigate_webhook.go rename to testdata/project-v3-multigroup/api/ship/v1beta1/frigate_webhook.go diff --git a/testdata/project-v3-multigroup/apis/ship/v1beta1/groupversion_info.go b/testdata/project-v3-multigroup/api/ship/v1beta1/groupversion_info.go similarity index 100% rename from testdata/project-v3-multigroup/apis/ship/v1beta1/groupversion_info.go rename to testdata/project-v3-multigroup/api/ship/v1beta1/groupversion_info.go diff --git a/testdata/project-v3-multigroup/apis/ship/v1beta1/zz_generated.deepcopy.go b/testdata/project-v3-multigroup/api/ship/v1beta1/zz_generated.deepcopy.go similarity index 100% rename from testdata/project-v3-multigroup/apis/ship/v1beta1/zz_generated.deepcopy.go rename to testdata/project-v3-multigroup/api/ship/v1beta1/zz_generated.deepcopy.go diff --git a/testdata/project-v3-multigroup/apis/ship/v2alpha1/cruiser_types.go b/testdata/project-v3-multigroup/api/ship/v2alpha1/cruiser_types.go similarity index 100% rename from testdata/project-v3-multigroup/apis/ship/v2alpha1/cruiser_types.go rename to testdata/project-v3-multigroup/api/ship/v2alpha1/cruiser_types.go diff --git a/testdata/project-v3-multigroup/apis/ship/v2alpha1/groupversion_info.go b/testdata/project-v3-multigroup/api/ship/v2alpha1/groupversion_info.go similarity index 100% rename from testdata/project-v3-multigroup/apis/ship/v2alpha1/groupversion_info.go rename to testdata/project-v3-multigroup/api/ship/v2alpha1/groupversion_info.go diff --git a/testdata/project-v3-multigroup/apis/ship/v2alpha1/zz_generated.deepcopy.go b/testdata/project-v3-multigroup/api/ship/v2alpha1/zz_generated.deepcopy.go similarity index 100% rename from testdata/project-v3-multigroup/apis/ship/v2alpha1/zz_generated.deepcopy.go rename to testdata/project-v3-multigroup/api/ship/v2alpha1/zz_generated.deepcopy.go diff --git a/testdata/project-v3-multigroup/controllers/crew/captain_controller.go b/testdata/project-v3-multigroup/controllers/crew/captain_controller.go index 4ece0a54d13..70440e17991 100644 --- a/testdata/project-v3-multigroup/controllers/crew/captain_controller.go +++ b/testdata/project-v3-multigroup/controllers/crew/captain_controller.go @@ -24,7 +24,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" - crewv1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/apis/crew/v1" + crewv1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/api/crew/v1" ) // CaptainReconciler reconciles a Captain object diff --git a/testdata/project-v3-multigroup/controllers/crew/suite_test.go b/testdata/project-v3-multigroup/controllers/crew/suite_test.go index bc8be190119..77886006a6e 100644 --- a/testdata/project-v3-multigroup/controllers/crew/suite_test.go +++ b/testdata/project-v3-multigroup/controllers/crew/suite_test.go @@ -30,7 +30,7 @@ import ( logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/log/zap" - crewv1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/apis/crew/v1" + crewv1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/api/crew/v1" // +kubebuilder:scaffold:imports ) diff --git a/testdata/project-v3-multigroup/controllers/foo.policy/healthcheckpolicy_controller.go b/testdata/project-v3-multigroup/controllers/foo.policy/healthcheckpolicy_controller.go index c05f36b3e64..4fe9cdf6e92 100644 --- a/testdata/project-v3-multigroup/controllers/foo.policy/healthcheckpolicy_controller.go +++ b/testdata/project-v3-multigroup/controllers/foo.policy/healthcheckpolicy_controller.go @@ -24,7 +24,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" - foopolicyv1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/apis/foo.policy/v1" + foopolicyv1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/api/foo.policy/v1" ) // HealthCheckPolicyReconciler reconciles a HealthCheckPolicy object diff --git a/testdata/project-v3-multigroup/controllers/foo.policy/suite_test.go b/testdata/project-v3-multigroup/controllers/foo.policy/suite_test.go index a75aa322952..5f7879de224 100644 --- a/testdata/project-v3-multigroup/controllers/foo.policy/suite_test.go +++ b/testdata/project-v3-multigroup/controllers/foo.policy/suite_test.go @@ -30,7 +30,7 @@ import ( logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/log/zap" - foopolicyv1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/apis/foo.policy/v1" + foopolicyv1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/api/foo.policy/v1" // +kubebuilder:scaffold:imports ) diff --git a/testdata/project-v3-multigroup/controllers/sea-creatures/kraken_controller.go b/testdata/project-v3-multigroup/controllers/sea-creatures/kraken_controller.go index c16cd4177a8..1c5641b421d 100644 --- a/testdata/project-v3-multigroup/controllers/sea-creatures/kraken_controller.go +++ b/testdata/project-v3-multigroup/controllers/sea-creatures/kraken_controller.go @@ -24,7 +24,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" - seacreaturesv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/apis/sea-creatures/v1beta1" + seacreaturesv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/api/sea-creatures/v1beta1" ) // KrakenReconciler reconciles a Kraken object diff --git a/testdata/project-v3-multigroup/controllers/sea-creatures/leviathan_controller.go b/testdata/project-v3-multigroup/controllers/sea-creatures/leviathan_controller.go index d857c2d3c2b..9279028def3 100644 --- a/testdata/project-v3-multigroup/controllers/sea-creatures/leviathan_controller.go +++ b/testdata/project-v3-multigroup/controllers/sea-creatures/leviathan_controller.go @@ -24,7 +24,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" - seacreaturesv1beta2 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/apis/sea-creatures/v1beta2" + seacreaturesv1beta2 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/api/sea-creatures/v1beta2" ) // LeviathanReconciler reconciles a Leviathan object diff --git a/testdata/project-v3-multigroup/controllers/sea-creatures/suite_test.go b/testdata/project-v3-multigroup/controllers/sea-creatures/suite_test.go index da5788a7de6..6d95c3ea4f3 100644 --- a/testdata/project-v3-multigroup/controllers/sea-creatures/suite_test.go +++ b/testdata/project-v3-multigroup/controllers/sea-creatures/suite_test.go @@ -30,8 +30,8 @@ import ( logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/log/zap" - seacreaturesv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/apis/sea-creatures/v1beta1" - seacreaturesv1beta2 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/apis/sea-creatures/v1beta2" + seacreaturesv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/api/sea-creatures/v1beta1" + seacreaturesv1beta2 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/api/sea-creatures/v1beta2" // +kubebuilder:scaffold:imports ) diff --git a/testdata/project-v3-multigroup/controllers/ship/cruiser_controller.go b/testdata/project-v3-multigroup/controllers/ship/cruiser_controller.go index 95f3d21d489..1f576badb0a 100644 --- a/testdata/project-v3-multigroup/controllers/ship/cruiser_controller.go +++ b/testdata/project-v3-multigroup/controllers/ship/cruiser_controller.go @@ -24,7 +24,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" - shipv2alpha1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/apis/ship/v2alpha1" + shipv2alpha1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/api/ship/v2alpha1" ) // CruiserReconciler reconciles a Cruiser object diff --git a/testdata/project-v3-multigroup/controllers/ship/destroyer_controller.go b/testdata/project-v3-multigroup/controllers/ship/destroyer_controller.go index b41c07cb745..eac7626eab8 100644 --- a/testdata/project-v3-multigroup/controllers/ship/destroyer_controller.go +++ b/testdata/project-v3-multigroup/controllers/ship/destroyer_controller.go @@ -24,7 +24,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" - shipv1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/apis/ship/v1" + shipv1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/api/ship/v1" ) // DestroyerReconciler reconciles a Destroyer object diff --git a/testdata/project-v3-multigroup/controllers/ship/frigate_controller.go b/testdata/project-v3-multigroup/controllers/ship/frigate_controller.go index cac7fe7bb79..31492a8414c 100644 --- a/testdata/project-v3-multigroup/controllers/ship/frigate_controller.go +++ b/testdata/project-v3-multigroup/controllers/ship/frigate_controller.go @@ -24,7 +24,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" - shipv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/apis/ship/v1beta1" + shipv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/api/ship/v1beta1" ) // FrigateReconciler reconciles a Frigate object diff --git a/testdata/project-v3-multigroup/controllers/ship/suite_test.go b/testdata/project-v3-multigroup/controllers/ship/suite_test.go index 0fedb93aeaa..04181245301 100644 --- a/testdata/project-v3-multigroup/controllers/ship/suite_test.go +++ b/testdata/project-v3-multigroup/controllers/ship/suite_test.go @@ -30,9 +30,9 @@ import ( logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/log/zap" - shipv1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/apis/ship/v1" - shipv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/apis/ship/v1beta1" - shipv2alpha1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/apis/ship/v2alpha1" + shipv1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/api/ship/v1" + shipv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/api/ship/v1beta1" + shipv2alpha1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/api/ship/v2alpha1" // +kubebuilder:scaffold:imports ) diff --git a/testdata/project-v3-multigroup/main.go b/testdata/project-v3-multigroup/main.go index 2e456b5a3c1..ec1f25a866b 100644 --- a/testdata/project-v3-multigroup/main.go +++ b/testdata/project-v3-multigroup/main.go @@ -27,13 +27,13 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/log/zap" - crewv1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/apis/crew/v1" - foopolicyv1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/apis/foo.policy/v1" - seacreaturesv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/apis/sea-creatures/v1beta1" - seacreaturesv1beta2 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/apis/sea-creatures/v1beta2" - shipv1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/apis/ship/v1" - shipv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/apis/ship/v1beta1" - shipv2alpha1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/apis/ship/v2alpha1" + crewv1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/api/crew/v1" + foopolicyv1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/api/foo.policy/v1" + seacreaturesv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/api/sea-creatures/v1beta1" + seacreaturesv1beta2 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/api/sea-creatures/v1beta2" + shipv1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/api/ship/v1" + shipv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/api/ship/v1beta1" + shipv2alpha1 "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/api/ship/v2alpha1" crewcontroller "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/controllers/crew" foopolicycontroller "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/controllers/foo.policy" seacreaturescontroller "sigs.k8s.io/kubebuilder/testdata/project-v3-multigroup/controllers/sea-creatures"