From f2dc98c55105dafef3a0218f62d839474c78e55f Mon Sep 17 00:00:00 2001 From: Camila Macedo Date: Wed, 13 Apr 2022 22:53:45 +0100 Subject: [PATCH] :sparkles: add kustomize/v2-alpha plugin to support kustomize versions >= v4 (pinned version 4.5.3) --- cmd/main.go | 2 + docs/book/src/plugins/available-plugins.md | 3 +- docs/book/src/plugins/kustomize-v1.md | 2 +- docs/book/src/plugins/kustomize-v2-alpha.md | 118 +++++++ docs/book/src/quick-start.md | 9 + pkg/plugins/common/kustomize/v1/plugin.go | 3 + pkg/plugins/common/kustomize/v2/api.go | 38 +++ pkg/plugins/common/kustomize/v2/create.go | 58 ++++ pkg/plugins/common/kustomize/v2/init.go | 103 ++++++ pkg/plugins/common/kustomize/v2/plugin.go | 68 ++++ .../common/kustomize/v2/scaffolds/api.go | 87 ++++++ .../common/kustomize/v2/scaffolds/init.go | 84 +++++ .../config/certmanager/certificate.go | 71 +++++ .../config/certmanager/kustomization.go | 51 +++ .../config/certmanager/kustomizeconfig.go | 63 ++++ .../templates/config/crd/kustomization.go | 125 ++++++++ .../templates/config/crd/kustomizeconfig.go | 72 +++++ .../crd/patches/enablecainjection_patch.go | 61 ++++ .../config/crd/patches/enablewebhook_patch.go | 78 +++++ .../config/kdefault/enablecainection_patch.go | 62 ++++ .../config/kdefault/kustomization.go | 191 ++++++++++++ .../kdefault/manager_auth_proxy_patch.go | 82 +++++ .../config/kdefault/manager_config_patch.go | 63 ++++ .../config/kdefault/webhook_manager_patch.go | 75 +++++ .../templates/config/manager/config.go | 109 +++++++ .../manager/controller_manager_config.go | 58 ++++ .../templates/config/manager/kustomization.go | 55 ++++ .../config/prometheus/kustomization.go | 45 +++ .../templates/config/prometheus/monitor.go | 63 ++++ .../config/rbac/auth_proxy_client_role.go | 52 ++++ .../templates/config/rbac/auth_proxy_role.go | 60 ++++ .../config/rbac/auth_proxy_role_binding.go | 55 ++++ .../config/rbac/auth_proxy_service.go | 58 ++++ .../templates/config/rbac/crd_editor_role.go | 75 +++++ .../templates/config/rbac/crd_viewer_role.go | 71 +++++ .../templates/config/rbac/kustomization.go | 63 ++++ .../config/rbac/leader_election_role.go | 80 +++++ .../rbac/leader_election_role_binding.go | 55 ++++ .../templates/config/rbac/role_binding.go | 55 ++++ .../templates/config/rbac/service_account.go | 48 +++ .../templates/config/samples/crd_sample.go | 59 ++++ .../templates/config/webhook/kustomization.go | 59 ++++ .../config/webhook/kustomizeconfig.go | 72 +++++ .../templates/config/webhook/service.go | 59 ++++ .../common/kustomize/v2/scaffolds/webhook.go | 84 +++++ pkg/plugins/common/kustomize/v2/webhook.go | 38 +++ pkg/plugins/golang/v2/scaffolds/init.go | 6 + pkg/plugins/golang/v3/scaffolds/init.go | 24 +- test/e2e/v3/generate_test.go | 169 ++++++++++ test/e2e/v3/plugin_cluster_test.go | 9 + test/testdata/generate.sh | 3 +- .../.dockerignore | 4 + .../project-v3-with-kustomize-v2/.gitignore | 25 ++ .../project-v3-with-kustomize-v2/Dockerfile | 27 ++ .../project-v3-with-kustomize-v2/Makefile | 133 ++++++++ testdata/project-v3-with-kustomize-v2/PROJECT | 49 +++ .../project-v3-with-kustomize-v2/README.md | 94 ++++++ .../api/v1/admiral_types.go | 65 ++++ .../api/v1/admiral_webhook.go | 45 +++ .../api/v1/captain_types.go | 64 ++++ .../api/v1/captain_webhook.go | 75 +++++ .../api/v1/firstmate_types.go | 64 ++++ .../api/v1/firstmate_webhook.go | 33 ++ .../api/v1/groupversion_info.go | 36 +++ .../api/v1/webhook_suite_test.go | 138 +++++++++ .../api/v1/zz_generated.deepcopy.go | 293 ++++++++++++++++++ .../config/certmanager/certificate.yaml | 25 ++ .../config/certmanager/kustomization.yaml | 5 + .../config/certmanager/kustomizeconfig.yaml | 16 + .../bases/crew.testproject.org_admirals.yaml | 56 ++++ .../bases/crew.testproject.org_captains.yaml | 56 ++++ .../crew.testproject.org_firstmates.yaml | 56 ++++ .../config/crd/kustomization.yaml | 27 ++ .../config/crd/kustomizeconfig.yaml | 19 ++ .../crd/patches/cainjection_in_admirals.yaml | 7 + .../crd/patches/cainjection_in_captains.yaml | 7 + .../patches/cainjection_in_firstmates.yaml | 7 + .../crd/patches/webhook_in_admirals.yaml | 16 + .../crd/patches/webhook_in_captains.yaml | 16 + .../crd/patches/webhook_in_firstmates.yaml | 16 + .../config/default/kustomization.yaml | 144 +++++++++ .../default/manager_auth_proxy_patch.yaml | 34 ++ .../config/default/manager_config_patch.yaml | 20 ++ .../config/default/manager_webhook_patch.yaml | 23 ++ .../default/webhookcainjection_patch.yaml | 15 + .../manager/controller_manager_config.yaml | 11 + .../config/manager/kustomization.yaml | 10 + .../config/manager/manager.yaml | 60 ++++ .../config/prometheus/kustomization.yaml | 2 + .../config/prometheus/monitor.yaml | 20 ++ .../config/rbac/admiral_editor_role.yaml | 24 ++ .../config/rbac/admiral_viewer_role.yaml | 20 ++ .../rbac/auth_proxy_client_clusterrole.yaml | 9 + .../config/rbac/auth_proxy_role.yaml | 17 + .../config/rbac/auth_proxy_role_binding.yaml | 12 + .../config/rbac/auth_proxy_service.yaml | 15 + .../config/rbac/captain_editor_role.yaml | 24 ++ .../config/rbac/captain_viewer_role.yaml | 20 ++ .../config/rbac/firstmate_editor_role.yaml | 24 ++ .../config/rbac/firstmate_viewer_role.yaml | 20 ++ .../config/rbac/kustomization.yaml | 18 ++ .../config/rbac/leader_election_role.yaml | 37 +++ .../rbac/leader_election_role_binding.yaml | 12 + .../config/rbac/role.yaml | 111 +++++++ .../config/rbac/role_binding.yaml | 12 + .../config/rbac/service_account.yaml | 5 + .../config/samples/crew_v1_admiral.yaml | 6 + .../config/samples/crew_v1_captain.yaml | 6 + .../config/samples/crew_v1_firstmate.yaml | 6 + .../config/webhook/kustomization.yaml | 6 + .../config/webhook/kustomizeconfig.yaml | 25 ++ .../config/webhook/manifests.yaml | 74 +++++ .../config/webhook/service.yaml | 13 + .../controllers/admiral_controller.go | 62 ++++ .../controllers/captain_controller.go | 62 ++++ .../controllers/firstmate_controller.go | 62 ++++ .../controllers/laker_controller.go | 61 ++++ .../controllers/suite_test.go | 82 +++++ testdata/project-v3-with-kustomize-v2/go.mod | 74 +++++ .../hack/boilerplate.go.txt | 15 + testdata/project-v3-with-kustomize-v2/main.go | 148 +++++++++ 121 files changed, 6044 insertions(+), 4 deletions(-) create mode 100644 docs/book/src/plugins/kustomize-v2-alpha.md create mode 100644 pkg/plugins/common/kustomize/v2/api.go create mode 100644 pkg/plugins/common/kustomize/v2/create.go create mode 100644 pkg/plugins/common/kustomize/v2/init.go create mode 100644 pkg/plugins/common/kustomize/v2/plugin.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/api.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/init.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/certificate.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/kustomization.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/kustomizeconfig.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/kustomization.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/kustomizeconfig.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/patches/enablecainjection_patch.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/patches/enablewebhook_patch.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/enablecainection_patch.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/kustomization.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/manager_auth_proxy_patch.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/manager_config_patch.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/webhook_manager_patch.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager/config.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager/controller_manager_config.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager/kustomization.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/prometheus/kustomization.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/prometheus/monitor.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/auth_proxy_client_role.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/auth_proxy_role.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/auth_proxy_role_binding.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/auth_proxy_service.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/crd_editor_role.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/crd_viewer_role.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/kustomization.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/leader_election_role.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/leader_election_role_binding.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/role_binding.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/service_account.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/samples/crd_sample.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/kustomization.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/kustomizeconfig.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/service.go create mode 100644 pkg/plugins/common/kustomize/v2/scaffolds/webhook.go create mode 100644 pkg/plugins/common/kustomize/v2/webhook.go create mode 100644 testdata/project-v3-with-kustomize-v2/.dockerignore create mode 100644 testdata/project-v3-with-kustomize-v2/.gitignore create mode 100644 testdata/project-v3-with-kustomize-v2/Dockerfile create mode 100644 testdata/project-v3-with-kustomize-v2/Makefile create mode 100644 testdata/project-v3-with-kustomize-v2/PROJECT create mode 100644 testdata/project-v3-with-kustomize-v2/README.md create mode 100644 testdata/project-v3-with-kustomize-v2/api/v1/admiral_types.go create mode 100644 testdata/project-v3-with-kustomize-v2/api/v1/admiral_webhook.go create mode 100644 testdata/project-v3-with-kustomize-v2/api/v1/captain_types.go create mode 100644 testdata/project-v3-with-kustomize-v2/api/v1/captain_webhook.go create mode 100644 testdata/project-v3-with-kustomize-v2/api/v1/firstmate_types.go create mode 100644 testdata/project-v3-with-kustomize-v2/api/v1/firstmate_webhook.go create mode 100644 testdata/project-v3-with-kustomize-v2/api/v1/groupversion_info.go create mode 100644 testdata/project-v3-with-kustomize-v2/api/v1/webhook_suite_test.go create mode 100644 testdata/project-v3-with-kustomize-v2/api/v1/zz_generated.deepcopy.go create mode 100644 testdata/project-v3-with-kustomize-v2/config/certmanager/certificate.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/certmanager/kustomization.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/certmanager/kustomizeconfig.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/crd/bases/crew.testproject.org_admirals.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/crd/bases/crew.testproject.org_captains.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/crd/bases/crew.testproject.org_firstmates.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/crd/kustomization.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/crd/kustomizeconfig.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/crd/patches/cainjection_in_admirals.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/crd/patches/cainjection_in_captains.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/crd/patches/cainjection_in_firstmates.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/crd/patches/webhook_in_admirals.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/crd/patches/webhook_in_captains.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/crd/patches/webhook_in_firstmates.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/default/kustomization.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/default/manager_auth_proxy_patch.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/default/manager_config_patch.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/default/manager_webhook_patch.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/default/webhookcainjection_patch.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/manager/controller_manager_config.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/manager/kustomization.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/manager/manager.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/prometheus/kustomization.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/prometheus/monitor.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/rbac/admiral_editor_role.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/rbac/admiral_viewer_role.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/rbac/auth_proxy_client_clusterrole.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/rbac/auth_proxy_role.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/rbac/auth_proxy_role_binding.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/rbac/auth_proxy_service.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/rbac/captain_editor_role.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/rbac/captain_viewer_role.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/rbac/firstmate_editor_role.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/rbac/firstmate_viewer_role.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/rbac/kustomization.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/rbac/leader_election_role.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/rbac/leader_election_role_binding.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/rbac/role.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/rbac/role_binding.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/rbac/service_account.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/samples/crew_v1_admiral.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/samples/crew_v1_captain.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/samples/crew_v1_firstmate.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/webhook/kustomization.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/webhook/kustomizeconfig.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/webhook/manifests.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/config/webhook/service.yaml create mode 100644 testdata/project-v3-with-kustomize-v2/controllers/admiral_controller.go create mode 100644 testdata/project-v3-with-kustomize-v2/controllers/captain_controller.go create mode 100644 testdata/project-v3-with-kustomize-v2/controllers/firstmate_controller.go create mode 100644 testdata/project-v3-with-kustomize-v2/controllers/laker_controller.go create mode 100644 testdata/project-v3-with-kustomize-v2/controllers/suite_test.go create mode 100644 testdata/project-v3-with-kustomize-v2/go.mod create mode 100644 testdata/project-v3-with-kustomize-v2/hack/boilerplate.go.txt create mode 100644 testdata/project-v3-with-kustomize-v2/main.go diff --git a/cmd/main.go b/cmd/main.go index 4f34d2fd486..bf8411c0659 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -27,6 +27,7 @@ import ( "sigs.k8s.io/kubebuilder/v3/pkg/machinery" "sigs.k8s.io/kubebuilder/v3/pkg/plugin" kustomizecommonv1 "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1" + kustomizecommonv2 "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2" "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang" declarativev1 "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1" golangv2 "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2" @@ -57,6 +58,7 @@ func main() { golangv3.Plugin{}, gov3Bundle, &kustomizecommonv1.Plugin{}, + &kustomizecommonv2.Plugin{}, &declarativev1.Plugin{}, ), cli.WithPlugins(externalPlugins...), diff --git a/docs/book/src/plugins/available-plugins.md b/docs/book/src/plugins/available-plugins.md index 93534b6f57d..213be4d8adf 100644 --- a/docs/book/src/plugins/available-plugins.md +++ b/docs/book/src/plugins/available-plugins.md @@ -8,6 +8,7 @@ This section describes the plugins supported and shipped in with the Kubebuilder | [go.kubebuilder.io/v2](go-v2-plugin.md) | `go/v2` | Golang plugin responsible for scaffold the legacy layout provided with Kubebuilder CLI >= `2.0.0` and < `3.0.0`. | | [declarative.go.kubebuilder.io/v1](declarative-v1.md) | `declarative/v1` | Optional plugin used to scaffold APIs/controllers using the [kubebuilder-declarative-pattern][kubebuilder-declarative-pattern] project. | | [kustomize.common.kubebuilder.io/v1](kustomize-v1.md) | `kustomize/v1` | Responsible for scaffold all manifests to configure the projects with [kustomize(v3)][kustomize]. (create and update the the `config/` directory). This plugin is used in the composition to create the plugin (`go/v3`). | +| [kustomize.common.kubebuilder.io/v1](kustomize-v2-alpha.md) | `kustomize/v2-alpha` | It has the same purpose of `kustomize/v1`. However, it works with [kustomize][kustomize] version `v4` and address the required changes for the future kustomize configurations. It will probably be used with the future `go/v4-alpha` plugin. | | `base.go.kubebuilder.io/v3` | `base/v3` | Responsible for scaffold all files which specific requires Golang. This plugin is used in the composition to create the plugin (`go/v3`) |