From ce1a6bcdcdc4059806b4f7eac89c9e4ca4546872 Mon Sep 17 00:00:00 2001 From: Camila Macedo <7708031+camilamacedo86@users.noreply.github.com> Date: Tue, 6 Dec 2022 07:23:00 +0000 Subject: [PATCH] :book: Update docs for release 3.8.0 (#3109) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix nil pointer in Finalizer example * :book: fix link for platform support * update kubebuilder core dependencies for k8s 1.25 Signed-off-by: Bryce Palmer * docs: notify deps install to build book * Update controller-tools version (v0.9.2->v0.10.0) * :bug: remove duplicate words and fix spelling mistakes * :sparkles: update kubebuilder kubernetes version * Update the export path of webhook * :book: fix broken links * fixing the kubebuilder install locally curl request * add dependency bot updates * :seedling: Bump actions/checkout from 2 to 3 Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v2...v3) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * :seedling: Bump actions/setup-go from 2 to 3 Bumps [actions/setup-go](https://github.com/actions/setup-go) from 2 to 3. - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/v2...v3) --- updated-dependencies: - dependency-name: actions/setup-go dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * :seedling: Bump goreleaser/goreleaser-action from 2 to 3 Bumps [goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action) from 2 to 3. - [Release notes](https://github.com/goreleaser/goreleaser-action/releases) - [Commits](https://github.com/goreleaser/goreleaser-action/compare/v2...v3) --- updated-dependencies: - dependency-name: goreleaser/goreleaser-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * Bump github.com/spf13/afero from 1.6.0 to 1.9.2 Bumps [github.com/spf13/afero](https://github.com/spf13/afero) from 1.6.0 to 1.9.2. - [Release notes](https://github.com/spf13/afero/releases) - [Commits](https://github.com/spf13/afero/compare/v1.6.0...v1.9.2) --- updated-dependencies: - dependency-name: github.com/spf13/afero dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Bump github.com/onsi/gomega from 1.19.0 to 1.20.2 Bumps [github.com/onsi/gomega](https://github.com/onsi/gomega) from 1.19.0 to 1.20.2. - [Release notes](https://github.com/onsi/gomega/releases) - [Changelog](https://github.com/onsi/gomega/blob/master/CHANGELOG.md) - [Commits](https://github.com/onsi/gomega/compare/v1.19.0...v1.20.2) --- updated-dependencies: - dependency-name: github.com/onsi/gomega dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Bump github.com/sirupsen/logrus from 1.8.1 to 1.9.0 Bumps [github.com/sirupsen/logrus](https://github.com/sirupsen/logrus) from 1.8.1 to 1.9.0. - [Release notes](https://github.com/sirupsen/logrus/releases) - [Changelog](https://github.com/sirupsen/logrus/blob/master/CHANGELOG.md) - [Commits](https://github.com/sirupsen/logrus/compare/v1.8.1...v1.9.0) --- updated-dependencies: - dependency-name: github.com/sirupsen/logrus dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Bump k8s.io/apimachinery from 0.25.0 to 0.25.2 Bumps [k8s.io/apimachinery](https://github.com/kubernetes/apimachinery) from 0.25.0 to 0.25.2. - [Release notes](https://github.com/kubernetes/apimachinery/releases) - [Commits](https://github.com/kubernetes/apimachinery/compare/v0.25.0...v0.25.2) --- updated-dependencies: - dependency-name: k8s.io/apimachinery dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * Bump github.com/gobuffalo/flect from 0.2.5 to 0.3.0 Bumps [github.com/gobuffalo/flect](https://github.com/gobuffalo/flect) from 0.2.5 to 0.3.0. - [Release notes](https://github.com/gobuffalo/flect/releases) - [Commits](https://github.com/gobuffalo/flect/compare/v0.2.5...v0.3.0) --- updated-dependencies: - dependency-name: github.com/gobuffalo/flect dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * docs: describe e2e test towards plugin Co-authored-by: Camila Macedo <7708031+camilamacedo86@users.noreply.github.com> * :seedling: remove WORKSPACE file commited by mistake * remove unused value * Bump github.com/spf13/cobra from 1.4.0 to 1.5.0 Bumps [github.com/spf13/cobra](https://github.com/spf13/cobra) from 1.4.0 to 1.5.0. - [Release notes](https://github.com/spf13/cobra/releases) - [Commits](https://github.com/spf13/cobra/compare/v1.4.0...v1.5.0) --- updated-dependencies: - dependency-name: github.com/spf13/cobra dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Bump github.com/onsi/ginkgo/v2 from 2.1.6 to 2.2.0 Bumps [github.com/onsi/ginkgo/v2](https://github.com/onsi/ginkgo) from 2.1.6 to 2.2.0. - [Release notes](https://github.com/onsi/ginkgo/releases) - [Changelog](https://github.com/onsi/ginkgo/blob/master/CHANGELOG.md) - [Commits](https://github.com/onsi/ginkgo/compare/v2.1.6...v2.2.0) --- updated-dependencies: - dependency-name: github.com/onsi/ginkgo/v2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Bump github.com/cloudflare/cfssl from 1.5.0 to 1.6.3 Bumps [github.com/cloudflare/cfssl](https://github.com/cloudflare/cfssl) from 1.5.0 to 1.6.3. - [Release notes](https://github.com/cloudflare/cfssl/releases) - [Changelog](https://github.com/cloudflare/cfssl/blob/master/CHANGELOG) - [Commits](https://github.com/cloudflare/cfssl/compare/v1.5.0...v1.6.3) --- updated-dependencies: - dependency-name: github.com/cloudflare/cfssl dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * update simple-external-plugin-tutorial * update mdbook * :warning: remove config-gen alpha option * :book: clarifies plugins available and its usage * :book: update doc samples * :sparkles: (go/v4-alpha) : update kustomize version from 4.5.5 to 4.5.7 * :sparkles: (grafana/v1-alpha) : add custom units for custom grafana dashboards (#2965) :sparkles: add custom units for custom grafana dashboards Signed-off-by: Jirka Kremser Signed-off-by: Jirka Kremser * cleanup: cert-manager and prometheus installs into e2e tests * Apply suggestions from code review * fixed bug for component-config flag updated testdata * Make jmrodri and varsha admins Signed-off-by: jesus m. rodriguez * Bump github.com/onsi/gomega from 1.20.2 to 1.21.1 Bumps [github.com/onsi/gomega](https://github.com/onsi/gomega) from 1.20.2 to 1.21.1. - [Release notes](https://github.com/onsi/gomega/releases) - [Changelog](https://github.com/onsi/gomega/blob/master/CHANGELOG.md) - [Commits](https://github.com/onsi/gomega/compare/v1.20.2...v1.21.1) --- updated-dependencies: - dependency-name: github.com/onsi/gomega dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * :book: Updating doc with Installation steps of cert-manager and prometheus (#2982) * Adding installing steps for testing webhooks Adding installing steps for testing webhooks Adding installing steps for testing webhooks Adding installing steps for testing webhooks Adding installing steps for testing webhooks Adding installing steps for testing webhooks Adding installing steps for testing webhooks Adding installing steps for testing webhooks Adding installing steps for testing webhooks Adding installing steps for testing webhooks Adding installing steps for testing webhooks Adding installing steps for testing webhooks * Adding installing steps for testing webhooks * Adding installing steps for testing webhooks * Adding installing steps for testing webhooks * 🐛 : leader-elect arg scaffolded should be scaffolded when component config option is not used (#3013) * updated templates for component config * updates * update * update revert main.go * update revert main.go * revert changes and go thru docs once * Update make build cmd with manifests * Bump github.com/spf13/cobra from 1.5.0 to 1.6.0 Bumps [github.com/spf13/cobra](https://github.com/spf13/cobra) from 1.5.0 to 1.6.0. - [Release notes](https://github.com/spf13/cobra/releases) - [Commits](https://github.com/spf13/cobra/compare/v1.5.0...v1.6.0) --- updated-dependencies: - dependency-name: github.com/spf13/cobra dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Bump golang.org/x/text from 0.3.7 to 0.4.0 Bumps [golang.org/x/text](https://github.com/golang/text) from 0.3.7 to 0.4.0. - [Release notes](https://github.com/golang/text/releases) - [Commits](https://github.com/golang/text/compare/v0.3.7...v0.4.0) --- updated-dependencies: - dependency-name: golang.org/x/text dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * :seeding: update CLI deps * golangci-lint: add recommended revive checks to linter-settings but disable checks with to many findings. Fix findings * Improve rendering of the documentation This fixes various rendering issues: * Wrong or uninterpreted formatting * Some missing links * Incorrect markup * Missing documentation pages This doesn't fix all the links but at least the initial ones. * update cronjob to use batchv1 api * Fix grammar in comment Change `these is` to `these are` * Enable revive unused-parameter check and fix findings * Bump github.com/onsi/ginkgo/v2 from 2.3.1 to 2.4.0 Bumps [github.com/onsi/ginkgo/v2](https://github.com/onsi/ginkgo) from 2.3.1 to 2.4.0. - [Release notes](https://github.com/onsi/ginkgo/releases) - [Changelog](https://github.com/onsi/ginkgo/blob/master/CHANGELOG.md) - [Commits](https://github.com/onsi/ginkgo/compare/v2.3.1...v2.4.0) --- updated-dependencies: - dependency-name: github.com/onsi/ginkgo/v2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Bump github.com/spf13/cobra from 1.6.0 to 1.6.1 Bumps [github.com/spf13/cobra](https://github.com/spf13/cobra) from 1.6.0 to 1.6.1. - [Release notes](https://github.com/spf13/cobra/releases) - [Commits](https://github.com/spf13/cobra/compare/v1.6.0...v1.6.1) --- updated-dependencies: - dependency-name: github.com/spf13/cobra dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * Update github workflow to use same golangci-lint minor version as Makefile * fix docker buildx args Signed-off-by: Mikhail Sidorov * 🐛 (kustomize/v2-alpha): Fix typo issue in the labels added to the manifests (#3047) * Fix typo in kubernets (missing 'e') * make generate * Add KB project git-repo and edit icons * Add doc FAQ section * docs: supplement plugin creation * Update joelanford/go-apidiff (v0.4.0 -> v0.5.0) * Bump github.com/onsi/gomega from 1.22.1 to 1.23.0 Bumps [github.com/onsi/gomega](https://github.com/onsi/gomega) from 1.22.1 to 1.23.0. - [Release notes](https://github.com/onsi/gomega/releases) - [Changelog](https://github.com/onsi/gomega/blob/master/CHANGELOG.md) - [Commits](https://github.com/onsi/gomega/compare/v1.22.1...v1.23.0) --- updated-dependencies: - dependency-name: github.com/onsi/gomega dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Bump github.com/onsi/gomega from 1.23.0 to 1.24.0 Bumps [github.com/onsi/gomega](https://github.com/onsi/gomega) from 1.23.0 to 1.24.0. - [Release notes](https://github.com/onsi/gomega/releases) - [Changelog](https://github.com/onsi/gomega/blob/master/CHANGELOG.md) - [Commits](https://github.com/onsi/gomega/compare/v1.23.0...v1.24.0) --- updated-dependencies: - dependency-name: github.com/onsi/gomega dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Bump github.com/onsi/ginkgo/v2 from 2.4.0 to 2.5.0 Bumps [github.com/onsi/ginkgo/v2](https://github.com/onsi/ginkgo) from 2.4.0 to 2.5.0. - [Release notes](https://github.com/onsi/ginkgo/releases) - [Changelog](https://github.com/onsi/ginkgo/blob/master/CHANGELOG.md) - [Commits](https://github.com/onsi/ginkgo/compare/v2.4.0...v2.5.0) --- updated-dependencies: - dependency-name: github.com/onsi/ginkgo/v2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Bump github.com/spf13/afero from 1.9.2 to 1.9.3 Bumps [github.com/spf13/afero](https://github.com/spf13/afero) from 1.9.2 to 1.9.3. - [Release notes](https://github.com/spf13/afero/releases) - [Commits](https://github.com/spf13/afero/compare/v1.9.2...v1.9.3) --- updated-dependencies: - dependency-name: github.com/spf13/afero dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * Bump golang.org/x/tools from 0.2.0 to 0.3.0 Bumps [golang.org/x/tools](https://github.com/golang/tools) from 0.2.0 to 0.3.0. - [Release notes](https://github.com/golang/tools/releases) - [Commits](https://github.com/golang/tools/compare/v0.2.0...v0.3.0) --- updated-dependencies: - dependency-name: golang.org/x/tools dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Bump github.com/onsi/gomega from 1.24.0 to 1.24.1 Bumps [github.com/onsi/gomega](https://github.com/onsi/gomega) from 1.24.0 to 1.24.1. - [Release notes](https://github.com/onsi/gomega/releases) - [Changelog](https://github.com/onsi/gomega/blob/master/CHANGELOG.md) - [Commits](https://github.com/onsi/gomega/compare/v1.24.0...v1.24.1) --- updated-dependencies: - dependency-name: github.com/onsi/gomega dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * fix typo in Makefile * :sparkles: add version check for makefile template tools (#3077) * add version check for makefile template tools Prevent running controller-gen and kustomize commands with a version that does not match the one specified in the corresponding CONTROLLER_TOOLS_VERSION or KUSTOMIZE_VERSION vars Addresses https://github.com/kubernetes-sigs/kubebuilder/issues/3068 * Update makefile target descriptions * Updated descriptions for `kustomize` and `controller-gen` targets. * Reformatted `controller-gen` recipe to reduce line length Signed-off-by: Eduardo Coria * update makefile samples Signed-off-by: Eduardo Coria Signed-off-by: Eduardo Coria * fix unexpected end of file error in makefiles Signed-off-by: Eduardo Coria * :sparkles: Add go/v4 base and migration guide Co-authored-by: Varsha * Update docs/book/src/plugins/go-v4-plugin.md Co-authored-by: Varsha * Update docs/book/src/migration/legacy.md Co-authored-by: Varsha * Update docs/book/src/migration/manually_migration_guide_gov3_to_gov4.md Co-authored-by: Varsha * Update docs/book/src/migration/manually_migration_guide_gov3_to_gov4.md Co-authored-by: Varsha * Update docs/book/src/migration/manually_migration_guide_gov3_to_gov4.md Co-authored-by: Varsha * (go/v3,go/v4-alpha): Upgrade controller-runtime version from 1.13.0 to 1.13.1 * 📖 : suggest specify plugin for pr * Bump github.com/onsi/ginkgo/v2 from 2.5.0 to 2.5.1 Bumps [github.com/onsi/ginkgo/v2](https://github.com/onsi/ginkgo) from 2.5.0 to 2.5.1. - [Release notes](https://github.com/onsi/ginkgo/releases) - [Changelog](https://github.com/onsi/ginkgo/blob/master/CHANGELOG.md) - [Commits](https://github.com/onsi/ginkgo/compare/v2.5.0...v2.5.1) --- updated-dependencies: - dependency-name: github.com/onsi/ginkgo/v2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * docs: fix typo in the component config tutorial Signed-off-by: Andreas Gerstmayr * 🌱: refact testdata * ✨ (kustomize/v2-alpha): add kustomize file to track crd sample info * add action to lint yaml and fix existing yamllint failures Signed-off-by: Bryce Palmer * update yamllint to now be run via Makefile Signed-off-by: Bryce Palmer * run yamllint target as part of lint target Signed-off-by: Bryce Palmer * add yamllint job back as the lint job only runs golangci-lint Signed-off-by: Bryce Palmer * bump proxy image * fix: Remove trailing space making yamllint fail on new project * (kustomize/v2-alpha): change kustomization file to track samples to use marker instead of overwritting * (deployimage/v1-alpha): fix error to scaffold go/v4-alpha projects * Replace restricted-access ComponentConfig design doc link with the public one Signed-off-by: Michail Resvanis Signed-off-by: Bryce Palmer Signed-off-by: dependabot[bot] Signed-off-by: Jirka Kremser Signed-off-by: jesus m. rodriguez Signed-off-by: Mikhail Sidorov Signed-off-by: Eduardo Coria Signed-off-by: Andreas Gerstmayr Signed-off-by: Michail Resvanis Co-authored-by: Simon Jürgensmeyer <6493966+sj14@users.noreply.github.com> Co-authored-by: Kubernetes Prow Robot Co-authored-by: Camila Macedo Co-authored-by: Bryce Palmer Co-authored-by: Tony Co-authored-by: Oscar Utbult Co-authored-by: Yash Singh Co-authored-by: Abhishek koserwal Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jirka Kremser <535866+jkremser@users.noreply.github.com> Co-authored-by: laxmikantbpandhare Co-authored-by: jesus m. rodriguez Co-authored-by: Phillip Wittrock Co-authored-by: Yash Singh <99066083+yashsingh74@users.noreply.github.com> Co-authored-by: Laxmikant Bhaskar Pandhare <47066536+laxmikantbpandhare@users.noreply.github.com> Co-authored-by: astraw99 Co-authored-by: Jonathan Ballet Co-authored-by: Krishna Indani Co-authored-by: Nicholas Seemiller Co-authored-by: Mikhail Sidorov Co-authored-by: Marc Villacorta Co-authored-by: Shunsuke Ise Co-authored-by: Eduardo M Coria Co-authored-by: Eduardo Coria Co-authored-by: Varsha Co-authored-by: Andreas Gerstmayr Co-authored-by: Erik Godding Boye Co-authored-by: Michail Resvanis --- .github/ISSUE_TEMPLATE/bug_report.yaml | 2 +- .github/ISSUE_TEMPLATE/feature_request.yaml | 4 +- .github/dependabot.yml | 49 + .github/workflows/apidiff.yml | 2 +- .github/workflows/lint.yml | 9 +- .github/workflows/release.yml | 6 +- .github/workflows/unit-tests-legacy.yml | 2 +- .gitignore | 6 +- .golangci.yml | 44 +- CONTRIBUTING.md | 64 ++ Makefile | 12 +- OWNERS_ALIASES | 4 +- RELEASE.md | 2 +- WORKSPACE | 12 - build/.goreleaser.yml | 2 +- cmd/main.go | 6 +- docs/README.md | 9 +- docs/book/book.toml | 2 + docs/book/install-and-build.sh | 4 +- docs/book/src/SUMMARY.md | 57 +- .../component-config-tutorial/api-changes.md | 10 +- .../testdata/project/.gitignore | 1 + .../testdata/project/Dockerfile | 8 +- .../testdata/project/Makefile | 26 +- .../project/api/v2/groupversion_info.go | 4 +- .../project/api/v2/projectconfig_types.go | 2 +- ...utorial.kubebuilder.io_projectconfigs.yaml | 2 +- .../project/config/default/kustomization.yaml | 1 + .../default/manager_auth_proxy_patch.yaml | 23 +- .../manager/controller_manager_config.yaml | 12 +- .../project/config/manager/manager.yaml | 32 + .../project/config/prometheus/monitor.yaml | 6 + .../rbac/auth_proxy_client_clusterrole.yaml | 7 + .../project/config/rbac/auth_proxy_role.yaml | 7 + .../config/rbac/auth_proxy_role_binding.yaml | 7 + .../config/rbac/auth_proxy_service.yaml | 6 + .../config/rbac/leader_election_role.yaml | 7 + .../rbac/leader_election_role_binding.yaml | 7 + .../rbac/projectconfig_editor_role.yaml | 7 + .../rbac/projectconfig_viewer_role.yaml | 7 + .../project/config/rbac/role_binding.yaml | 7 + .../project/config/rbac/service_account.yaml | 7 + .../samples/config_v2_projectconfig.yaml | 6 + .../testdata/project/go.mod | 58 +- .../testdata/project/go.sum | 405 +++----- .../testdata/projectconfig_types.go | 2 +- .../src/component-config-tutorial/tutorial.md | 2 +- .../src/cronjob-tutorial/basic-project.md | 6 +- .../book/src/cronjob-tutorial/cert-manager.md | 21 +- .../src/cronjob-tutorial/cronjob-tutorial.md | 5 +- .../src/cronjob-tutorial/running-webhook.md | 4 +- docs/book/src/cronjob-tutorial/running.md | 3 +- .../cronjob-tutorial/testdata/emptymain.go | 15 +- .../testdata/finalizer_example.go | 2 +- .../testdata/project/.gitignore | 1 + .../testdata/project/Dockerfile | 8 +- .../testdata/project/Makefile | 26 +- .../testdata/project/api/v1/cronjob_types.go | 4 +- .../project/api/v1/groupversion_info.go | 4 +- .../project/api/v1/webhook_suite_test.go | 9 +- .../config/certmanager/certificate.yaml | 14 + ...atch.tutorial.kubebuilder.io_cronjobs.yaml | 314 +++++- .../project/config/default/kustomization.yaml | 4 +- .../default/manager_auth_proxy_patch.yaml | 18 +- .../config/default/manager_config_patch.yaml | 10 - .../default/webhookcainjection_patch.yaml | 14 + .../manager/controller_manager_config.yaml | 11 - .../project/config/manager/manager.yaml | 32 + .../project/config/prometheus/monitor.yaml | 6 + .../rbac/auth_proxy_client_clusterrole.yaml | 7 + .../project/config/rbac/auth_proxy_role.yaml | 7 + .../config/rbac/auth_proxy_role_binding.yaml | 7 + .../config/rbac/auth_proxy_service.yaml | 6 + .../config/rbac/cronjob_editor_role.yaml | 7 + .../config/rbac/cronjob_viewer_role.yaml | 7 + .../config/rbac/leader_election_role.yaml | 7 + .../rbac/leader_election_role_binding.yaml | 7 + .../project/config/rbac/role_binding.yaml | 7 + .../project/config/rbac/service_account.yaml | 7 + .../config/samples/batch_v1_cronjob.yaml | 6 + .../project/config/webhook/service.yaml | 7 + .../project/controllers/cronjob_controller.go | 4 +- .../controllers/cronjob_controller_test.go | 5 +- .../project/controllers/suite_test.go | 9 +- .../cronjob-tutorial/testdata/project/go.mod | 64 +- .../cronjob-tutorial/testdata/project/go.sum | 419 +++----- docs/book/src/faq.md | 100 ++ docs/book/src/migration/legacy.md | 18 + .../manually_migration_guide_v2_v3.md | 2 +- .../{ => legacy}/migration_guide_v2tov3.md | 2 +- .../book/src/migration/{ => legacy}/v1vsv2.md | 2 +- .../book/src/migration/{ => legacy}/v2vsv3.md | 12 +- .../manually_migration_guide_gov3_to_gov4.md | 87 ++ .../migration/migration_guide_gov3_to_gov4.md | 138 +++ docs/book/src/migration/multi-group.md | 12 + docs/book/src/migration/v3-plugins.md | 11 + docs/book/src/migration/v3vsv4.md | 88 ++ .../testdata/project/.gitignore | 1 + .../testdata/project/Dockerfile | 10 +- .../testdata/project/Makefile | 32 +- .../testdata/project/api/v1/cronjob_types.go | 4 +- .../project/api/v1/groupversion_info.go | 4 +- .../project/api/v1/webhook_suite_test.go | 9 +- .../testdata/project/api/v2/cronjob_types.go | 4 +- .../project/api/v2/groupversion_info.go | 4 +- .../project/api/v2/webhook_suite_test.go | 9 +- .../config/certmanager/certificate.yaml | 14 + ...atch.tutorial.kubebuilder.io_cronjobs.yaml | 222 +++- .../project/config/default/kustomization.yaml | 4 +- .../default/manager_auth_proxy_patch.yaml | 18 +- .../config/default/manager_config_patch.yaml | 10 - .../default/webhookcainjection_patch.yaml | 14 + .../manager/controller_manager_config.yaml | 11 - .../project/config/manager/manager.yaml | 32 + .../project/config/prometheus/monitor.yaml | 6 + .../rbac/auth_proxy_client_clusterrole.yaml | 7 + .../project/config/rbac/auth_proxy_role.yaml | 7 + .../config/rbac/auth_proxy_role_binding.yaml | 7 + .../config/rbac/auth_proxy_service.yaml | 6 + .../config/rbac/cronjob_editor_role.yaml | 7 + .../config/rbac/cronjob_viewer_role.yaml | 7 + .../config/rbac/leader_election_role.yaml | 7 + .../rbac/leader_election_role_binding.yaml | 7 + .../project/config/rbac/role_binding.yaml | 7 + .../project/config/rbac/service_account.yaml | 7 + .../config/samples/batch_v1_cronjob.yaml | 6 + .../config/samples/batch_v2_cronjob.yaml | 6 + .../project/config/webhook/service.yaml | 7 + .../project/controllers/suite_test.go | 10 +- .../testdata/project/go.mod | 66 +- .../testdata/project/go.sum | 419 +++----- .../src/multiversion-tutorial/tutorial.md | 2 +- docs/book/src/plugins/available-plugins.md | 26 +- docs/book/src/plugins/creating-plugins.md | 178 +++- docs/book/src/plugins/declarative-v1.md | 37 +- docs/book/src/plugins/extending-cli.md | 10 +- docs/book/src/plugins/go-v2-plugin.md | 31 +- docs/book/src/plugins/go-v4-plugin.md | 16 +- docs/book/src/plugins/grafana-v1-alpha.md | 4 +- docs/book/src/plugins/kustomize-v2-alpha.md | 2 +- docs/book/src/plugins/plugins.md | 17 +- docs/book/src/plugins/testing-plugins.md | 84 ++ .../src/plugins/to-add-optional-features.md | 9 + docs/book/src/plugins/to-be-extended.md | 28 + docs/book/src/plugins/to-scaffold-project.md | 9 + docs/book/src/quick-start.md | 2 +- docs/book/src/reference/completion.md | 2 + docs/book/src/reference/controller-gen.md | 2 +- docs/book/src/reference/envtest.md | 146 ++- docs/book/src/reference/kind.md | 7 +- docs/book/src/reference/markers.md | 10 +- docs/book/src/reference/metrics.md | 4 +- docs/book/src/reference/platform.md | 4 +- .../testdata/owned-resource/controller.go | 35 +- .../testdata/sampleexternalplugin/v1/Makefile | 52 +- .../sampleexternalplugin/v1/cmd/cmd.go | 2 +- .../sampleexternalplugin/v1/cmd/flags.go | 2 +- .../sampleexternalplugin/v1/cmd/helpers.go | 2 +- .../sampleexternalplugin/v1/cmd/metadata.go | 2 +- .../testdata/sampleexternalplugin/v1/go.mod | 6 +- .../testdata/sampleexternalplugin/v1/go.sum | 21 +- .../sampleexternalplugin/v1/scaffolds/api.go | 2 +- .../sampleexternalplugin/v1/scaffolds/init.go | 2 +- .../internal/templates/api/apiFile.go | 2 +- .../scaffolds/internal/templates/initFile.go | 2 +- .../internal/templates/webhook/webhookFile.go | 2 +- .../v1/scaffolds/webhook.go | 2 +- docs/book/theme/index.hbs | 5 + go.mod | 75 +- go.sum | 634 +----------- pkg/cli/alpha.go | 11 +- pkg/cli/alpha/config-gen/README.md | 41 - .../config-gen/cert-generation-filter.go | 160 --- pkg/cli/alpha/config-gen/cmd.go | 346 ------- pkg/cli/alpha/config-gen/component-filter.go | 59 -- .../alpha/config-gen/controller-gen-filter.go | 98 -- .../examples/advancedextension/README.md | 69 -- .../advancedextension/kustomization.yaml | 24 - .../examples/advancedextension/main.go | 64 -- .../examples/basicextension/README.md | 62 -- .../basicextension/kustomization.yaml | 22 - .../examples/basicextension/main.go | 54 - .../examples/kustomize/Kustomization.yaml | 22 - .../config-gen/examples/kustomize/README.md | 40 - .../config-gen/examples/standalone/README.md | 40 - .../standalone/kubebuilderproject.yaml | 9 - .../config-gen/examples/standalone/patch.yaml | 7 - pkg/cli/alpha/config-gen/sort-filter.go | 65 -- .../cert-manager/annotation.template.yaml | 5 - .../01-auth-proxy.template.yaml | 20 - .../02-webhooks.template.yaml | 20 - .../99-component.template.yaml | 17 - .../patches/crd/conversion.template.yaml | 17 - .../resources/auth-proxy-rbac.template.yaml | 29 - .../resources/cert-manager.template.yaml | 28 - .../resources/component.template.yaml | 12 - .../controller-manager.template.yaml | 66 -- .../development-webhook-secret.template.yaml | 11 - .../resources/namespace.template.yaml | 6 - .../resources/prometheus.template.yaml | 17 - .../templates/resources/rbac.template.yaml | 60 -- .../testdata/componentconfig/config.yaml | 13 - .../controller_manager_config.yaml | 9 - .../testdata/componentconfig/expected.yaml | 311 ------ .../config-gen/testdata/default/config.yaml | 10 - .../config-gen/testdata/default/expected.yaml | 285 ------ .../testdata/disableauthproxy/config.yaml | 12 - .../testdata/disableauthproxy/expected.yaml | 232 ----- pkg/cli/alpha/config-gen/testdata/doc.go | 27 - .../testdata/enablecertmanager/config.yaml | 15 - .../testdata/enablecertmanager/expected.yaml | 366 ------- .../enableconversionwebhooks/config.yaml | 15 - .../enableconversionwebhooks/expected.yaml | 348 ------- .../testdata/enableprometheus/config.yaml | 13 - .../testdata/enableprometheus/expected.yaml | 300 ------ .../testdata/enablewebhooks/config.yaml | 13 - .../testdata/enablewebhooks/expected.yaml | 339 ------- pkg/cli/alpha/config-gen/testdata/go.sum | 950 ------------------ .../project/api/v1alpha1/foo_types.go | 63 -- .../project/api/v1alpha1/groupversion_info.go | 36 - .../api/v1alpha1/zz_generated.deepcopy.go | 114 --- .../testdata/project/api/v1beta1/bar_types.go | 63 -- .../project/api/v1beta1/groupversion_info.go | 36 - .../api/v1beta1/zz_generated.deepcopy.go | 114 --- .../project/controllers/foo_controller.go | 33 - pkg/cli/alpha/config-gen/types.go | 230 ----- pkg/config/v2/config_test.go | 9 - pkg/config/v3/config_test.go | 8 - pkg/plugin/util/testdata/exampleFile.txt | 2 +- .../config/certmanager/certificate.go | 2 +- .../config/certmanager/kustomizeconfig.go | 2 +- .../kdefault/manager_auth_proxy_patch.go | 2 +- .../templates/config/manager/config.go | 2 +- .../templates/config/rbac/service_account.go | 2 +- .../templates/config/samples/crd_sample.go | 2 +- .../common/kustomize/v2-alpha/plugin.go | 2 +- .../kustomize/v2-alpha/scaffolds/api.go | 8 +- .../config/certmanager/kustomizeconfig.go | 2 +- .../kdefault/manager_auth_proxy_patch.go | 2 +- .../templates/config/manager/config.go | 2 +- .../templates/config/prometheus/monitor.go | 2 +- .../config/rbac/leader_election_role.go | 2 +- .../templates/config/samples/crd_sample.go | 2 +- .../templates/config/samples/kustomization.go | 74 ++ pkg/plugins/external/api.go | 2 +- pkg/plugins/external/edit.go | 2 +- pkg/plugins/external/external_test.go | 8 +- pkg/plugins/external/init.go | 2 +- pkg/plugins/external/webhook.go | 2 +- pkg/plugins/golang/declarative/v1/init.go | 2 +- .../deploy-image/v1alpha1/scaffolds/api.go | 63 +- .../templates/config/samples/crd_sample.go | 11 +- .../templates/controllers/controller-test.go | 3 +- .../templates/controllers/controller.go | 2 +- .../config/certmanager/certificate.go | 2 +- .../config/certmanager/kustomizeconfig.go | 2 +- .../kdefault/manager_auth_proxy_patch.go | 4 +- pkg/plugins/golang/v3/scaffolds/init.go | 4 +- .../scaffolds/internal/templates/makefile.go | 17 +- pkg/plugins/golang/v4/api.go | 191 ++++ pkg/plugins/golang/v4/edit.go | 65 ++ pkg/plugins/golang/v4/init.go | 209 ++++ pkg/plugins/golang/v4/plugin.go | 65 ++ pkg/plugins/golang/v4/scaffolds/api.go | 113 +++ .../golang/v4/scaffolds/doc.go} | 19 +- pkg/plugins/golang/v4/scaffolds/edit.go | 102 ++ pkg/plugins/golang/v4/scaffolds/init.go | 136 +++ .../scaffolds/internal/templates/api/group.go | 80 ++ .../scaffolds/internal/templates/api/types.go | 124 +++ .../internal/templates/api/webhook.go | 156 +++ .../templates/api/webhook_suitetest.go | 246 +++++ .../templates/controllers/controller.go | 119 +++ .../controllers/controller_suitetest.go | 190 ++++ .../internal/templates/dockerfile.go | 74 ++ .../internal/templates/dockerignore.go | 45 + .../scaffolds/internal/templates/gitignore.go | 67 ++ .../v4/scaffolds/internal/templates/gomod.go | 54 + .../internal/templates/hack/boilerplate.go | 125 +++ .../v4/scaffolds/internal/templates/main.go | 295 ++++++ .../scaffolds/internal/templates/makefile.go | 218 ++++ .../v4/scaffolds/internal/templates/readme.go | 129 +++ pkg/plugins/golang/v4/scaffolds/webhook.go | 108 ++ pkg/plugins/golang/v4/webhook.go | 133 +++ .../grafana/v1alpha/scaffolds/edit.go | 20 +- .../scaffolds/internal/templates/custom.go | 2 + .../internal/templates/custom_metrics.go | 17 +- test/e2e/utils/test_context.go | 66 +- test/e2e/v3/plugin_cluster_test.go | 4 +- test/e2e/v4/plugin_cluster_test.go | 4 +- test/testdata/generate.sh | 12 +- test/testdata/test.sh | 6 +- test/testdata/test_legacy.sh | 1 + .../config/certmanager/certificate.yaml | 2 +- .../config/certmanager/kustomizeconfig.yaml | 2 +- .../default/manager_auth_proxy_patch.yaml | 4 +- testdata/project-v3-config/Makefile | 19 +- .../config/certmanager/certificate.yaml | 2 +- .../config/certmanager/kustomizeconfig.yaml | 2 +- .../bases/crew.testproject.org_admirals.yaml | 2 +- .../bases/crew.testproject.org_captains.yaml | 2 +- .../crew.testproject.org_firstmates.yaml | 2 +- .../default/manager_auth_proxy_patch.yaml | 2 +- .../config/manager/manager.yaml | 2 +- .../config/rbac/service_account.yaml | 2 +- .../config/samples/crew_v1_admiral.yaml | 2 +- .../config/samples/crew_v1_captain.yaml | 2 +- .../config/samples/crew_v1_firstmate.yaml | 2 +- .../controllers/admiral_controller.go | 2 +- .../controllers/captain_controller.go | 2 +- .../controllers/firstmate_controller.go | 2 +- .../controllers/laker_controller.go | 2 +- testdata/project-v3-config/go.mod | 2 +- .../.dockerignore | 0 .../.gitignore | 0 .../Dockerfile | 0 .../Makefile | 19 +- .../PROJECT | 10 +- .../README.md | 6 +- .../api/v1/admiral_types.go | 0 .../api/v1/captain_types.go | 0 .../api/v1/firstmate_types.go | 0 .../api/v1/groupversion_info.go | 0 .../api/v1/zz_generated.deepcopy.go | 0 .../packages/admiral/0.0.1/manifest.yaml | 0 .../packages/captain/0.0.1/manifest.yaml | 0 .../packages/firstmate/0.0.1/manifest.yaml | 0 .../channels/stable | 0 .../bases/crew.testproject.org_admirals.yaml | 3 +- .../bases/crew.testproject.org_captains.yaml | 3 +- .../crew.testproject.org_firstmates.yaml | 3 +- .../config/crd/kustomization.yaml | 0 .../config/crd/kustomizeconfig.yaml | 0 .../crd/patches/cainjection_in_admirals.yaml | 0 .../crd/patches/cainjection_in_captains.yaml | 0 .../patches/cainjection_in_firstmates.yaml | 0 .../crd/patches/webhook_in_admirals.yaml | 0 .../crd/patches/webhook_in_captains.yaml | 0 .../crd/patches/webhook_in_firstmates.yaml | 0 .../config/default/kustomization.yaml | 4 +- .../default/manager_auth_proxy_patch.yaml | 2 +- .../config/default/manager_config_patch.yaml | 0 .../config/manager/kustomization.yaml | 0 .../config/manager/manager.yaml | 10 +- .../config/prometheus/kustomization.yaml | 0 .../config/prometheus/monitor.yaml | 4 +- .../config/rbac/admiral_editor_role.yaml | 4 +- .../config/rbac/admiral_viewer_role.yaml | 4 +- .../rbac/auth_proxy_client_clusterrole.yaml | 4 +- .../config/rbac/auth_proxy_role.yaml | 4 +- .../config/rbac/auth_proxy_role_binding.yaml | 4 +- .../config/rbac/auth_proxy_service.yaml | 4 +- .../config/rbac/captain_editor_role.yaml | 4 +- .../config/rbac/captain_viewer_role.yaml | 4 +- .../config/rbac/firstmate_editor_role.yaml | 4 +- .../config/rbac/firstmate_viewer_role.yaml | 4 +- .../config/rbac/kustomization.yaml | 0 .../config/rbac/leader_election_role.yaml | 4 +- .../rbac/leader_election_role_binding.yaml | 4 +- .../config/rbac/role.yaml | 0 .../config/rbac/role_binding.yaml | 4 +- .../config/rbac/service_account.yaml | 6 +- .../config/samples/crew_v1_admiral.yaml | 6 +- .../config/samples/crew_v1_captain.yaml | 6 +- .../config/samples/crew_v1_firstmate.yaml | 6 +- .../controllers/admiral_controller.go | 2 +- .../controllers/captain_controller.go | 2 +- .../controllers/firstmate_controller.go | 2 +- .../controllers/suite_test.go | 2 +- .../go.mod | 4 +- .../grafana/controller-resources-metrics.json | 0 .../grafana/controller-runtime-metrics.json | 0 .../grafana/custom-metrics/config.yaml | 2 + .../hack/boilerplate.go.txt | 0 .../main.go | 6 +- testdata/project-v3-multigroup/Makefile | 19 +- .../config/certmanager/certificate.yaml | 2 +- .../config/certmanager/kustomizeconfig.yaml | 2 +- .../bases/crew.testproject.org_captains.yaml | 2 +- .../crd/bases/fiz.testproject.org_bars.yaml | 2 +- ...y.testproject.org_healthcheckpolicies.yaml | 2 +- .../crd/bases/foo.testproject.org_bars.yaml | 2 +- ...sea-creatures.testproject.org_krakens.yaml | 2 +- ...-creatures.testproject.org_leviathans.yaml | 2 +- .../bases/ship.testproject.org_cruisers.yaml | 2 +- .../ship.testproject.org_destroyers.yaml | 2 +- .../bases/ship.testproject.org_frigates.yaml | 2 +- .../crd/bases/testproject.org_lakers.yaml | 2 +- .../default/manager_auth_proxy_patch.yaml | 2 +- .../config/manager/manager.yaml | 2 +- .../config/rbac/service_account.yaml | 2 +- .../config/samples/_v1_lakers.yaml | 2 +- .../config/samples/crew_v1_captain.yaml | 2 +- .../config/samples/fiz_v1_bar.yaml | 2 +- .../foo.policy_v1_healthcheckpolicy.yaml | 2 +- .../config/samples/foo_v1_bar.yaml | 2 +- .../samples/sea-creatures_v1beta1_kraken.yaml | 2 +- .../sea-creatures_v1beta2_leviathan.yaml | 2 +- .../config/samples/ship_v1_destroyer.yaml | 2 +- .../config/samples/ship_v1beta1_frigate.yaml | 2 +- .../config/samples/ship_v2alpha1_cruiser.yaml | 2 +- .../controllers/apps/deployment_controller.go | 2 +- .../controllers/crew/captain_controller.go | 2 +- .../controllers/fiz/bar_controller.go | 2 +- .../healthcheckpolicy_controller.go | 2 +- .../controllers/foo/bar_controller.go | 2 +- .../controllers/lakers_controller.go | 2 +- .../sea-creatures/kraken_controller.go | 2 +- .../sea-creatures/leviathan_controller.go | 2 +- .../controllers/ship/cruiser_controller.go | 2 +- .../controllers/ship/destroyer_controller.go | 2 +- .../controllers/ship/frigate_controller.go | 2 +- testdata/project-v3-multigroup/go.mod | 2 +- .../project-v3-with-deploy-image/Makefile | 19 +- .../config/certmanager/certificate.yaml | 2 +- .../config/certmanager/kustomizeconfig.yaml | 2 +- ...example.com.testproject.org_busyboxes.yaml | 2 +- ...xample.com.testproject.org_memcacheds.yaml | 2 +- .../default/manager_auth_proxy_patch.yaml | 2 +- .../config/manager/manager.yaml | 6 +- .../config/rbac/service_account.yaml | 2 +- .../samples/example.com_v1alpha1_busybox.yaml | 5 +- .../example.com_v1alpha1_memcached.yaml | 7 +- .../controllers/busybox_controller.go | 4 +- .../controllers/memcached_controller.go | 4 +- testdata/project-v3-with-deploy-image/go.mod | 2 +- .../.dockerignore | 0 .../.gitignore | 0 testdata/project-v3-with-metrics/Dockerfile | 33 + .../Makefile | 21 +- testdata/project-v3-with-metrics/PROJECT | 8 + .../README.md | 6 +- .../config/default/kustomization.yaml | 72 ++ .../default/manager_auth_proxy_patch.yaml | 2 +- .../config/default/manager_config_patch.yaml | 0 .../config/manager/kustomization.yaml | 0 .../config/manager/manager.yaml | 10 +- .../config/prometheus/kustomization.yaml | 0 .../config/prometheus/monitor.yaml | 6 +- .../rbac/auth_proxy_client_clusterrole.yaml | 4 +- .../config/rbac/auth_proxy_role.yaml | 4 +- .../config/rbac/auth_proxy_role_binding.yaml | 4 +- .../config/rbac/auth_proxy_service.yaml | 4 +- .../config/rbac/kustomization.yaml | 0 .../config/rbac/leader_election_role.yaml | 6 +- .../rbac/leader_election_role_binding.yaml | 4 +- .../config/rbac/role_binding.yaml | 4 +- .../config/rbac/service_account.yaml | 12 + .../project-v3-with-metrics}/go.mod | 59 +- .../grafana/controller-resources-metrics.json | 0 .../grafana/controller-runtime-metrics.json | 0 .../grafana/custom-metrics/config.yaml | 2 + .../hack/boilerplate.go.txt | 0 testdata/project-v3-with-metrics/main.go | 104 ++ testdata/project-v3/Makefile | 19 +- .../config/certmanager/certificate.yaml | 2 +- .../config/certmanager/kustomizeconfig.yaml | 2 +- .../bases/crew.testproject.org_admirales.yaml | 2 +- .../bases/crew.testproject.org_captains.yaml | 2 +- .../crew.testproject.org_firstmates.yaml | 2 +- .../default/manager_auth_proxy_patch.yaml | 2 +- .../project-v3/config/manager/manager.yaml | 2 +- .../config/rbac/service_account.yaml | 2 +- .../config/samples/crew_v1_admiral.yaml | 2 +- .../config/samples/crew_v1_captain.yaml | 2 +- .../config/samples/crew_v1_firstmate.yaml | 2 +- .../controllers/admiral_controller.go | 2 +- .../controllers/captain_controller.go | 2 +- .../controllers/firstmate_controller.go | 2 +- .../controllers/laker_controller.go | 2 +- testdata/project-v3/go.mod | 2 +- testdata/project-v4-config/Makefile | 21 +- .../api/v1/webhook_suite_test.go | 4 +- .../config/certmanager/kustomizeconfig.yaml | 2 +- .../bases/crew.testproject.org_admirals.yaml | 2 +- .../bases/crew.testproject.org_captains.yaml | 2 +- .../crew.testproject.org_firstmates.yaml | 2 +- .../default/manager_auth_proxy_patch.yaml | 2 +- .../config/manager/manager.yaml | 2 +- .../config/prometheus/monitor.yaml | 2 +- .../config/rbac/leader_election_role.yaml | 2 +- .../config/samples/crew_v1_admiral.yaml | 2 +- .../config/samples/crew_v1_captain.yaml | 2 +- .../config/samples/crew_v1_firstmate.yaml | 2 +- .../config/samples/kustomization.yaml | 6 + .../controllers/admiral_controller.go | 2 +- .../controllers/captain_controller.go | 2 +- .../controllers/firstmate_controller.go | 2 +- .../controllers/laker_controller.go | 2 +- testdata/project-v4-config/go.mod | 2 +- .../project-v4-declarative-v1/.dockerignore | 4 + testdata/project-v4-declarative-v1/.gitignore | 26 + .../Dockerfile | 0 testdata/project-v4-declarative-v1/Makefile | 157 +++ .../PROJECT | 10 +- testdata/project-v4-declarative-v1/README.md | 94 ++ .../api/v1/admiral_types.go | 0 .../api/v1/captain_types.go | 0 .../api/v1/firstmate_types.go | 0 .../api/v1/groupversion_info.go | 0 .../api/v1/zz_generated.deepcopy.go | 0 .../packages/admiral/0.0.1/manifest.yaml | 0 .../packages/captain/0.0.1/manifest.yaml | 0 .../packages/firstmate/0.0.1/manifest.yaml | 0 .../channels/stable | 0 .../bases/crew.testproject.org_admirals.yaml | 3 +- .../bases/crew.testproject.org_captains.yaml | 3 +- .../crew.testproject.org_firstmates.yaml | 3 +- .../config/crd/kustomization.yaml | 0 .../config/crd/kustomizeconfig.yaml | 0 .../crd/patches/cainjection_in_admirals.yaml | 0 .../crd/patches/cainjection_in_captains.yaml | 0 .../patches/cainjection_in_firstmates.yaml | 0 .../crd/patches/webhook_in_admirals.yaml | 0 .../crd/patches/webhook_in_captains.yaml | 0 .../crd/patches/webhook_in_firstmates.yaml | 0 .../config/default/kustomization.yaml | 4 +- .../default/manager_auth_proxy_patch.yaml | 55 + .../config/default/manager_config_patch.yaml | 10 + .../config/manager/kustomization.yaml | 2 + .../config/manager/manager.yaml | 102 ++ .../config/prometheus/kustomization.yaml | 2 + .../config/prometheus/monitor.yaml | 26 + .../config/rbac/admiral_editor_role.yaml | 4 +- .../config/rbac/admiral_viewer_role.yaml | 4 +- .../rbac/auth_proxy_client_clusterrole.yaml | 16 + .../config/rbac/auth_proxy_role.yaml | 24 + .../config/rbac/auth_proxy_role_binding.yaml | 19 + .../config/rbac/auth_proxy_service.yaml | 21 + .../config/rbac/captain_editor_role.yaml | 4 +- .../config/rbac/captain_viewer_role.yaml | 4 +- .../config/rbac/firstmate_editor_role.yaml | 4 +- .../config/rbac/firstmate_viewer_role.yaml | 4 +- .../config/rbac/kustomization.yaml | 18 + .../config/rbac/leader_election_role.yaml | 44 + .../rbac/leader_election_role_binding.yaml | 19 + .../config/rbac/role.yaml | 0 .../config/rbac/role_binding.yaml | 19 + .../config/rbac/service_account.yaml | 4 +- .../config/samples/crew_v1_admiral.yaml | 6 +- .../config/samples/crew_v1_captain.yaml | 6 +- .../config/samples/crew_v1_firstmate.yaml | 6 +- .../config/samples/kustomization.yaml | 6 + .../controllers/admiral_controller.go | 2 +- .../controllers/captain_controller.go | 2 +- .../controllers/firstmate_controller.go | 2 +- .../controllers/suite_test.go | 2 +- .../go.mod | 4 +- .../grafana/controller-resources-metrics.json | 306 ++++++ .../grafana/controller-runtime-metrics.json | 710 +++++++++++++ .../grafana/custom-metrics/config.yaml | 15 + .../hack/boilerplate.go.txt | 20 +- .../main.go | 6 +- testdata/project-v4-multigroup/Makefile | 21 +- .../apis/crew/v1/webhook_suite_test.go | 4 +- .../apis/ship/v1/webhook_suite_test.go | 4 +- .../apis/ship/v2alpha1/webhook_suite_test.go | 4 +- .../apis/v1/webhook_suite_test.go | 4 +- .../config/certmanager/kustomizeconfig.yaml | 2 +- .../bases/crew.testproject.org_captains.yaml | 2 +- .../crd/bases/fiz.testproject.org_bars.yaml | 2 +- ...y.testproject.org_healthcheckpolicies.yaml | 2 +- .../crd/bases/foo.testproject.org_bars.yaml | 2 +- ...sea-creatures.testproject.org_krakens.yaml | 2 +- ...-creatures.testproject.org_leviathans.yaml | 2 +- .../bases/ship.testproject.org_cruisers.yaml | 2 +- .../ship.testproject.org_destroyers.yaml | 2 +- .../bases/ship.testproject.org_frigates.yaml | 2 +- .../crd/bases/testproject.org_lakers.yaml | 2 +- .../default/manager_auth_proxy_patch.yaml | 2 +- .../config/manager/manager.yaml | 2 +- .../config/prometheus/monitor.yaml | 2 +- .../config/rbac/leader_election_role.yaml | 2 +- .../config/samples/_v1_lakers.yaml | 2 +- .../config/samples/crew_v1_captain.yaml | 2 +- .../config/samples/fiz_v1_bar.yaml | 2 +- .../foo.policy_v1_healthcheckpolicy.yaml | 2 +- .../config/samples/foo_v1_bar.yaml | 2 +- .../config/samples/kustomization.yaml | 13 + .../samples/sea-creatures_v1beta1_kraken.yaml | 2 +- .../sea-creatures_v1beta2_leviathan.yaml | 2 +- .../config/samples/ship_v1_destroyer.yaml | 2 +- .../config/samples/ship_v1beta1_frigate.yaml | 2 +- .../config/samples/ship_v2alpha1_cruiser.yaml | 2 +- .../controllers/apps/deployment_controller.go | 2 +- .../controllers/crew/captain_controller.go | 2 +- .../controllers/fiz/bar_controller.go | 2 +- .../healthcheckpolicy_controller.go | 2 +- .../controllers/foo/bar_controller.go | 2 +- .../controllers/lakers_controller.go | 2 +- .../sea-creatures/kraken_controller.go | 2 +- .../sea-creatures/leviathan_controller.go | 2 +- .../controllers/ship/cruiser_controller.go | 2 +- .../controllers/ship/destroyer_controller.go | 2 +- .../controllers/ship/frigate_controller.go | 2 +- testdata/project-v4-multigroup/go.mod | 2 +- .../project-v4-with-deploy-image/Makefile | 21 +- .../api/v1alpha1/webhook_suite_test.go | 4 +- .../config/certmanager/kustomizeconfig.yaml | 2 +- ...example.com.testproject.org_busyboxes.yaml | 2 +- ...xample.com.testproject.org_memcacheds.yaml | 2 +- .../crd/patches/cainjection_in_busyboxes.yaml | 2 +- .../patches/cainjection_in_memcacheds.yaml | 2 +- .../default/manager_auth_proxy_patch.yaml | 2 +- .../config/manager/manager.yaml | 6 +- .../config/prometheus/monitor.yaml | 2 +- .../config/rbac/leader_election_role.yaml | 2 +- .../samples/example.com_v1alpha1_busybox.yaml | 5 +- .../example.com_v1alpha1_memcached.yaml | 7 +- .../config/samples/kustomization.yaml | 5 + .../controllers/busybox_controller.go | 4 +- .../controllers/memcached_controller.go | 4 +- testdata/project-v4-with-deploy-image/go.mod | 2 +- .../project-v4-with-metrics/.dockerignore | 4 + testdata/project-v4-with-metrics/.gitignore | 26 + testdata/project-v4-with-metrics/Dockerfile | 33 + testdata/project-v4-with-metrics/Makefile | 157 +++ testdata/project-v4-with-metrics/PROJECT | 8 + testdata/project-v4-with-metrics/README.md | 94 ++ .../config/default/kustomization.yaml | 72 ++ .../default/manager_auth_proxy_patch.yaml | 55 + .../config/default/manager_config_patch.yaml | 10 + .../config/manager/kustomization.yaml | 2 + .../config/manager/manager.yaml | 102 ++ .../config/prometheus/kustomization.yaml | 2 + .../config/prometheus/monitor.yaml | 26 + .../rbac/auth_proxy_client_clusterrole.yaml | 16 + .../config/rbac/auth_proxy_role.yaml | 24 + .../config/rbac/auth_proxy_role_binding.yaml | 19 + .../config/rbac/auth_proxy_service.yaml | 21 + .../config/rbac/kustomization.yaml | 18 + .../config/rbac/leader_election_role.yaml | 44 + .../rbac/leader_election_role_binding.yaml | 19 + .../config/rbac/role_binding.yaml | 19 + .../config/rbac/service_account.yaml | 12 + testdata/project-v4-with-metrics/go.mod | 79 ++ .../grafana/controller-resources-metrics.json | 306 ++++++ .../grafana/controller-runtime-metrics.json | 710 +++++++++++++ .../grafana/custom-metrics/config.yaml | 15 + .../hack/boilerplate.go.txt | 15 + testdata/project-v4-with-metrics/main.go | 104 ++ testdata/project-v4/Makefile | 21 +- .../project-v4/api/v1/webhook_suite_test.go | 4 +- .../config/certmanager/kustomizeconfig.yaml | 2 +- .../bases/crew.testproject.org_admirales.yaml | 2 +- .../bases/crew.testproject.org_captains.yaml | 2 +- .../crew.testproject.org_firstmates.yaml | 2 +- .../default/manager_auth_proxy_patch.yaml | 2 +- .../project-v4/config/manager/manager.yaml | 2 +- .../project-v4/config/prometheus/monitor.yaml | 2 +- .../config/rbac/leader_election_role.yaml | 2 +- .../config/samples/crew_v1_admiral.yaml | 2 +- .../config/samples/crew_v1_captain.yaml | 2 +- .../config/samples/crew_v1_firstmate.yaml | 2 +- .../config/samples/kustomization.yaml | 6 + .../controllers/admiral_controller.go | 2 +- .../controllers/captain_controller.go | 2 +- .../controllers/firstmate_controller.go | 2 +- .../controllers/laker_controller.go | 2 +- testdata/project-v4/go.mod | 2 +- 659 files changed, 10736 insertions(+), 8107 deletions(-) create mode 100644 .github/dependabot.yml delete mode 100644 WORKSPACE delete mode 100644 docs/book/src/cronjob-tutorial/testdata/project/config/manager/controller_manager_config.yaml create mode 100644 docs/book/src/faq.md create mode 100644 docs/book/src/migration/legacy.md rename docs/book/src/migration/{ => legacy}/manually_migration_guide_v2_v3.md (99%) rename docs/book/src/migration/{ => legacy}/migration_guide_v2tov3.md (99%) rename docs/book/src/migration/{ => legacy}/v1vsv2.md (97%) rename docs/book/src/migration/{ => legacy}/v2vsv3.md (91%) create mode 100644 docs/book/src/migration/manually_migration_guide_gov3_to_gov4.md create mode 100644 docs/book/src/migration/migration_guide_gov3_to_gov4.md create mode 100644 docs/book/src/migration/v3-plugins.md create mode 100644 docs/book/src/migration/v3vsv4.md delete mode 100644 docs/book/src/multiversion-tutorial/testdata/project/config/manager/controller_manager_config.yaml create mode 100644 docs/book/src/plugins/testing-plugins.md create mode 100644 docs/book/src/plugins/to-add-optional-features.md create mode 100644 docs/book/src/plugins/to-be-extended.md create mode 100644 docs/book/src/plugins/to-scaffold-project.md delete mode 100644 pkg/cli/alpha/config-gen/README.md delete mode 100644 pkg/cli/alpha/config-gen/cert-generation-filter.go delete mode 100644 pkg/cli/alpha/config-gen/cmd.go delete mode 100644 pkg/cli/alpha/config-gen/component-filter.go delete mode 100644 pkg/cli/alpha/config-gen/controller-gen-filter.go delete mode 100644 pkg/cli/alpha/config-gen/examples/advancedextension/README.md delete mode 100644 pkg/cli/alpha/config-gen/examples/advancedextension/kustomization.yaml delete mode 100644 pkg/cli/alpha/config-gen/examples/advancedextension/main.go delete mode 100644 pkg/cli/alpha/config-gen/examples/basicextension/README.md delete mode 100644 pkg/cli/alpha/config-gen/examples/basicextension/kustomization.yaml delete mode 100644 pkg/cli/alpha/config-gen/examples/basicextension/main.go delete mode 100644 pkg/cli/alpha/config-gen/examples/kustomize/Kustomization.yaml delete mode 100644 pkg/cli/alpha/config-gen/examples/kustomize/README.md delete mode 100644 pkg/cli/alpha/config-gen/examples/standalone/README.md delete mode 100644 pkg/cli/alpha/config-gen/examples/standalone/kubebuilderproject.yaml delete mode 100644 pkg/cli/alpha/config-gen/examples/standalone/patch.yaml delete mode 100644 pkg/cli/alpha/config-gen/sort-filter.go delete mode 100644 pkg/cli/alpha/config-gen/templates/patches/cert-manager/annotation.template.yaml delete mode 100644 pkg/cli/alpha/config-gen/templates/patches/controller-manager/01-auth-proxy.template.yaml delete mode 100644 pkg/cli/alpha/config-gen/templates/patches/controller-manager/02-webhooks.template.yaml delete mode 100644 pkg/cli/alpha/config-gen/templates/patches/controller-manager/99-component.template.yaml delete mode 100644 pkg/cli/alpha/config-gen/templates/patches/crd/conversion.template.yaml delete mode 100644 pkg/cli/alpha/config-gen/templates/resources/auth-proxy-rbac.template.yaml delete mode 100644 pkg/cli/alpha/config-gen/templates/resources/cert-manager.template.yaml delete mode 100644 pkg/cli/alpha/config-gen/templates/resources/component.template.yaml delete mode 100644 pkg/cli/alpha/config-gen/templates/resources/controller-manager.template.yaml delete mode 100644 pkg/cli/alpha/config-gen/templates/resources/development-webhook-secret.template.yaml delete mode 100644 pkg/cli/alpha/config-gen/templates/resources/namespace.template.yaml delete mode 100644 pkg/cli/alpha/config-gen/templates/resources/prometheus.template.yaml delete mode 100644 pkg/cli/alpha/config-gen/templates/resources/rbac.template.yaml delete mode 100644 pkg/cli/alpha/config-gen/testdata/componentconfig/config.yaml delete mode 100644 pkg/cli/alpha/config-gen/testdata/componentconfig/controller_manager_config.yaml delete mode 100644 pkg/cli/alpha/config-gen/testdata/componentconfig/expected.yaml delete mode 100644 pkg/cli/alpha/config-gen/testdata/default/config.yaml delete mode 100644 pkg/cli/alpha/config-gen/testdata/default/expected.yaml delete mode 100644 pkg/cli/alpha/config-gen/testdata/disableauthproxy/config.yaml delete mode 100644 pkg/cli/alpha/config-gen/testdata/disableauthproxy/expected.yaml delete mode 100644 pkg/cli/alpha/config-gen/testdata/doc.go delete mode 100644 pkg/cli/alpha/config-gen/testdata/enablecertmanager/config.yaml delete mode 100644 pkg/cli/alpha/config-gen/testdata/enablecertmanager/expected.yaml delete mode 100644 pkg/cli/alpha/config-gen/testdata/enableconversionwebhooks/config.yaml delete mode 100644 pkg/cli/alpha/config-gen/testdata/enableconversionwebhooks/expected.yaml delete mode 100644 pkg/cli/alpha/config-gen/testdata/enableprometheus/config.yaml delete mode 100644 pkg/cli/alpha/config-gen/testdata/enableprometheus/expected.yaml delete mode 100644 pkg/cli/alpha/config-gen/testdata/enablewebhooks/config.yaml delete mode 100644 pkg/cli/alpha/config-gen/testdata/enablewebhooks/expected.yaml delete mode 100644 pkg/cli/alpha/config-gen/testdata/go.sum delete mode 100644 pkg/cli/alpha/config-gen/testdata/project/api/v1alpha1/foo_types.go delete mode 100644 pkg/cli/alpha/config-gen/testdata/project/api/v1alpha1/groupversion_info.go delete mode 100644 pkg/cli/alpha/config-gen/testdata/project/api/v1alpha1/zz_generated.deepcopy.go delete mode 100644 pkg/cli/alpha/config-gen/testdata/project/api/v1beta1/bar_types.go delete mode 100644 pkg/cli/alpha/config-gen/testdata/project/api/v1beta1/groupversion_info.go delete mode 100644 pkg/cli/alpha/config-gen/testdata/project/api/v1beta1/zz_generated.deepcopy.go delete mode 100644 pkg/cli/alpha/config-gen/testdata/project/controllers/foo_controller.go delete mode 100644 pkg/cli/alpha/config-gen/types.go create mode 100644 pkg/plugins/common/kustomize/v2-alpha/scaffolds/internal/templates/config/samples/kustomization.go create mode 100644 pkg/plugins/golang/v4/api.go create mode 100644 pkg/plugins/golang/v4/edit.go create mode 100644 pkg/plugins/golang/v4/init.go create mode 100644 pkg/plugins/golang/v4/plugin.go create mode 100644 pkg/plugins/golang/v4/scaffolds/api.go rename pkg/{cli/alpha/config-gen/configgen_test.go => plugins/golang/v4/scaffolds/doc.go} (58%) create mode 100644 pkg/plugins/golang/v4/scaffolds/edit.go create mode 100644 pkg/plugins/golang/v4/scaffolds/init.go create mode 100644 pkg/plugins/golang/v4/scaffolds/internal/templates/api/group.go create mode 100644 pkg/plugins/golang/v4/scaffolds/internal/templates/api/types.go create mode 100644 pkg/plugins/golang/v4/scaffolds/internal/templates/api/webhook.go create mode 100644 pkg/plugins/golang/v4/scaffolds/internal/templates/api/webhook_suitetest.go create mode 100644 pkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller.go create mode 100644 pkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller_suitetest.go create mode 100644 pkg/plugins/golang/v4/scaffolds/internal/templates/dockerfile.go create mode 100644 pkg/plugins/golang/v4/scaffolds/internal/templates/dockerignore.go create mode 100644 pkg/plugins/golang/v4/scaffolds/internal/templates/gitignore.go create mode 100644 pkg/plugins/golang/v4/scaffolds/internal/templates/gomod.go create mode 100644 pkg/plugins/golang/v4/scaffolds/internal/templates/hack/boilerplate.go create mode 100644 pkg/plugins/golang/v4/scaffolds/internal/templates/main.go create mode 100644 pkg/plugins/golang/v4/scaffolds/internal/templates/makefile.go create mode 100644 pkg/plugins/golang/v4/scaffolds/internal/templates/readme.go create mode 100644 pkg/plugins/golang/v4/scaffolds/webhook.go create mode 100644 pkg/plugins/golang/v4/webhook.go rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/.dockerignore (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/.gitignore (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/Dockerfile (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/Makefile (88%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/PROJECT (72%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/README.md (93%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/api/v1/admiral_types.go (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/api/v1/captain_types.go (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/api/v1/firstmate_types.go (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/api/v1/groupversion_info.go (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/api/v1/zz_generated.deepcopy.go (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/channels/packages/admiral/0.0.1/manifest.yaml (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/channels/packages/captain/0.0.1/manifest.yaml (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/channels/packages/firstmate/0.0.1/manifest.yaml (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/channels/stable (100%) rename testdata/{project-v4-addon-and-grafana => project-v3-declarative-v1}/config/crd/bases/crew.testproject.org_admirals.yaml (95%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/crd/bases/crew.testproject.org_captains.yaml (95%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/crd/bases/crew.testproject.org_firstmates.yaml (95%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/crd/kustomization.yaml (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/crd/kustomizeconfig.yaml (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/crd/patches/cainjection_in_admirals.yaml (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/crd/patches/cainjection_in_captains.yaml (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/crd/patches/cainjection_in_firstmates.yaml (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/crd/patches/webhook_in_admirals.yaml (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/crd/patches/webhook_in_captains.yaml (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/crd/patches/webhook_in_firstmates.yaml (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/default/kustomization.yaml (96%) rename testdata/{project-v4-addon-and-grafana => project-v3-declarative-v1}/config/default/manager_auth_proxy_patch.yaml (96%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/default/manager_config_patch.yaml (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/manager/kustomization.yaml (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/manager/manager.yaml (92%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/prometheus/kustomization.yaml (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/prometheus/monitor.yaml (84%) rename testdata/{project-v4-addon-and-grafana => project-v3-declarative-v1}/config/rbac/admiral_editor_role.yaml (82%) rename testdata/{project-v4-addon-and-grafana => project-v3-declarative-v1}/config/rbac/admiral_viewer_role.yaml (80%) rename testdata/{project-v4-addon-and-grafana => project-v3-declarative-v1}/config/rbac/auth_proxy_client_clusterrole.yaml (73%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/rbac/auth_proxy_role.yaml (79%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/rbac/auth_proxy_role_binding.yaml (79%) rename testdata/{project-v4-addon-and-grafana => project-v3-declarative-v1}/config/rbac/auth_proxy_service.yaml (79%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/rbac/captain_editor_role.yaml (82%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/rbac/captain_viewer_role.yaml (80%) rename testdata/{project-v4-addon-and-grafana => project-v3-declarative-v1}/config/rbac/firstmate_editor_role.yaml (82%) rename testdata/{project-v4-addon-and-grafana => project-v3-declarative-v1}/config/rbac/firstmate_viewer_role.yaml (81%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/rbac/kustomization.yaml (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/rbac/leader_election_role.yaml (84%) rename testdata/{project-v4-addon-and-grafana => project-v3-declarative-v1}/config/rbac/leader_election_role_binding.yaml (79%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/rbac/role.yaml (100%) rename testdata/{project-v4-addon-and-grafana => project-v3-declarative-v1}/config/rbac/role_binding.yaml (79%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/rbac/service_account.yaml (56%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/config/samples/crew_v1_admiral.yaml (56%) rename testdata/{project-v4-addon-and-grafana => project-v3-declarative-v1}/config/samples/crew_v1_captain.yaml (56%) rename testdata/{project-v4-addon-and-grafana => project-v3-declarative-v1}/config/samples/crew_v1_firstmate.yaml (57%) rename testdata/{project-v4-addon-and-grafana => project-v3-declarative-v1}/controllers/admiral_controller.go (97%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/controllers/captain_controller.go (97%) rename testdata/{project-v4-addon-and-grafana => project-v3-declarative-v1}/controllers/firstmate_controller.go (97%) rename testdata/{project-v4-addon-and-grafana => project-v3-declarative-v1}/controllers/suite_test.go (96%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/go.mod (98%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/grafana/controller-resources-metrics.json (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/grafana/controller-runtime-metrics.json (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/grafana/custom-metrics/config.yaml (78%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/hack/boilerplate.go.txt (100%) rename testdata/{project-v3-addon-and-grafana => project-v3-declarative-v1}/main.go (95%) rename testdata/{project-v4-addon-and-grafana => project-v3-with-metrics}/.dockerignore (100%) rename testdata/{project-v4-addon-and-grafana => project-v3-with-metrics}/.gitignore (100%) create mode 100644 testdata/project-v3-with-metrics/Dockerfile rename testdata/{project-v4-addon-and-grafana => project-v3-with-metrics}/Makefile (88%) create mode 100644 testdata/project-v3-with-metrics/PROJECT rename testdata/{project-v4-addon-and-grafana => project-v3-with-metrics}/README.md (93%) create mode 100644 testdata/project-v3-with-metrics/config/default/kustomization.yaml rename testdata/{project-v3-addon-and-grafana => project-v3-with-metrics}/config/default/manager_auth_proxy_patch.yaml (96%) rename testdata/{project-v4-addon-and-grafana => project-v3-with-metrics}/config/default/manager_config_patch.yaml (100%) rename testdata/{project-v4-addon-and-grafana => project-v3-with-metrics}/config/manager/kustomization.yaml (100%) rename testdata/{project-v4-addon-and-grafana => project-v3-with-metrics}/config/manager/manager.yaml (92%) rename testdata/{project-v4-addon-and-grafana => project-v3-with-metrics}/config/prometheus/kustomization.yaml (100%) rename testdata/{project-v4-addon-and-grafana => project-v3-with-metrics}/config/prometheus/monitor.yaml (79%) rename testdata/{project-v3-addon-and-grafana => project-v3-with-metrics}/config/rbac/auth_proxy_client_clusterrole.yaml (73%) rename testdata/{project-v4-addon-and-grafana => project-v3-with-metrics}/config/rbac/auth_proxy_role.yaml (79%) rename testdata/{project-v4-addon-and-grafana => project-v3-with-metrics}/config/rbac/auth_proxy_role_binding.yaml (79%) rename testdata/{project-v3-addon-and-grafana => project-v3-with-metrics}/config/rbac/auth_proxy_service.yaml (79%) rename testdata/{project-v4-addon-and-grafana => project-v3-with-metrics}/config/rbac/kustomization.yaml (100%) rename testdata/{project-v4-addon-and-grafana => project-v3-with-metrics}/config/rbac/leader_election_role.yaml (78%) rename testdata/{project-v3-addon-and-grafana => project-v3-with-metrics}/config/rbac/leader_election_role_binding.yaml (79%) rename testdata/{project-v3-addon-and-grafana => project-v3-with-metrics}/config/rbac/role_binding.yaml (79%) create mode 100644 testdata/project-v3-with-metrics/config/rbac/service_account.yaml rename {pkg/cli/alpha/config-gen/testdata => testdata/project-v3-with-metrics}/go.mod (50%) rename testdata/{project-v4-addon-and-grafana => project-v3-with-metrics}/grafana/controller-resources-metrics.json (100%) rename testdata/{project-v4-addon-and-grafana => project-v3-with-metrics}/grafana/controller-runtime-metrics.json (100%) rename testdata/{project-v4-addon-and-grafana => project-v3-with-metrics}/grafana/custom-metrics/config.yaml (78%) rename testdata/{project-v4-addon-and-grafana => project-v3-with-metrics}/hack/boilerplate.go.txt (100%) create mode 100644 testdata/project-v3-with-metrics/main.go create mode 100644 testdata/project-v4-config/config/samples/kustomization.yaml create mode 100644 testdata/project-v4-declarative-v1/.dockerignore create mode 100644 testdata/project-v4-declarative-v1/.gitignore rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/Dockerfile (100%) create mode 100644 testdata/project-v4-declarative-v1/Makefile rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/PROJECT (72%) create mode 100644 testdata/project-v4-declarative-v1/README.md rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/api/v1/admiral_types.go (100%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/api/v1/captain_types.go (100%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/api/v1/firstmate_types.go (100%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/api/v1/groupversion_info.go (100%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/api/v1/zz_generated.deepcopy.go (100%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/channels/packages/admiral/0.0.1/manifest.yaml (100%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/channels/packages/captain/0.0.1/manifest.yaml (100%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/channels/packages/firstmate/0.0.1/manifest.yaml (100%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/channels/stable (100%) rename testdata/{project-v3-addon-and-grafana => project-v4-declarative-v1}/config/crd/bases/crew.testproject.org_admirals.yaml (95%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/config/crd/bases/crew.testproject.org_captains.yaml (95%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/config/crd/bases/crew.testproject.org_firstmates.yaml (95%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/config/crd/kustomization.yaml (100%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/config/crd/kustomizeconfig.yaml (100%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/config/crd/patches/cainjection_in_admirals.yaml (100%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/config/crd/patches/cainjection_in_captains.yaml (100%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/config/crd/patches/cainjection_in_firstmates.yaml (100%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/config/crd/patches/webhook_in_admirals.yaml (100%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/config/crd/patches/webhook_in_captains.yaml (100%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/config/crd/patches/webhook_in_firstmates.yaml (100%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/config/default/kustomization.yaml (98%) create mode 100644 testdata/project-v4-declarative-v1/config/default/manager_auth_proxy_patch.yaml create mode 100644 testdata/project-v4-declarative-v1/config/default/manager_config_patch.yaml create mode 100644 testdata/project-v4-declarative-v1/config/manager/kustomization.yaml create mode 100644 testdata/project-v4-declarative-v1/config/manager/manager.yaml create mode 100644 testdata/project-v4-declarative-v1/config/prometheus/kustomization.yaml create mode 100644 testdata/project-v4-declarative-v1/config/prometheus/monitor.yaml rename testdata/{project-v3-addon-and-grafana => project-v4-declarative-v1}/config/rbac/admiral_editor_role.yaml (82%) rename testdata/{project-v3-addon-and-grafana => project-v4-declarative-v1}/config/rbac/admiral_viewer_role.yaml (80%) create mode 100644 testdata/project-v4-declarative-v1/config/rbac/auth_proxy_client_clusterrole.yaml create mode 100644 testdata/project-v4-declarative-v1/config/rbac/auth_proxy_role.yaml create mode 100644 testdata/project-v4-declarative-v1/config/rbac/auth_proxy_role_binding.yaml create mode 100644 testdata/project-v4-declarative-v1/config/rbac/auth_proxy_service.yaml rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/config/rbac/captain_editor_role.yaml (82%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/config/rbac/captain_viewer_role.yaml (80%) rename testdata/{project-v3-addon-and-grafana => project-v4-declarative-v1}/config/rbac/firstmate_editor_role.yaml (82%) rename testdata/{project-v3-addon-and-grafana => project-v4-declarative-v1}/config/rbac/firstmate_viewer_role.yaml (81%) create mode 100644 testdata/project-v4-declarative-v1/config/rbac/kustomization.yaml create mode 100644 testdata/project-v4-declarative-v1/config/rbac/leader_election_role.yaml create mode 100644 testdata/project-v4-declarative-v1/config/rbac/leader_election_role_binding.yaml rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/config/rbac/role.yaml (100%) create mode 100644 testdata/project-v4-declarative-v1/config/rbac/role_binding.yaml rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/config/rbac/service_account.yaml (69%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/config/samples/crew_v1_admiral.yaml (56%) rename testdata/{project-v3-addon-and-grafana => project-v4-declarative-v1}/config/samples/crew_v1_captain.yaml (56%) rename testdata/{project-v3-addon-and-grafana => project-v4-declarative-v1}/config/samples/crew_v1_firstmate.yaml (57%) create mode 100644 testdata/project-v4-declarative-v1/config/samples/kustomization.yaml rename testdata/{project-v3-addon-and-grafana => project-v4-declarative-v1}/controllers/admiral_controller.go (97%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/controllers/captain_controller.go (97%) rename testdata/{project-v3-addon-and-grafana => project-v4-declarative-v1}/controllers/firstmate_controller.go (97%) rename testdata/{project-v3-addon-and-grafana => project-v4-declarative-v1}/controllers/suite_test.go (96%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/go.mod (98%) create mode 100644 testdata/project-v4-declarative-v1/grafana/controller-resources-metrics.json create mode 100644 testdata/project-v4-declarative-v1/grafana/controller-runtime-metrics.json create mode 100644 testdata/project-v4-declarative-v1/grafana/custom-metrics/config.yaml rename pkg/cli/alpha/config-gen/testdata/project/controllers/bar_controller.go => testdata/project-v4-declarative-v1/hack/boilerplate.go.txt (53%) rename testdata/{project-v4-addon-and-grafana => project-v4-declarative-v1}/main.go (95%) create mode 100644 testdata/project-v4-multigroup/config/samples/kustomization.yaml create mode 100644 testdata/project-v4-with-deploy-image/config/samples/kustomization.yaml create mode 100644 testdata/project-v4-with-metrics/.dockerignore create mode 100644 testdata/project-v4-with-metrics/.gitignore create mode 100644 testdata/project-v4-with-metrics/Dockerfile create mode 100644 testdata/project-v4-with-metrics/Makefile create mode 100644 testdata/project-v4-with-metrics/PROJECT create mode 100644 testdata/project-v4-with-metrics/README.md create mode 100644 testdata/project-v4-with-metrics/config/default/kustomization.yaml create mode 100644 testdata/project-v4-with-metrics/config/default/manager_auth_proxy_patch.yaml create mode 100644 testdata/project-v4-with-metrics/config/default/manager_config_patch.yaml create mode 100644 testdata/project-v4-with-metrics/config/manager/kustomization.yaml create mode 100644 testdata/project-v4-with-metrics/config/manager/manager.yaml create mode 100644 testdata/project-v4-with-metrics/config/prometheus/kustomization.yaml create mode 100644 testdata/project-v4-with-metrics/config/prometheus/monitor.yaml create mode 100644 testdata/project-v4-with-metrics/config/rbac/auth_proxy_client_clusterrole.yaml create mode 100644 testdata/project-v4-with-metrics/config/rbac/auth_proxy_role.yaml create mode 100644 testdata/project-v4-with-metrics/config/rbac/auth_proxy_role_binding.yaml create mode 100644 testdata/project-v4-with-metrics/config/rbac/auth_proxy_service.yaml create mode 100644 testdata/project-v4-with-metrics/config/rbac/kustomization.yaml create mode 100644 testdata/project-v4-with-metrics/config/rbac/leader_election_role.yaml create mode 100644 testdata/project-v4-with-metrics/config/rbac/leader_election_role_binding.yaml create mode 100644 testdata/project-v4-with-metrics/config/rbac/role_binding.yaml create mode 100644 testdata/project-v4-with-metrics/config/rbac/service_account.yaml create mode 100644 testdata/project-v4-with-metrics/go.mod create mode 100644 testdata/project-v4-with-metrics/grafana/controller-resources-metrics.json create mode 100644 testdata/project-v4-with-metrics/grafana/controller-runtime-metrics.json create mode 100644 testdata/project-v4-with-metrics/grafana/custom-metrics/config.yaml create mode 100644 testdata/project-v4-with-metrics/hack/boilerplate.go.txt create mode 100644 testdata/project-v4-with-metrics/main.go create mode 100644 testdata/project-v4/config/samples/kustomization.yaml diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index 0c35ae885f6..6bc3edb3f32 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -36,7 +36,7 @@ body: Code & details examples `````markdown - Some code code written in Go: + Some code written in Go: ```go type Manager struct { diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml index 8af6803acd5..e0385693029 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -36,7 +36,7 @@ body: Code & details examples `````markdown - Some code code written in Go: + Some code written in Go: ```go type Manager struct { @@ -75,7 +75,7 @@ body: Does it require a particular Kubernetes version? - Is there currently another isssue associated with this (use github syntax + Is there currently another issue associated with this (use github syntax like `#xyz` to link to it)? validations: {required: true} diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000000..99a0002983e --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,49 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + + # Maintain dependencies for GitHub Actions + - package-ecosystem: "github-actions" + # Workflow files stored in the + # default location of `.github/workflows` + directory: "/" + schedule: + interval: "weekly" + commit-message: + prefix: ":seedling:" + labels: + - "ok-to-test" + + # Maintain dependencies for go + - package-ecosystem: "gomod" + directory: "/" + schedule: + interval: "weekly" + labels: + - "ok-to-test" + + # Maintain dependencies for dockerfile in the branches + - package-ecosystem: docker + directory: "/build/thirdparty/darwin" + target-branch: "tools-releases" + schedule: + interval: daily + - package-ecosystem: docker + directory: "/build/thirdparty/linux" + target-branch: "tools-releases" + schedule: + interval: "weekly" + + # Maintain dependencies for dockerfile scaffold in the projects + - package-ecosystem: docker + directory: "testdata/project-v3" + schedule: + interval: daily + - package-ecosystem: docker + directory: "testdata/project-v4" + schedule: + interval: "weekly" diff --git a/.github/workflows/apidiff.yml b/.github/workflows/apidiff.yml index 691a138379b..41863ac6aaa 100644 --- a/.github/workflows/apidiff.yml +++ b/.github/workflows/apidiff.yml @@ -39,7 +39,7 @@ jobs: with: go-version: "1.19" - name: Execute go-apidiff - uses: joelanford/go-apidiff@v0.4.0 + uses: joelanford/go-apidiff@v0.5.0 with: compare-imports: true print-compatible: true diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index bd071310451..95a74972df2 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -39,7 +39,7 @@ jobs: - name: Run linter uses: golangci/golangci-lint-action@v3 with: - version: v1.49 # Always uses the latest patch version. + version: v1.50 only-new-issues: true # Show only new issues if it's a pull request - name: Report failure uses: nashmaniac/create-issue-action@v1.1 @@ -50,3 +50,10 @@ jobs: token: ${{ secrets.GITHUB_TOKEN }} labels: kind/bug body: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} + + yamllint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Run yamllint make target + run: make yamllint \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3bc15ff18e8..6651f6225b1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,17 +9,17 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 0 - name: Fetch all tags run: git fetch --force --tags - name: Set up Go - uses: actions/setup-go@v2 + uses: actions/setup-go@v3 with: go-version: '~1.19' - name: Run GoReleaser - uses: goreleaser/goreleaser-action@v2 + uses: goreleaser/goreleaser-action@v3 with: version: v1.11.2 args: release -f ./build/.goreleaser.yml --rm-dist diff --git a/.github/workflows/unit-tests-legacy.yml b/.github/workflows/unit-tests-legacy.yml index 48725829266..5feb81dc5fb 100644 --- a/.github/workflows/unit-tests-legacy.yml +++ b/.github/workflows/unit-tests-legacy.yml @@ -32,7 +32,7 @@ jobs: # Therefore, we probably will deprecate go/v2 soon since we cannot upgrade it # to use the versions of controller-runtime > v0.9 # and controller-tools > v0.6 as k8s > 1.21 then it might not be valid we spend effort on this fix - go-version: "1.17" + go-version: "1.19" # This step is needed as the following one tries to remove # kustomize for each test but has no permission to do so - name: Remove pre-installed kustomize diff --git a/.gitignore b/.gitignore index 12072430047..3cd3d73e21f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,12 @@ .idea/ .vscode/ - +WORKSPACE # don't check in the build output of the book docs/book/book/ +# ignore auto-generated dir by `mdbook serve` +docs/book/src/docs + # Editor temp files *~ \#*# @@ -22,3 +25,4 @@ docs/book/book/ # skip testdata go.sum, since it may have # different result depending on go version /testdata/**/go.sum +/docs/book/src/simple-external-plugin-tutorial/testdata/sampleexternalplugin/v1/bin \ No newline at end of file diff --git a/.golangci.yml b/.golangci.yml index 88e1f7b5285..0b008e2bb97 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,3 +1,7 @@ +run: + deadline: 5m + allow-parallel-runners: true + issues: # don't skip warning about doc comments # don't exclude the default set of lint @@ -13,8 +17,41 @@ linters-settings: enable=fieldalignment: true revive: rules: - - name: if-return - disabled: true + # The following rules are recommended https://github.com/mgechev/revive#recommended-configuration + - name: blank-imports + - name: context-as-argument + - name: context-keys-type + - name: dot-imports + - name: error-return + - name: error-strings + - name: error-naming + - name: exported + disabled: true # TODO: Investigate if it should be enabled. Disabled for now due to many findings. + - name: if-return + disabled: true # TODO: Investigate if it should be enabled. Disabled for now due to many findings. + - name: increment-decrement + - name: var-naming + disabled: true # TODO: Investigate if it should be enabled. Disabled for now due to many findings. + - name: var-declaration + - name: package-comments + disabled: true # TODO: Investigate if it should be enabled. Disabled for now due to many findings. + - name: range + - name: receiver-naming + - name: time-naming + - name: unexported-return + - name: indent-error-flow + - name: errorf + - name: empty-block + disabled: true # TODO: Investigate if it should be enabled. Disabled for now due to many findings. + - name: superfluous-else + - name: unused-parameter + - name: unreachable-code + - name: redefines-builtin-id + # + # Rules in addition to the recommended configuration above. + # + - name: bool-literal-in-expr + - name: constant-logical-expr linters: disable-all: true @@ -40,6 +77,3 @@ linters: - unconvert - unparam - unused - -run: - deadline: 5m diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 87f6354caa9..26990e19135 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -62,6 +62,63 @@ Following the targets that can be used to test your changes locally. **NOTE** To use the `make lint` is required to install `golangci-lint` locally. More info: https://github.com/golangci/golangci-lint#install +### Test Plugin + +If your intended PR creates a new plugin, make sure the PR also provides test cases. Testing should include: + +1. `e2e tests` to validate the behavior of the proposed plugin. +2. `sample projects` to verify the scaffolded output from the plugin. + +#### 1. Plugin E2E Tests + +All the plugins provided by Kubebuilder should be validated through `e2e-tests` across multiple platforms. + +Current Kubebuilder provides the testing framework that includes testing code based on [ginkgo](https://github.com/onsi/ginkgo), [Github Actions](https://github.com/Kavinjsir/kubebuilder/blob/docs%2Ftest-plugin/.github/workflows/testdata.yml) for unit tests, and multiple env tests driven by [test-infra](https://github.com/kubernetes/test-infra/blob/master/config/jobs/kubernetes-sigs/kubebuilder/kubebuilder-presubmits.yaml). + +To fully test the proposed plugin: + +1. Create a new package(folder) under `test/e2e/`. +2. Create [e2e_suite_test.go](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/test/e2e/v4/e2e_suite_test.go), which imports the necessary testing framework. +3. Create `generate_test.go` ([ref](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/test/e2e/v4/generate_test.go)). That should: + - Introduce/Receive a `TextContext` instance + - Trigger the plugin's bound subcommands. See [Init](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/test/e2e/utils/test_context.go#L213), [CreateAPI](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.6.0/test/e2e/utils/test_context.go#L222) + - Use [PluginUtil](https://pkg.go.dev/sigs.k8s.io/kubebuilder/v3/pkg/plugin/util) to verify the scaffolded outputs. See [InsertCode](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/pkg/plugin/util/util.go#L67), [ReplaceInFile](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.6.0/pkg/plugin/util/util.go#L196), [UncommendCode](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.6.0/pkg/plugin/util/util.go#L86) +4. Create `plugin_cluster_test.go` ([ref](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/test/e2e/v4/plugin_cluster_test.go)). That should: + + - 4.1. Setup testing environment, e.g: + + - Cleanup environment, create temp dir. See [Prepare](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/test/e2e/utils/test_context.go#L97) + - If your test will cover the provided features then, ensure that you install prerequisites CRDs: See [InstallCertManager](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/test/e2e/utils/test_context.go#L138), [InstallPrometheusManager](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.6.0/test/e2e/utils/test_context.go#L171) + + - 4.2. Run the function from `generate_test.go`. + + - 4.3. Further make sure the scaffolded output works, e.g: + + - Execute commands in your `Makefile`. See [Make](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/test/e2e/utils/test_context.go#L240) + - Temporary load image of the testing controller. See [LoadImageToKindCluster](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/test/e2e/utils/test_context.go#L283) + - Call Kubectl to validate running resources. See [utils.Kubectl](https://pkg.go.dev/sigs.k8s.io/kubebuilder/v3/test/e2e/utils#Kubectl) + + - 4.4. Delete temporary resources after testing exited, e.g: + - Uninstall prerequisites CRDs: See [UninstallPrometheusOperManager](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/test/e2e/utils/test_context.go#L183) + - Delete temp dir. See [Destroy](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/test/e2e/utils/test_context.go#L255) + +5. Add the command in [test/e2e/plugin](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/test/e2e/setup.sh#L65) to run your testing code: + +```shell +go test $(dirname "$0")/ $flags -timeout 30m +``` + +#### 2. Sample Projects from the Plugin + +It is also necessary to test consistency of the proposed plugin across different env and the integration with other plugins. + +This is performed by generating sample projects based on the plugins. The CI workflow defined in Github Action would validate the availability and the consistency. + +See: + +- [test/testdata/generated.sh](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/test/testdata/generate.sh#L144) +- [make generate](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/Makefile#L70) + ## PR Process See [VERSIONING.md](VERSIONING.md) for a full description. TL;DR: @@ -82,6 +139,13 @@ changes, which don't deserve a release note. Please don't abuse it. You can also use the equivalent emoji directly, since GitHub doesn't render the `:xyz:` aliases in PR titles. +If the PR is "plugin" scoped, you may also append the responding plugin names in the prefix. +[For instance](https://github.com/kubernetes-sigs/kubebuilder/commit/0b36d0c4021bbf52f29d5a990157466761ec180c): + +``` +🐛 (kustomize/v2-alpha): Fix typo issue in the labels added to the manifests +``` + Individual commits should not be tagged separately, but will generally be assumed to match the PR. For instance, if you have a bugfix in with a breaking change, it's generally encouraged to submit the bugfix diff --git a/Makefile b/Makefile index 8289e0ae7c4..62c570f61aa 100644 --- a/Makefile +++ b/Makefile @@ -72,18 +72,22 @@ generate-testdata: ## Update/generate the testdata in $GOPATH/src/sigs.k8s.io/ku ./test/testdata/generate.sh .PHONY: lint -lint: golangci-lint ## Run golangci-lint linter +lint: golangci-lint yamllint ## Run golangci-lint linter & yamllint $(GOLANGCI_LINT) run .PHONY: lint-fix lint-fix: golangci-lint ## Run golangci-lint linter and perform fixes $(GOLANGCI_LINT) run --fix +.PHONY: yamllint +yamllint: + @docker run --rm $$(tty -s && echo "-it" || echo) -v $(PWD):/data cytopia/yamllint:latest testdata -d "{extends: relaxed, rules: {line-length: {max: 120}}}" --no-warnings + GOLANGCI_LINT = $(shell pwd)/bin/golangci-lint golangci-lint: @[ -f $(GOLANGCI_LINT) ] || { \ set -e ;\ - curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(shell dirname $(GOLANGCI_LINT)) v1.49.0 ;\ + curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(shell dirname $(GOLANGCI_LINT)) v1.50.1 ;\ } .PHONY: apidiff @@ -92,7 +96,7 @@ apidiff: go-apidiff ## Run the go-apidiff to verify any API differences compared .PHONY: go-apidiff go-apidiff: - go install github.com/joelanford/go-apidiff@v0.4.0 + go install github.com/joelanford/go-apidiff@v0.5.0 ##@ Tests @@ -139,6 +143,8 @@ test-e2e-ci: ## Run the end-to-end tests (used in the CI)` .PHONY: test-book test-book: ## Run the cronjob tutorial's unit tests to make sure we don't break it cd ./docs/book/src/cronjob-tutorial/testdata/project && make test + cd ./docs/book/src/component-config-tutorial/testdata/project && make test + cd ./docs/book/src/multiversion-tutorial/testdata/project && make test .PHONY: test-license test-license: ## Run the license check diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index 0d25ac98220..9ae98625774 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -6,11 +6,11 @@ aliases: kubebuilder-admins: - pwittrock - camilamacedo86 + - jmrodri + - varshaprasad96 # non-admin folks who can approve any PRs in the repo kubebuilder-approvers: - - jmrodri - - varshaprasad96 # folks who can review and LGTM any PRs in the repo (doesn't include # approvers & admins -- those count too via the OWNERS file) diff --git a/RELEASE.md b/RELEASE.md index c5c6fe00929..4f00aad65b7 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -7,7 +7,7 @@ to create a new branch. Instead, you will just need to ensure that all major fix `release-MAJOR.MINOR` branch. To know more about versioning check https://semver.org/. **Note:** Before `3.5.*` release this project was released based on `MAJOR`. A change to the -the process was done to ensure that we have an aligned process under the org (similar to `controller-runtime` and +process was done to ensure that we have an aligned process under the org (similar to `controller-runtime` and `controller-tools`) and to make it easier to produce patch releases. ## How to do a release diff --git a/WORKSPACE b/WORKSPACE deleted file mode 100644 index 10ef0117cb9..00000000000 --- a/WORKSPACE +++ /dev/null @@ -1,12 +0,0 @@ -http_archive( - name = "io_bazel_rules_go", - url = "https://github.com/bazelbuild/rules_go/releases/download/0.9.0/rules_go-0.9.0.tar.gz", - sha256 = "4d8d6244320dd751590f9100cf39fd7a4b75cd901e1f3ffdfd6f048328883695", -) -load("@io_bazel_rules_go//go:def.bzl", "go_rules_dependencies", "go_register_toolchains") -go_rules_dependencies() -go_register_toolchains() - -load("@io_bazel_rules_go//proto:def.bzl", "proto_register_toolchains") -proto_register_toolchains() - diff --git a/build/.goreleaser.yml b/build/.goreleaser.yml index e08fa0806a3..881dab0aa54 100644 --- a/build/.goreleaser.yml +++ b/build/.goreleaser.yml @@ -44,7 +44,7 @@ builds: - darwin_amd64 - darwin_arm64 env: - - KUBERNETES_VERSION=1.24.1 + - KUBERNETES_VERSION=1.25.0 - CGO_ENABLED=0 # Only binaries of the form "kubebuilder_${goos}_${goarch}" will be released. diff --git a/cmd/main.go b/cmd/main.go index 7dc5d59d92e..98e64696b96 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -34,6 +34,7 @@ import ( deployimagev1alpha1 "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1" golangv2 "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2" golangv3 "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3" + golangv4 "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4" grafanav1alpha1 "sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha" ) @@ -44,10 +45,10 @@ func main() { kustomizecommonv1.Plugin{}, golangv3.Plugin{}, ) - // Bundle plugin which built the golang projects scaffold by Kubebuilder go/v3 with kustomize alpha-v2 + // Bundle plugin which built the golang projects scaffold by Kubebuilder go/v4 with kustomize alpha-v2 gov4Bundle, _ := plugin.NewBundle(golang.DefaultNameQualifier, plugin.Version{Number: 4, Stage: stage.Alpha}, kustomizecommonv2alpha.Plugin{}, - golangv3.Plugin{}, + golangv4.Plugin{}, ) fs := machinery.Filesystem{ @@ -64,6 +65,7 @@ func main() { cli.WithPlugins( golangv2.Plugin{}, golangv3.Plugin{}, + golangv4.Plugin{}, gov3Bundle, gov4Bundle, &kustomizecommonv1.Plugin{}, diff --git a/docs/README.md b/docs/README.md index e6b1dd79ca5..63c3996b1a5 100644 --- a/docs/README.md +++ b/docs/README.md @@ -3,10 +3,11 @@ The kubebuilder book is served using [mdBook](https://github.com/rust-lang-nursery/mdBook). If you want to test changes to the book locally, follow these directions: 1. Follow the instructions at [https://github.com/rust-lang-nursery/mdBook#installation](https://github.com/rust-lang-nursery/mdBook#installation) to - install mdBook. -1. cd into the `docs/book` directory -1. Run `mdbook serve` -1. Visit [http://localhost:3000](http://localhost:3000) + install mdBook. +2. Make sure [controller-gen](https://pkg.go.dev/sigs.k8s.io/controller-tools/cmd/controller-gen) is install in `$GOPATH`. +3. cd into the `docs/book` directory +4. Run `mdbook serve` +5. Visit [http://localhost:3000](http://localhost:3000) # Steps to deploy diff --git a/docs/book/book.toml b/docs/book/book.toml index 7aadb547fc5..0dc3a87c8c0 100644 --- a/docs/book/book.toml +++ b/docs/book/book.toml @@ -8,6 +8,8 @@ title = "The Kubebuilder Book" google-analytics = "UA-119864590-1" curly-quotes = true additional-css = ["theme/css/markers.css", "theme/css/custom.css"] +git-repository-url = "https://github.com/kubernetes-sigs/kubebuilder" +edit-url-template = "https://github.com/kubernetes-sigs/kubebuilder/edit/master/docs/book/{path}" [preprocessor.literatego] command = "./litgo.sh" diff --git a/docs/book/install-and-build.sh b/docs/book/install-and-build.sh index 0e145825d64..cb973a4cdfb 100755 --- a/docs/book/install-and-build.sh +++ b/docs/book/install-and-build.sh @@ -60,14 +60,14 @@ esac # grab mdbook # we hardcode linux/amd64 since rust uses a different naming scheme and it's a pain to tran -echo "downloading mdBook-v0.4.2-${arch}-${target}.${ext}" +echo "downloading mdBook-v0.4.21-${arch}-${target}.${ext}" set -x curl -sL -o /tmp/mdbook.${ext} https://github.com/rust-lang-nursery/mdBook/releases/download/v0.4.2/mdBook-v0.4.2-${arch}-${target}.${ext} ${cmd} /tmp/mdbook.${ext} chmod +x /tmp/mdbook echo "grabbing the latest released controller-gen" -go install sigs.k8s.io/controller-tools/cmd/controller-gen@v0.8.0 +go install sigs.k8s.io/controller-tools/cmd/controller-gen@v0.10.0 # make sure we add the go bin directory to our path gobin=$(go env GOBIN) diff --git a/docs/book/src/SUMMARY.md b/docs/book/src/SUMMARY.md index 105cca3c0d2..3a90c65b218 100644 --- a/docs/book/src/SUMMARY.md +++ b/docs/book/src/SUMMARY.md @@ -6,6 +6,8 @@ [Architecture](./architecture.md) +[FAQ](./faq.md) + --- - [Tutorial: Building CronJob](cronjob-tutorial/cronjob-tutorial.md) @@ -16,7 +18,7 @@ - [Adding a new API](./cronjob-tutorial/new-api.md) - [Designing an API](./cronjob-tutorial/api-design.md) - - [A Brief Aside: What's the rest of this stuff?](./cronjob-tutorial/other-api-files.md) + - [A Brief Aside: What's the rest of this stuff?](./cronjob-tutorial/other-api-files.md) - [What's in a controller?](./cronjob-tutorial/controller-overview.md) - [Implementing a controller](./cronjob-tutorial/controller-implementation.md) @@ -26,7 +28,7 @@ - [Implementing defaulting/validating webhooks](./cronjob-tutorial/webhook-implementation.md) - [Running and deploying the controller](./cronjob-tutorial/running.md) - - [Deploying the cert manager](./cronjob-tutorial/cert-manager.md) + - [Deploying cert-manager](./cronjob-tutorial/cert-manager.md) - [Deploying webhooks](./cronjob-tutorial/running-webhook.md) - [Writing tests](./cronjob-tutorial/writing-tests.md) @@ -39,7 +41,7 @@ - [Hubs, spokes, and other wheel metaphors](./multiversion-tutorial/conversion-concepts.md) - [Implementing conversion](./multiversion-tutorial/conversion.md) - - [and setting up the webhooks](./multiversion-tutorial/webhooks.md) + - [and setting up the webhooks](./multiversion-tutorial/webhooks.md) - [Deployment and Testing](./multiversion-tutorial/deployment.md) @@ -50,21 +52,28 @@ - [Using a custom type](./component-config-tutorial/custom-type.md) - - [Adding a new Config Type](./component-config-tutorial/config-type.md) - - [Updating main](./component-config-tutorial/updating-main.md) - - [Defining your Custom Config](./component-config-tutorial/define-custom-config.md) + - [Adding a new Config Type](./component-config-tutorial/config-type.md) + - [Updating main](./component-config-tutorial/updating-main.md) + - [Defining your Custom Config](./component-config-tutorial/define-custom-config.md) + --- - [Migrations](./migrations.md) - - [Kubebuilder v1 vs v2](./migration/v1vsv2.md) + - [Legacy (before <= v3.0.0)](./migration/legacy.md) + - [Kubebuilder v1 vs v2](migration/legacy/v1vsv2.md) - [Migration Guide](./migration/legacy/migration_guide_v1tov2.md) - - [Kubebuilder v2 vs v3](./migration/v2vsv3.md) - - [Migration Guide](./migration/migration_guide_v2tov3.md) - - [Migration by updating the files](./migration/manually_migration_guide_v2_v3.md) + - [Kubebuilder v2 vs v3](migration/legacy/v2vsv3.md) + - [Migration Guide](migration/legacy/migration_guide_v2tov3.md) + - [Migration by updating the files](migration/legacy/manually_migration_guide_v2_v3.md) + - [From v3.0.0 with plugins](./migration/v3-plugins.md) + - [go/v3 vs go/v4-alpha](migration/v3vsv4.md) + + - [Migration Guide](migration/migration_guide_gov3_to_gov4.md) + - [Migration by updating the files](migration/manually_migration_guide_gov3_to_gov4.md) - [Single Group to Multi-Group](./migration/multi-group.md) --- @@ -82,22 +91,22 @@ - [Webhooks for Core Types](reference/webhook-for-core-types.md) - [Markers for Config/Code Generation](./reference/markers.md) - - [CRD Generation](./reference/markers/crd.md) - - [CRD Validation](./reference/markers/crd-validation.md) - - [CRD Processing](./reference/markers/crd-processing.md) - - [Webhook](./reference/markers/webhook.md) - - [Object/DeepCopy](./reference/markers/object.md) - - [RBAC](./reference/markers/rbac.md) + - [CRD Generation](./reference/markers/crd.md) + - [CRD Validation](./reference/markers/crd-validation.md) + - [CRD Processing](./reference/markers/crd-processing.md) + - [Webhook](./reference/markers/webhook.md) + - [Object/DeepCopy](./reference/markers/object.md) + - [RBAC](./reference/markers/rbac.md) - [controller-gen CLI](./reference/controller-gen.md) - [completion](./reference/completion.md) - [Artifacts](./reference/artifacts.md) - - [Platform Support](platform.md) + - [Platform Support](./reference/platform.md) - [Configuring EnvTest](./reference/envtest.md) - [Metrics](./reference/metrics.md) - - [Reference](./reference/metrics-reference.md) + - [Reference](./reference/metrics-reference.md) - [Makefile Helpers](./reference/makefile-helpers.md) - [Project config](./reference/project-config.md) @@ -107,20 +116,24 @@ - [Plugins][plugins] - [Available Plugins](./plugins/available-plugins.md) + - [To scaffold a project](./plugins/to-scaffold-project.md) - [go/v2 (Deprecated)](./plugins/go-v2-plugin.md) - [go/v3 (Default init scaffold)](./plugins/go-v3-plugin.md) - [go/v4-alpha](./plugins/go-v4-plugin.md) - - [kustomize/v1](./plugins/kustomize-v1.md) - - [kustomize/v2-alpha](./plugins/kustomize-v2-alpha.md) + - [To add optional features](./plugins/to-add-optional-features.md) - [declarative/v1](./plugins/declarative-v1.md) - [grafana/v1-alpha](./plugins/grafana-v1-alpha.md) - [deploy-image/v1-alpha](./plugins/deploy-image-plugin-v1-alpha.md) + - [To be extended for others tools](./plugins/to-be-extended.md) + - [kustomize/v1](./plugins/kustomize-v1.md) + - [kustomize/v2-alpha](./plugins/kustomize-v2-alpha.md) - [Extending the CLI](./plugins/extending-cli.md) - [Creating your own plugins](./plugins/creating-plugins.md) + - [Testing your own plugins](./plugins/testing-plugins.md) - [Plugins Versioning](./plugins/plugins-versioning.md) ---- -[Appendix: The TODO Landing Page](./TODO.md) +--- +[Appendix: The TODO Landing Page](./TODO.md) [plugins]: ./plugins/plugins.md diff --git a/docs/book/src/component-config-tutorial/api-changes.md b/docs/book/src/component-config-tutorial/api-changes.md index 850fb1411cb..a762e43dcae 100644 --- a/docs/book/src/component-config-tutorial/api-changes.md +++ b/docs/book/src/component-config-tutorial/api-changes.md @@ -57,7 +57,7 @@ loading the config from the file. -Lastly, we'll change the `NewManager` call to use the `options` varible we +Lastly, we'll change the `NewManager` call to use the `options` variable we defined above. ```go @@ -106,13 +106,16 @@ configMapGenerator: - controller_manager_config.yaml ``` -Update the file `default/kustomization.yaml` by adding under the patchesStrategicMerge: the following patch: +Update the file `default/kustomization.yaml` by adding under the [`patchesStrategicMerge:` key](https://kubectl.docs.kubernetes.io/references/kustomize/builtins/#_patchesstrategicmerge_) the following patch: +```yaml +patchesStrategicMerge: # Mount the controller config file for loading manager configurations # through a ComponentConfig type - manager_config_patch.yaml +``` -Update the file `default/manager_config_patch.yaml` by adding under the spec: the following patch: +Update the file `default/manager_config_patch.yaml` by adding under the `spec:` key the following patch: ```yaml spec: @@ -131,4 +134,3 @@ spec: configMap: name: manager-config ``` - diff --git a/docs/book/src/component-config-tutorial/testdata/project/.gitignore b/docs/book/src/component-config-tutorial/testdata/project/.gitignore index c0a7a54cac5..e917e5cefe5 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/.gitignore +++ b/docs/book/src/component-config-tutorial/testdata/project/.gitignore @@ -7,6 +7,7 @@ *.dylib bin testbin/* +Dockerfile.cross # Test binary, build with `go test -c` *.test diff --git a/docs/book/src/component-config-tutorial/testdata/project/Dockerfile b/docs/book/src/component-config-tutorial/testdata/project/Dockerfile index af79763e84f..8f9cca18eb6 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/Dockerfile +++ b/docs/book/src/component-config-tutorial/testdata/project/Dockerfile @@ -1,5 +1,7 @@ # Build the manager binary FROM golang:1.19 as builder +ARG TARGETOS +ARG TARGETARCH WORKDIR /workspace # Copy the Go Modules manifests @@ -15,7 +17,11 @@ COPY api/ api/ COPY controllers/ controllers/ # Build -RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o manager main.go +# the GOARCH has not a default value to allow the binary be built according to the host where the command +# was called. For example, if we call make docker-build in a local env which has the Apple Silicon M1 SO +# the docker BUILDPLATFORM arg will be linux/arm64 when for Apple x86 it will be linux/amd64. Therefore, +# by leaving it empty we can ensure that the container and binary shipped on it will have the same platform. +RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} go build -a -o manager main.go # Use distroless as minimal base image to package the manager binary # Refer to https://github.com/GoogleContainerTools/distroless for more details diff --git a/docs/book/src/component-config-tutorial/testdata/project/Makefile b/docs/book/src/component-config-tutorial/testdata/project/Makefile index e93e58def43..e833f6285ad 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/Makefile +++ b/docs/book/src/component-config-tutorial/testdata/project/Makefile @@ -56,7 +56,7 @@ vet: ## Run go vet against code. .PHONY: test test: manifests generate fmt vet envtest ## Run tests. - KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" go test ./... -coverprofile cover.out + KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) --bin-dir $(LOCALBIN) -p path)" go test ./... -coverprofile cover.out ##@ Build @@ -68,6 +68,9 @@ build: generate fmt vet ## Build manager binary. run: manifests generate fmt vet ## Run a controller from your host. go run ./main.go +# If you wish built the manager image targeting other platforms you can use the --platform flag. +# (i.e. docker build --platform linux/arm64 ). However, you must enable docker buildKit for it. +# More info: https://docs.docker.com/develop/develop-images/build_enhancements/ .PHONY: docker-build docker-build: test ## Build docker image with the manager. docker build -t ${IMG} . @@ -76,6 +79,23 @@ docker-build: test ## Build docker image with the manager. docker-push: ## Push docker image with the manager. docker push ${IMG} +# PLATFORMS defines the target platforms for the manager image be build to provide support to multiple +# architectures. (i.e. make docker-buildx IMG=myregistry/mypoperator:0.0.1). To use this option you need to: +# - able to use docker buildx . More info: https://docs.docker.com/build/buildx/ +# - have enable BuildKit, More info: https://docs.docker.com/develop/develop-images/build_enhancements/ +# - be able to push the image for your registry (i.e. if you do not inform a valid value via IMG=> then the export will fail) +# To properly provided solutions that supports more than one platform you should use this option. +PLATFORMS ?= linux/arm64,linux/amd64,linux/s390x,linux/ppc64le +.PHONY: docker-buildx +docker-buildx: test ## Build and push docker image for the manager for cross-platform support + # copy existing Dockerfile and insert --platform=${BUILDPLATFORM} into Dockerfile.cross, and preserve the original Dockerfile + sed -e '1 s/\(^FROM\)/FROM --platform=\$$\{BUILDPLATFORM\}/; t' -e ' 1,// s//FROM --platform=\$$\{BUILDPLATFORM\}/' Dockerfile > Dockerfile.cross + - docker buildx create --name project-v3-builder + docker buildx use project-v3-builder + - docker buildx build --push --platform=$(PLATFORMS) --tag ${IMG} -f Dockerfile.cross + - docker buildx rm project-v3-builder + rm Dockerfile.cross + ##@ Deployment ifndef ignore-not-found @@ -112,8 +132,8 @@ CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen ENVTEST ?= $(LOCALBIN)/setup-envtest ## Tool Versions -KUSTOMIZE_VERSION ?= v3.8.7 -CONTROLLER_TOOLS_VERSION ?= v0.9.0 +KUSTOMIZE_VERSION ?= v4.5.7 +CONTROLLER_TOOLS_VERSION ?= v0.10.0 KUSTOMIZE_INSTALL_SCRIPT ?= "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" .PHONY: kustomize diff --git a/docs/book/src/component-config-tutorial/testdata/project/api/v2/groupversion_info.go b/docs/book/src/component-config-tutorial/testdata/project/api/v2/groupversion_info.go index 97d627cdc06..48c9fa19d75 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/api/v2/groupversion_info.go +++ b/docs/book/src/component-config-tutorial/testdata/project/api/v2/groupversion_info.go @@ -15,8 +15,8 @@ limitations under the License. */ // Package v2 contains API Schema definitions for the config v2 API group -//+kubebuilder:object:generate=true -//+groupName=config.tutorial.kubebuilder.io +// +kubebuilder:object:generate=true +// +groupName=config.tutorial.kubebuilder.io package v2 import ( diff --git a/docs/book/src/component-config-tutorial/testdata/project/api/v2/projectconfig_types.go b/docs/book/src/component-config-tutorial/testdata/project/api/v2/projectconfig_types.go index d18031021b0..c7a6f23d896 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/api/v2/projectconfig_types.go +++ b/docs/book/src/component-config-tutorial/testdata/project/api/v2/projectconfig_types.go @@ -50,7 +50,7 @@ type ProjectConfig struct { Spec ProjectConfigSpec `json:"spec,omitempty"` Status ProjectConfigStatus `json:"status,omitempty"` - // ControllerManagerConfigurationSpec returns the contfigurations for controllers + // ControllerManagerConfigurationSpec returns the configurations for controllers cfg.ControllerManagerConfigurationSpec `json:",inline"` ClusterName string `json:"clusterName,omitempty"` diff --git a/docs/book/src/component-config-tutorial/testdata/project/config/crd/bases/config.tutorial.kubebuilder.io_projectconfigs.yaml b/docs/book/src/component-config-tutorial/testdata/project/config/crd/bases/config.tutorial.kubebuilder.io_projectconfigs.yaml index 337159d4114..40777ad4082 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/config/crd/bases/config.tutorial.kubebuilder.io_projectconfigs.yaml +++ b/docs/book/src/component-config-tutorial/testdata/project/config/crd/bases/config.tutorial.kubebuilder.io_projectconfigs.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.9.0 + controller-gen.kubebuilder.io/version: v0.10.0 creationTimestamp: null name: projectconfigs.config.tutorial.kubebuilder.io spec: diff --git a/docs/book/src/component-config-tutorial/testdata/project/config/default/kustomization.yaml b/docs/book/src/component-config-tutorial/testdata/project/config/default/kustomization.yaml index 272d2132c6d..c5d1f660399 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/config/default/kustomization.yaml +++ b/docs/book/src/component-config-tutorial/testdata/project/config/default/kustomization.yaml @@ -30,6 +30,7 @@ patchesStrategicMerge: # endpoint w/o any authn/z, please comment the following line. - manager_auth_proxy_patch.yaml + # Mount the controller config file for loading manager configurations # through a ComponentConfig type - manager_config_patch.yaml diff --git a/docs/book/src/component-config-tutorial/testdata/project/config/default/manager_auth_proxy_patch.yaml b/docs/book/src/component-config-tutorial/testdata/project/config/default/manager_auth_proxy_patch.yaml index cec149a0781..7945f64a1de 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/config/default/manager_auth_proxy_patch.yaml +++ b/docs/book/src/component-config-tutorial/testdata/project/config/default/manager_auth_proxy_patch.yaml @@ -8,6 +8,22 @@ metadata: spec: template: spec: + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/arch + operator: In + values: + - amd64 + - arm64 + - ppc64le + - s390x + - key: kubernetes.io/os + operator: In + values: + - linux containers: - name: kube-rbac-proxy securityContext: @@ -15,7 +31,7 @@ spec: capabilities: drop: - "ALL" - image: gcr.io/kubebuilder/kube-rbac-proxy:v0.13.0 + image: gcr.io/kubebuilder/kube-rbac-proxy:v0.13.1 args: - "--secure-listen-address=0.0.0.0:8443" - "--upstream=http://127.0.0.1:8080/" @@ -32,8 +48,3 @@ spec: requests: cpu: 5m memory: 64Mi - - name: manager - args: - - "--health-probe-bind-address=:8081" - - "--metrics-bind-address=127.0.0.1:8080" - - "--leader-elect" diff --git a/docs/book/src/component-config-tutorial/testdata/project/config/manager/controller_manager_config.yaml b/docs/book/src/component-config-tutorial/testdata/project/config/manager/controller_manager_config.yaml index e2c03d28824..1391a7ad490 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/config/manager/controller_manager_config.yaml +++ b/docs/book/src/component-config-tutorial/testdata/project/config/manager/controller_manager_config.yaml @@ -1,5 +1,13 @@ -apiVersion: config.tutorial.kubebuilder.io/v2 -kind: ProjectConfig +apiVersion: controller-runtime.sigs.k8s.io/v1alpha1 +kind: ControllerManagerConfig +metadata: + labels: + app.kubernetes.io/name: controllermanagerconfig + app.kubernetes.io/instance: controller-manager-configuration + app.kubernetes.io/component: manager + app.kubernetes.io/created-by: project + app.kubernetes.io/part-of: project + app.kubernetes.io/managed-by: kustomize health: healthProbeBindAddress: :8081 metrics: diff --git a/docs/book/src/component-config-tutorial/testdata/project/config/manager/manager.yaml b/docs/book/src/component-config-tutorial/testdata/project/config/manager/manager.yaml index d2bc14ba9c2..6e09e6bf26e 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/config/manager/manager.yaml +++ b/docs/book/src/component-config-tutorial/testdata/project/config/manager/manager.yaml @@ -3,6 +3,12 @@ kind: Namespace metadata: labels: control-plane: controller-manager + app.kubernetes.io/name: namespace + app.kubernetes.io/instance: system + app.kubernetes.io/component: manager + app.kubernetes.io/created-by: project + app.kubernetes.io/part-of: project + app.kubernetes.io/managed-by: kustomize name: system --- apiVersion: apps/v1 @@ -12,6 +18,12 @@ metadata: namespace: system labels: control-plane: controller-manager + app.kubernetes.io/name: deployment + app.kubernetes.io/instance: controller-manager + app.kubernetes.io/component: manager + app.kubernetes.io/created-by: project + app.kubernetes.io/part-of: project + app.kubernetes.io/managed-by: kustomize spec: selector: matchLabels: @@ -24,6 +36,26 @@ spec: labels: control-plane: controller-manager spec: + # TODO(user): Uncomment the following code to configure the nodeAffinity expression + # according to the platforms which are supported by your solution. + # It is considered best practice to support multiple architectures. You can + # build your manager image using the makefile target docker-buildx. + # affinity: + # nodeAffinity: + # requiredDuringSchedulingIgnoredDuringExecution: + # nodeSelectorTerms: + # - matchExpressions: + # - key: kubernetes.io/arch + # operator: In + # values: + # - amd64 + # - arm64 + # - ppc64le + # - s390x + # - key: kubernetes.io/os + # operator: In + # values: + # - linux securityContext: runAsNonRoot: true # TODO(user): For common cases that do not require escalating privileges diff --git a/docs/book/src/component-config-tutorial/testdata/project/config/prometheus/monitor.yaml b/docs/book/src/component-config-tutorial/testdata/project/config/prometheus/monitor.yaml index d19136ae710..b694c241666 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/config/prometheus/monitor.yaml +++ b/docs/book/src/component-config-tutorial/testdata/project/config/prometheus/monitor.yaml @@ -5,6 +5,12 @@ kind: ServiceMonitor metadata: labels: control-plane: controller-manager + app.kubernetes.io/name: servicemonitor + app.kubernetes.io/instance: controller-manager-metrics-monitor + app.kubernetes.io/component: metrics + app.kubernetes.io/created-by: project + app.kubernetes.io/part-of: project + app.kubernetes.io/managed-by: kustomize name: controller-manager-metrics-monitor namespace: system spec: diff --git a/docs/book/src/component-config-tutorial/testdata/project/config/rbac/auth_proxy_client_clusterrole.yaml b/docs/book/src/component-config-tutorial/testdata/project/config/rbac/auth_proxy_client_clusterrole.yaml index 51a75db47a5..500386b28f0 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/config/rbac/auth_proxy_client_clusterrole.yaml +++ b/docs/book/src/component-config-tutorial/testdata/project/config/rbac/auth_proxy_client_clusterrole.yaml @@ -1,6 +1,13 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: + labels: + app.kubernetes.io/name: clusterrole + app.kubernetes.io/instance: metrics-reader + app.kubernetes.io/component: kube-rbac-proxy + app.kubernetes.io/created-by: project + app.kubernetes.io/part-of: project + app.kubernetes.io/managed-by: kustomize name: metrics-reader rules: - nonResourceURLs: diff --git a/docs/book/src/component-config-tutorial/testdata/project/config/rbac/auth_proxy_role.yaml b/docs/book/src/component-config-tutorial/testdata/project/config/rbac/auth_proxy_role.yaml index 80e1857c594..85e39513cc1 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/config/rbac/auth_proxy_role.yaml +++ b/docs/book/src/component-config-tutorial/testdata/project/config/rbac/auth_proxy_role.yaml @@ -1,6 +1,13 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: + labels: + app.kubernetes.io/name: clusterrole + app.kubernetes.io/instance: proxy-role + app.kubernetes.io/component: kube-rbac-proxy + app.kubernetes.io/created-by: project + app.kubernetes.io/part-of: project + app.kubernetes.io/managed-by: kustomize name: proxy-role rules: - apiGroups: diff --git a/docs/book/src/component-config-tutorial/testdata/project/config/rbac/auth_proxy_role_binding.yaml b/docs/book/src/component-config-tutorial/testdata/project/config/rbac/auth_proxy_role_binding.yaml index ec7acc0a1b7..8b5ff114fa1 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/config/rbac/auth_proxy_role_binding.yaml +++ b/docs/book/src/component-config-tutorial/testdata/project/config/rbac/auth_proxy_role_binding.yaml @@ -1,6 +1,13 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: + labels: + app.kubernetes.io/name: clusterrolebinding + app.kubernetes.io/instance: proxy-rolebinding + app.kubernetes.io/component: kube-rbac-proxy + app.kubernetes.io/created-by: project + app.kubernetes.io/part-of: project + app.kubernetes.io/managed-by: kustomize name: proxy-rolebinding roleRef: apiGroup: rbac.authorization.k8s.io diff --git a/docs/book/src/component-config-tutorial/testdata/project/config/rbac/auth_proxy_service.yaml b/docs/book/src/component-config-tutorial/testdata/project/config/rbac/auth_proxy_service.yaml index 71f1797279e..f40b3d2c0bd 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/config/rbac/auth_proxy_service.yaml +++ b/docs/book/src/component-config-tutorial/testdata/project/config/rbac/auth_proxy_service.yaml @@ -3,6 +3,12 @@ kind: Service metadata: labels: control-plane: controller-manager + app.kubernetes.io/name: service + app.kubernetes.io/instance: controller-manager-metrics-service + app.kubernetes.io/component: kube-rbac-proxy + app.kubernetes.io/created-by: project + app.kubernetes.io/part-of: project + app.kubernetes.io/managed-by: kustomize name: controller-manager-metrics-service namespace: system spec: diff --git a/docs/book/src/component-config-tutorial/testdata/project/config/rbac/leader_election_role.yaml b/docs/book/src/component-config-tutorial/testdata/project/config/rbac/leader_election_role.yaml index 4190ec8059e..1488e1ce2fc 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/config/rbac/leader_election_role.yaml +++ b/docs/book/src/component-config-tutorial/testdata/project/config/rbac/leader_election_role.yaml @@ -2,6 +2,13 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: + labels: + app.kubernetes.io/name: role + app.kubernetes.io/instance: leader-election-role + app.kubernetes.io/component: rbac + app.kubernetes.io/created-by: project + app.kubernetes.io/part-of: project + app.kubernetes.io/managed-by: kustomize name: leader-election-role rules: - apiGroups: diff --git a/docs/book/src/component-config-tutorial/testdata/project/config/rbac/leader_election_role_binding.yaml b/docs/book/src/component-config-tutorial/testdata/project/config/rbac/leader_election_role_binding.yaml index 1d1321ed4f0..e54e64cda0b 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/config/rbac/leader_election_role_binding.yaml +++ b/docs/book/src/component-config-tutorial/testdata/project/config/rbac/leader_election_role_binding.yaml @@ -1,6 +1,13 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: + labels: + app.kubernetes.io/name: rolebinding + app.kubernetes.io/instance: leader-election-rolebinding + app.kubernetes.io/component: rbac + app.kubernetes.io/created-by: project + app.kubernetes.io/part-of: project + app.kubernetes.io/managed-by: kustomize name: leader-election-rolebinding roleRef: apiGroup: rbac.authorization.k8s.io diff --git a/docs/book/src/component-config-tutorial/testdata/project/config/rbac/projectconfig_editor_role.yaml b/docs/book/src/component-config-tutorial/testdata/project/config/rbac/projectconfig_editor_role.yaml index 86a1b0ea4b5..55f1a364ea8 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/config/rbac/projectconfig_editor_role.yaml +++ b/docs/book/src/component-config-tutorial/testdata/project/config/rbac/projectconfig_editor_role.yaml @@ -2,6 +2,13 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: + labels: + app.kubernetes.io/name: clusterrole + app.kubernetes.io/instance: projectconfig-editor-role + app.kubernetes.io/component: rbac + app.kubernetes.io/created-by: project + app.kubernetes.io/part-of: project + app.kubernetes.io/managed-by: kustomize name: projectconfig-editor-role rules: - apiGroups: diff --git a/docs/book/src/component-config-tutorial/testdata/project/config/rbac/projectconfig_viewer_role.yaml b/docs/book/src/component-config-tutorial/testdata/project/config/rbac/projectconfig_viewer_role.yaml index 60f5abc8ef9..2c010b4fb24 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/config/rbac/projectconfig_viewer_role.yaml +++ b/docs/book/src/component-config-tutorial/testdata/project/config/rbac/projectconfig_viewer_role.yaml @@ -2,6 +2,13 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: + labels: + app.kubernetes.io/name: clusterrole + app.kubernetes.io/instance: projectconfig-viewer-role + app.kubernetes.io/component: rbac + app.kubernetes.io/created-by: project + app.kubernetes.io/part-of: project + app.kubernetes.io/managed-by: kustomize name: projectconfig-viewer-role rules: - apiGroups: diff --git a/docs/book/src/component-config-tutorial/testdata/project/config/rbac/role_binding.yaml b/docs/book/src/component-config-tutorial/testdata/project/config/rbac/role_binding.yaml index 2070ede4462..b8189618ab9 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/config/rbac/role_binding.yaml +++ b/docs/book/src/component-config-tutorial/testdata/project/config/rbac/role_binding.yaml @@ -1,6 +1,13 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: + labels: + app.kubernetes.io/name: clusterrolebinding + app.kubernetes.io/instance: manager-rolebinding + app.kubernetes.io/component: rbac + app.kubernetes.io/created-by: project + app.kubernetes.io/part-of: project + app.kubernetes.io/managed-by: kustomize name: manager-rolebinding roleRef: apiGroup: rbac.authorization.k8s.io diff --git a/docs/book/src/component-config-tutorial/testdata/project/config/rbac/service_account.yaml b/docs/book/src/component-config-tutorial/testdata/project/config/rbac/service_account.yaml index 7cd6025bfc4..018f2dd1b59 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/config/rbac/service_account.yaml +++ b/docs/book/src/component-config-tutorial/testdata/project/config/rbac/service_account.yaml @@ -1,5 +1,12 @@ apiVersion: v1 kind: ServiceAccount metadata: + labels: + app.kubernetes.io/name: serviceaccount + app.kubernetes.io/instance: controller-manager + app.kubernetes.io/component: rbac + app.kubernetes.io/created-by: project + app.kubernetes.io/part-of: project + app.kubernetes.io/managed-by: kustomize name: controller-manager namespace: system diff --git a/docs/book/src/component-config-tutorial/testdata/project/config/samples/config_v2_projectconfig.yaml b/docs/book/src/component-config-tutorial/testdata/project/config/samples/config_v2_projectconfig.yaml index fd2c00ece04..145f0f503c7 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/config/samples/config_v2_projectconfig.yaml +++ b/docs/book/src/component-config-tutorial/testdata/project/config/samples/config_v2_projectconfig.yaml @@ -1,6 +1,12 @@ apiVersion: config.tutorial.kubebuilder.io/v2 kind: ProjectConfig metadata: + labels: + app.kubernetes.io/name: projectconfig + app.kubernetes.io/instance: projectconfig-sample + app.kubernetes.io/part-of: project + app.kubernetes.io/managed-by: kustomize + app.kubernetes.io/created-by: project name: projectconfig-sample spec: # TODO(user): Add fields here diff --git a/docs/book/src/component-config-tutorial/testdata/project/go.mod b/docs/book/src/component-config-tutorial/testdata/project/go.mod index f5f96d7aa3e..3e750b59f08 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/go.mod +++ b/docs/book/src/component-config-tutorial/testdata/project/go.mod @@ -3,16 +3,16 @@ module tutorial.kubebuilder.io/project go 1.19 require ( - k8s.io/apimachinery v0.24.0 - k8s.io/client-go v0.24.0 - sigs.k8s.io/controller-runtime v0.12.1 + k8s.io/apimachinery v0.25.0 + k8s.io/client-go v0.25.0 + sigs.k8s.io/controller-runtime v0.13.0 ) require ( - cloud.google.com/go v0.81.0 // indirect + cloud.google.com/go v0.97.0 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect - github.com/Azure/go-autorest/autorest v0.11.18 // indirect - github.com/Azure/go-autorest/autorest/adal v0.9.13 // indirect + github.com/Azure/go-autorest/autorest v0.11.27 // indirect + github.com/Azure/go-autorest/autorest/adal v0.9.20 // indirect github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect @@ -21,20 +21,20 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/emicklei/go-restful v2.9.5+incompatible // indirect - github.com/evanphx/json-patch v4.12.0+incompatible // indirect - github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect - github.com/fsnotify/fsnotify v1.5.1 // indirect - github.com/go-logr/logr v1.2.0 // indirect - github.com/go-logr/zapr v1.2.0 // indirect + github.com/emicklei/go-restful/v3 v3.8.0 // indirect + github.com/evanphx/json-patch/v5 v5.6.0 // indirect + github.com/fsnotify/fsnotify v1.5.4 // indirect + github.com/go-logr/logr v1.2.3 // indirect + github.com/go-logr/zapr v1.2.3 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.19.5 // indirect github.com/go-openapi/swag v0.19.14 // indirect github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang-jwt/jwt/v4 v4.2.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/google/gnostic v0.5.7-v3refs // indirect - github.com/google/go-cmp v0.5.5 // indirect + github.com/google/go-cmp v0.5.8 // indirect github.com/google/gofuzz v1.1.0 // indirect github.com/google/uuid v1.1.2 // indirect github.com/imdario/mergo v0.3.12 // indirect @@ -46,34 +46,34 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/prometheus/client_golang v1.12.1 // indirect + github.com/prometheus/client_golang v1.12.2 // indirect github.com/prometheus/client_model v0.2.0 // indirect github.com/prometheus/common v0.32.1 // indirect github.com/prometheus/procfs v0.7.3 // indirect github.com/spf13/pflag v1.0.5 // indirect go.uber.org/atomic v1.7.0 // indirect go.uber.org/multierr v1.6.0 // indirect - go.uber.org/zap v1.19.1 // indirect - golang.org/x/crypto v0.0.0-20220214200702-86341886e292 // indirect - golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd // indirect + go.uber.org/zap v1.21.0 // indirect + golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd // indirect + golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect - golang.org/x/sys v0.0.0-20220209214540-3681064d5158 // indirect + golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect golang.org/x/text v0.3.7 // indirect - golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect + golang.org/x/time v0.0.0-20220609170525-579cf78fd858 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.27.1 // indirect + google.golang.org/protobuf v1.28.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect - gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect - k8s.io/api v0.24.0 // indirect - k8s.io/apiextensions-apiserver v0.24.0 // indirect - k8s.io/component-base v0.24.0 // indirect - k8s.io/klog/v2 v2.60.1 // indirect - k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42 // indirect - k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 // indirect - sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/api v0.25.0 // indirect + k8s.io/apiextensions-apiserver v0.25.0 // indirect + k8s.io/component-base v0.25.0 // indirect + k8s.io/klog/v2 v2.70.1 // indirect + k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect + k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed // indirect + sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) diff --git a/docs/book/src/component-config-tutorial/testdata/project/go.sum b/docs/book/src/component-config-tutorial/testdata/project/go.sum index e39c1cbfaa2..7441f108840 100644 --- a/docs/book/src/component-config-tutorial/testdata/project/go.sum +++ b/docs/book/src/component-config-tutorial/testdata/project/go.sum @@ -17,8 +17,15 @@ cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKP cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0 h1:at8Tk2zUz63cLPR0JPWm5vp77pEZmzxEQBEfRKn1VV8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0 h1:3DXvAyifywvq64LfkKaMOmkWPS1CikIQdMe2lY9vxU8= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -27,7 +34,6 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -38,25 +44,24 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.11.18 h1:90Y4srNYrwOtAgVo3ndrQkTYn6kf1Eg/AjTFJ8Is2aM= -github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= -github.com/Azure/go-autorest/autorest/adal v0.9.13 h1:Mp5hbtOePIzM8pJVRa3YLrWWmZtoxRXqUEzCfJt3+/Q= -github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= +github.com/Azure/go-autorest/autorest v0.11.27 h1:F3R3q42aWytozkV8ihzcgMO4OA4cuqr3bNlsEuF6//A= +github.com/Azure/go-autorest/autorest v0.11.27/go.mod h1:7l8ybrIdUmGqZMTD0sRtAr8NvbHjfofbf8RSP2q7w7U= +github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= +github.com/Azure/go-autorest/autorest/adal v0.9.20 h1:gJ3E98kMpFB1MFqQCvA1yFab8vthOeD4VlFRQULxahg= +github.com/Azure/go-autorest/autorest/adal v0.9.20/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= -github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw= +github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= -github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= @@ -68,25 +73,13 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRF github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= -github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= @@ -99,31 +92,13 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= -github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= -github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= -github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful/v3 v3.8.0 h1:eCZ8ulSerjdAiaNpF7GxXIE7ZCMo1moN1qX+S609eVw= +github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -134,18 +109,10 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= -github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= -github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= -github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= -github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= -github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= +github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= +github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -157,30 +124,28 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= -github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v1.2.0 h1:QK40JKJyMdUDz+h+xvCsru/bJhvG0UxvePV0ufL/AcE= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/zapr v1.2.0 h1:n4JnPI1T3Qq1SFEi/F8rwLrZERp2bso19PJZDB9dayk= -github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= +github.com/go-logr/zapr v1.2.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8eU= +github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -194,6 +159,7 @@ github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -212,11 +178,9 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= -github.com/google/cel-go v0.10.1/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMSxrmI1w= -github.com/google/cel-spec v0.6.0/go.mod h1:Nwjgxy5CbjlPrtCWjeDjUyKMl8w41YBYGjsyDdqk0xA= github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -229,14 +193,17 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= @@ -248,50 +215,23 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= @@ -302,16 +242,12 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -319,28 +255,13 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= -github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -348,95 +269,53 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/onsi/ginkgo/v2 v2.1.4 h1:GNapqRSid3zijZ9H77KrgVG4/8KqiyRsxcSxe+7ApXY= +github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34= +github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= -github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -447,28 +326,11 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= -go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= -go.etcd.io/etcd/client/v3 v3.5.1/go.mod h1:OnjH4M8OnAotwaB2l9bVgZzRFKru7/ZMoS46OtKyd3Q= -go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE= -go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc= -go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -476,44 +338,27 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4= -go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= -go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= -go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= -go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= -go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= -go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= -go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= -go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= +go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292 h1:f+lwQ+GtmgoY+A2YaQxlSOnDjXcQ7ZRLWOHbC6HtRqE= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd h1:XcWmESyNjXJMLahc3mqVQJcgSTDxFxhETVlfk9uGc38= +golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -549,14 +394,9 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -579,7 +419,6 @@ golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= @@ -587,18 +426,16 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -611,6 +448,9 @@ golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -624,12 +464,8 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -640,11 +476,7 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -659,13 +491,11 @@ golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -677,19 +507,21 @@ golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158 h1:rm+CHSpPEEW2IsXUib1ThaHIjuBVZjxNgSKmBLFfD4c= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -706,30 +538,24 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44= -golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/time v0.0.0-20220609170525-579cf78fd858 h1:Dpdu/EMxGMFgq0CeYMh4fazTD2vtlZRYE7wyynxJb9U= +golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -749,7 +575,6 @@ golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjs golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -764,13 +589,14 @@ golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.10-0.20220218145154-897bd77cd717/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY= @@ -795,6 +621,13 @@ google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34q google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -824,7 +657,6 @@ google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -836,7 +668,6 @@ google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201102152239-715cce707fb0/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -846,9 +677,21 @@ google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -869,8 +712,12 @@ google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -883,8 +730,9 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -892,16 +740,9 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -913,10 +754,9 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= -gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -924,40 +764,31 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.24.0 h1:J0hann2hfxWr1hinZIDefw7Q96wmCBx6SSB8IY0MdDg= -k8s.io/api v0.24.0/go.mod h1:5Jl90IUrJHUJYEMANRURMiVvJ0g7Ax7r3R1bqO8zx8I= -k8s.io/apiextensions-apiserver v0.24.0 h1:JfgFqbA8gKJ/uDT++feAqk9jBIwNnL9YGdQvaI9DLtY= -k8s.io/apiextensions-apiserver v0.24.0/go.mod h1:iuVe4aEpe6827lvO6yWQVxiPSpPoSKVjkq+MIdg84cM= -k8s.io/apimachinery v0.24.0 h1:ydFCyC/DjCvFCHK5OPMKBlxayQytB8pxy8YQInd5UyQ= -k8s.io/apimachinery v0.24.0/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= -k8s.io/apiserver v0.24.0/go.mod h1:WFx2yiOMawnogNToVvUYT9nn1jaIkMKj41ZYCVycsBA= -k8s.io/client-go v0.24.0 h1:lbE4aB1gTHvYFSwm6eD3OF14NhFDKCejlnsGYlSJe5U= -k8s.io/client-go v0.24.0/go.mod h1:VFPQET+cAFpYxh6Bq6f4xyMY80G6jKKktU6G0m00VDw= -k8s.io/code-generator v0.24.0/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= -k8s.io/component-base v0.24.0 h1:h5jieHZQoHrY/lHG+HyrSbJeyfuitheBvqvKwKHVC0g= -k8s.io/component-base v0.24.0/go.mod h1:Dgazgon0i7KYUsS8krG8muGiMVtUZxG037l1MKyXgrA= -k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/gengo v0.0.0-20211129171323-c02415ce4185/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/api v0.25.0 h1:H+Q4ma2U/ww0iGB78ijZx6DRByPz6/733jIuFpX70e0= +k8s.io/api v0.25.0/go.mod h1:ttceV1GyV1i1rnmvzT3BST08N6nGt+dudGrquzVQWPk= +k8s.io/apiextensions-apiserver v0.25.0 h1:CJ9zlyXAbq0FIW8CD7HHyozCMBpDSiH7EdrSTCZcZFY= +k8s.io/apiextensions-apiserver v0.25.0/go.mod h1:3pAjZiN4zw7R8aZC5gR0y3/vCkGlAjCazcg1me8iB/E= +k8s.io/apimachinery v0.25.0 h1:MlP0r6+3XbkUG2itd6vp3oxbtdQLQI94fD5gCS+gnoU= +k8s.io/apimachinery v0.25.0/go.mod h1:qMx9eAk0sZQGsXGu86fab8tZdffHbwUfsvzqKn4mfB0= +k8s.io/client-go v0.25.0 h1:CVWIaCETLMBNiTUta3d5nzRbXvY5Hy9Dpl+VvREpu5E= +k8s.io/client-go v0.25.0/go.mod h1:lxykvypVfKilxhTklov0wz1FoaUZ8X4EwbhS6rpRfN8= +k8s.io/component-base v0.25.0 h1:haVKlLkPCFZhkcqB6WCvpVxftrg6+FK5x1ZuaIDaQ5Y= +k8s.io/component-base v0.25.0/go.mod h1:F2Sumv9CnbBlqrpdf7rKZTmmd2meJq0HizeyY/yAFxk= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= -k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.60.1 h1:VW25q3bZx9uE3vvdL6M8ezOX79vA2Aq1nEWLqNQclHc= -k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42 h1:Gii5eqf+GmIEwGNKQYQClCayuJCe2/4fZUvF7VG99sU= -k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk= -k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc= -k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ= +k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA= +k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU= +k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed h1:jAne/RjBTyawwAy0utX5eqigAwz/lQhTmy+Hr/Cpue4= +k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.30/go.mod h1:fEO7lRTdivWO2qYVCVG7dEADOMo/MLDCVr8So2g88Uw= -sigs.k8s.io/controller-runtime v0.12.1 h1:4BJY01xe9zKQti8oRjj/NeHKRXthf1YkYJAgLONFFoI= -sigs.k8s.io/controller-runtime v0.12.1/go.mod h1:BKhxlA4l7FPK4AQcsuL4X6vZeWnKDXez/vp1Y8dxTU0= -sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 h1:kDi4JBNAsJWfz1aEXhO8Jg87JJaPNLh5tIzYHgStQ9Y= -sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= -sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.2.1 h1:bKCqE9GvQ5tiVHn5rfn1r+yao3aLQEaLzkkmAkf+A6Y= -sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= -sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +sigs.k8s.io/controller-runtime v0.13.0 h1:iqa5RNciy7ADWnIc8QxCbOX5FEKVR3uxVxKHRMc2WIQ= +sigs.k8s.io/controller-runtime v0.13.0/go.mod h1:Zbz+el8Yg31jubvAEyglRZGdLAjplZl+PgtYNI6WNTI= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/docs/book/src/component-config-tutorial/testdata/projectconfig_types.go b/docs/book/src/component-config-tutorial/testdata/projectconfig_types.go index 137015030ce..6a4eb9bf503 100644 --- a/docs/book/src/component-config-tutorial/testdata/projectconfig_types.go +++ b/docs/book/src/component-config-tutorial/testdata/projectconfig_types.go @@ -38,7 +38,7 @@ we'll embed `cfg.ControllerManagerConfigurationSpec` in `ProjectConfig`. type ProjectConfig struct { metav1.TypeMeta `json:",inline"` - // ControllerManagerConfigurationSpec returns the contfigurations for controllers + // ControllerManagerConfigurationSpec returns the configurations for controllers cfg.ControllerManagerConfigurationSpec `json:",inline"` ClusterName string `json:"clusterName,omitempty"` diff --git a/docs/book/src/component-config-tutorial/tutorial.md b/docs/book/src/component-config-tutorial/tutorial.md index 4b5b1785c75..692b6fa0da9 100644 --- a/docs/book/src/component-config-tutorial/tutorial.md +++ b/docs/book/src/component-config-tutorial/tutorial.md @@ -28,6 +28,6 @@ form a runnable project, and live in the book source directory: ## Resources -* [Versioned Component Configuration File Design](https://docs.google.com/document/d/1FdaEJUEh091qf5B98HM6_8MS764iXrxxigNIdwHYW9c/) +* [Versioned Component Configuration File Design](https://github.com/kubernetes/community/blob/master/archive/wg-component-standard/component-config/README.md) * [Config v1alpha1 Go Docs](https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/config/v1alpha1/) diff --git a/docs/book/src/cronjob-tutorial/basic-project.md b/docs/book/src/cronjob-tutorial/basic-project.md index b850834cc3a..d333cecc3fd 100644 --- a/docs/book/src/cronjob-tutorial/basic-project.md +++ b/docs/book/src/cronjob-tutorial/basic-project.md @@ -7,7 +7,7 @@ basic pieces of boilerplate. First up, basic infrastructure for building your project: -
`go.mod`: A new Go module matching our project, with +
go.mod: A new Go module matching our project, with basic dependencies ```go @@ -15,14 +15,14 @@ basic dependencies
```
-
`Makefile`: Make targets for building and deploying your controller +
Makefile: Make targets for building and deploying your controller ```makefile {{#include ./testdata/project/Makefile}} ```
-
`PROJECT`: Kubebuilder metadata for scaffolding new components +
PROJECT: Kubebuilder metadata for scaffolding new components ```yaml {{#include ./testdata/project/PROJECT}} diff --git a/docs/book/src/cronjob-tutorial/cert-manager.md b/docs/book/src/cronjob-tutorial/cert-manager.md index 48d84ef5373..594cfd1eebb 100644 --- a/docs/book/src/cronjob-tutorial/cert-manager.md +++ b/docs/book/src/cronjob-tutorial/cert-manager.md @@ -1,24 +1,29 @@ -# Deploying the cert manager +# Deploying cert-manager -We suggest using [cert manager](https://github.com/jetstack/cert-manager) for +We suggest using [cert-manager](https://github.com/jetstack/cert-manager) for provisioning the certificates for the webhook server. Other solutions should also work as long as they put the certificates in the desired location. You can follow -[the cert manager documentation](https://cert-manager.io/docs/installation/) +[the cert-manager documentation](https://cert-manager.io/docs/installation/) to install it. -Cert manager also has a component called CA injector, which is responsible for -injecting the CA bundle into the Mutating|ValidatingWebhookConfiguration. +cert-manager also has a component called [CA +Injector](https://cert-manager.io/docs/concepts/ca-injector/), which is responsible for +injecting the CA bundle into the [`MutatingWebhookConfiguration`](https://pkg.go.dev/k8s.io/api/admissionregistration/v1#MutatingWebhookConfiguration) +/ [`ValidatingWebhookConfiguration`](https://pkg.go.dev/k8s.io/api/admissionregistration/v1#ValidatingWebhookConfiguration). To accomplish that, you need to use an annotation with key `cert-manager.io/inject-ca-from` -in the Mutating|ValidatingWebhookConfiguration objects. -The value of the annotation should point to an existing certificate CR instance +in the [`MutatingWebhookConfiguration`](https://pkg.go.dev/k8s.io/api/admissionregistration/v1#MutatingWebhookConfiguration) +/ [`ValidatingWebhookConfiguration`](https://pkg.go.dev/k8s.io/api/admissionregistration/v1#ValidatingWebhookConfiguration) objects. +The value of the annotation should point to an existing [certificate request instance](https://cert-manager.io/docs/concepts/certificaterequest/) in the format of `/`. This is the [kustomize](https://github.com/kubernetes-sigs/kustomize) patch we -used for annotating the Mutating|ValidatingWebhookConfiguration objects. +used for annotating the [`MutatingWebhookConfiguration`](https://pkg.go.dev/k8s.io/api/admissionregistration/v1#MutatingWebhookConfiguration) +/ [`ValidatingWebhookConfiguration`](https://pkg.go.dev/k8s.io/api/admissionregistration/v1#ValidatingWebhookConfiguration) objects. + ```yaml {{#include ./testdata/project/config/default/webhookcainjection_patch.yaml}} ``` diff --git a/docs/book/src/cronjob-tutorial/cronjob-tutorial.md b/docs/book/src/cronjob-tutorial/cronjob-tutorial.md index 803ece89611..f87ae89d94c 100644 --- a/docs/book/src/cronjob-tutorial/cronjob-tutorial.md +++ b/docs/book/src/cronjob-tutorial/cronjob-tutorial.md @@ -53,15 +53,18 @@ kubebuilder init --domain tutorial.kubebuilder.io --repo tutorial.kubebuilder.io ``` Now that we've got a project in place, let's take a look at what Kubebuilder has scaffolded for us so far... diff --git a/docs/book/src/plugins/available-plugins.md b/docs/book/src/plugins/available-plugins.md index ba7744d0d36..3f723d05274 100644 --- a/docs/book/src/plugins/available-plugins.md +++ b/docs/book/src/plugins/available-plugins.md @@ -2,28 +2,14 @@ This section describes the plugins supported and shipped in with the Kubebuilder project. -| Plugin | Key | Description | -| ---------------------------------------------------------------------------------- | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [go.kubebuilder.io/v2 - (Deprecated)](go-v2-plugin.md) | `go/v2` | Golang plugin responsible for scaffolding the legacy layout provided with Kubebuilder CLI >= `2.0.0` and < `3.0.0`. | -| [go.kubebuilder.io/v3 - (Default scaffold with Kubebuilder init)](go-v3-plugin.md) | `go/v3` | Default scaffold used for creating a project when no plugin(s) are provided. Responsible for scaffolding Golang projects and its configurations. | -| [go.kubebuilder.io/v4-alpha - (Add Apple Sillicom Support)](go-v4-plugin.md) | `go/v4` | Scaffold composite by `base.go.kubebuilder.io/v3` and [kustomize.common.kubebuilder.io/v2-alpha](kustomize-v2-alpha.md). Responsible for scaffolding Golang projects and its configurations. | -| [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 `config/` directory). This plugin is used in the composition to create the plugin (`go/v3`). | -| [kustomize.common.kubebuilder.io/v2-alpha](kustomize-v2-alpha.md) | `kustomize/v2-alpha` | It has the same purpose of `kustomize/v1`. However, it works with [kustomize][kustomize] version `v4` and addresses the required changes for 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`) | -| [grafana.kubebuilder.io/v1-alpha](grafana-v1-alpha.md) | `grafana/v1-alpha` | Optional helper plugin which can be used to scaffold Grafana Manifests Dashboards for the default metrics which are exported by controller-runtime. | -| [deploy-image.go.kubebuilder.io/v1-alpha](deploy-image-plugin-v1-alpha) | `deploy-image/v1-alpha` | Optional helper plugin which can be used to scaffold APIs and controller with code implementation to Deploy and Manage an Operand(image). | - -> Note: **ALPHA** plugins can introduce breaking changes. For further info see [Plugins Versioning](./plugins/plugins-versioning.md). +{{#include to-scaffold-project.md }} +{{#include to-add-optional-features.md }} +{{#include to-be-extended.md }} +**ALPHA** plugins can introduce breaking changes. For further info see [Plugins Versioning](./plugins/plugins-versioning.md). -[create-plugins]: creating-plugins.md -[kubebuilder-declarative-pattern]: https://github.com/kubernetes-sigs/kubebuilder-declarative-pattern -[kustomize]: https://kustomize.io/ + \ No newline at end of file diff --git a/docs/book/src/plugins/creating-plugins.md b/docs/book/src/plugins/creating-plugins.md index 2c599b87a19..d347db71711 100644 --- a/docs/book/src/plugins/creating-plugins.md +++ b/docs/book/src/plugins/creating-plugins.md @@ -1,8 +1,50 @@ # Creating your own plugins +[extending-cli]: extending-cli.md +[controller-runtime]: https://github.com/kubernetes-sigs/controller-runtime +[operator-pattern]: https://kubernetes.io/docs/concepts/extend-kubernetes/operator +[sdk-ansible]: https://sdk.operatorframework.io/docs/building-operators/ansible/ +[sdk-cli-pkg]: https://pkg.go.dev/github.com/operator-framework/operator-sdk/internal/cmd/operator-sdk/cli +[sdk-helm]: https://sdk.operatorframework.io/docs/building-operators/helm/ +[sdk]: https://github.com/operator-framework/operator-sdk + ## Overview -You can extend the Kubebuilder API to create your own plugins. If [extending the CLI][extending-cli], your plugin will be implemented in your project and registered to the CLI as has been done by the [SDK][sdk] project. See its [cli code][sdk-cli-pkg] as an example. +You can extend the Kubebuilder API to create your own plugins. If [extending the CLI][extending-cli], your plugin will be implemented in your project and registered to the CLI as has been done by the [SDK][sdk] project. See its [CLI code][sdk-cli-pkg] as an example. + +## When it is useful? + +- If you are looking to create plugins which support and work with another language. +- If you would like to create helpers and integrations on top of the scaffolds done by the plugins provided by Kubebuiler. +- If you would like to have customized layouts according to your needs. + +## How the plugins can be used? + +Kubebuilder provides a set of plugins to scaffold the projects, to help you extend and re-use its implementation to provide additional features. +For further information see [Available Plugins][available-plugins]. + +Therefore, if you have a need you might want to propose a solution by adding a new plugin +which would be shipped with Kubebuilder by default. + +However, you might also want to have your own tool to address your specific scenarios and by taking advantage of what is provided by Kubebuilder as a library. +That way, you can focus on addressing your needs and keep your solutions easier to maintain. + +Note that by using Kubebuilder as a library, you can import its plugins and then create your own plugins that do customizations on top. +For instance, `Operator-SDK` does with the plugins [manifest][operator-sdk-manifest] and [scorecard][operator-sdk-scorecard] to add its features. +Also see [here][operator-sdk-plugin-ref]. + +Another option implemented with the [Extensible CLI and Scaffolding Plugins - Phase 2][plugins-phase2-design-doc] is +to extend Kibebuilder as a LIB to create only a specific plugin that can be called and used with +Kubebuilder as well. + + ## Language-based Plugins @@ -16,7 +58,7 @@ In this way, currently, you can [Extend the CLI][extending-cli] and use the `Bun ```go mylanguagev1Bundle, _ := plugin.NewBundle(language.DefaultNameQualifier, plugin.Version{Number: 1}, - kustomizecommonv1.Plugin{}, // extend the common base from Kuebebuilder + kustomizecommonv1.Plugin{}, // extend the common base from Kubebuilder mylanguagev1.Plugin{}, // your plugin language which will do the scaffolds for the specific language on top of the common base ) ``` @@ -25,14 +67,14 @@ If you do not want to develop your plugin using Golang, you can follow its stand ```sh kubebuilder init --plugins=kustomize -``` +``` Then you can, for example, create your implementations for the sub-commands `create api` and `create webhook` using your language of preference. -## Custom Plugins +## Custom Plugins -Note that users are also able to use plugins to customize their scaffold and address specific needs. See that Kubebuilder provides the [declarative][declarative-code] plugin which can be used when for example an API is scaffold: +Note that users are also able to use plugins to customize their scaffolds and address specific needs. + +See that Kubebuilder provides the [`deploy-image`][deploy-image] plugin that allows the user to create the controller & CRs which will deploy and manage an image on the cluster: ```sh -kubebuider create api [options] --plugins=go/v3,declarative/v1 -``` +kubebuilder create api --group example.com --version v1alpha1 --kind Memcached --image=memcached:1.6.15-alpine --image-container-command="memcached,-m=64,modern,-v" --image-container-port="11211" --run-as-user="1001" --plugins="deploy-image/v1-alpha" +``` + +This plugin will perform a custom scaffold following the [Operator Pattern][operator-pattern]. + +Another example is the [`grafana`][grafana] plugin that scaffolds a new folder container manifests to visualize operator status on Grafana Web UI: + +```sh +kubebuilder edit --plugins="grafana.kubebuilder.io/v1-alpha" +``` + +In this way, by [Extending the Kubebuilder CLI][extending-cli], you can also create custom plugins such this one. + +Feel free to check the implementation under: -This plugin will perform a custom scaffold using the [kubebuilder declarative pattern][kubebuilder-declarative-pattern]. +- deploy-image: +- grafana: -In this way, by [Extending the Kubebuilder CLI][extending-cli], you can also create custom plugins such this one. Feel free to check its implementation in [`pkg/plugins/golang/declarative`][declarative-code]. +## Plugin Scaffolding -## Future vision for Kubebuilder Plugins +Your plugin may add code on top of what is scaffolded by default with Kubebuilder sub-commands(`init`, `create`, ...). +This is common as you may expect your plugin to: -As the next steps for the plugins, its possible to highlight three initiatives so far, which are: +- Create API +- Update controller manager logic +- Generate corresponding manifests -- [Plugin phase 2.0][plugin-2.0]: allow the Kubebuilder CLI or any other CLI, which is [Extending the Kubebuilder CLI][extending-cli], to discover external plugins, in this way, allow the users to use these external options as helpers to perform the scaffolds with the tool. -- [Config-gen][config-gen]: the config-gen option has been provided as an alpha option in the Kubebuilder CLI(`kubebuilder alpha config-gen`) to encourage its contributions. The idea of this option would simplify the config scaffold. For further information see its [README][config-gen-readme]. -- [New Plugin (`deploy-image.go.kubebuilder.io/v1beta1`) to generate code][new-plugin-gen]: its purpose is to provide an arch-type that will scaffold the APIs and Controllers with the required code to deploy and manage solutions on the cluster. +### Boilerplates -Please, feel to contribute with them as well. Your contribution to the project is very welcome. +The Kubebuilder internal plugins use boilerplates to generate the files of code. + +For instance, the go/v3 scaffolds the `main.go` file by defining an object that [implements the machinery interface][kubebuilder-machinery]. +In the [implementation][go-v3-settemplatedefault] of `Template.SetTemplateDefaults`, the [raw template][go-v3-main-template] is set to the body. +Such object that implements the machinery interface will later pass to the [execution of scaffold][go-v3-scaffold-execute]. + +Similar, you may also design your code of plugin implementation by such reference. +You can also view the other parts of the code file given by the links above. + +If your plugin is expected to modify part of the existing files with its scaffold, you may use functions provided by [sigs.k8s.io/kubebuilder/v3/pkg/plugin/util][kb-util]. +See [example of deploy-image][example-of-deploy-image-2]. +In brief, the util package helps you customize your scaffold in a lower level. + +### Use Kubebuilder Machinery Lib + +Notice that Kubebuilder also provides [machinery pkg][kubebuilder-machinery-pkg] where you can: + +- Define file I/O behavior. +- Add markers to the scaffolded file. +- Define the template for scaffolding. + +#### Overwrite A File + +You might want for example to overwrite a scaffold done by using the option: + +```go + f.IfExistsAction = machinery.OverwriteFile +``` + +Let's imagine that you would like to have a helper plugin that would be called in a chain with `go/v4-alpha` to add customizations on top. +Therefore after we generate the code calling the subcommand to `init` from `go/v4-alpha` we would like to overwrite the Makefile to change this scaffold via our plugin. +In this way, we would implement the Bollerplate for our Makefile and then use this option to ensure that it would be overwritten. + +See [example of deploy-image][example-of-deploy-image-1]. + +### A Combination of Multiple Plugins + +Since your plugin may work frequently with other plugins, the executing command for scaffolding may become cumbersome, e.g: + +```shell +kubebuilder create api --plugins=go/v3,kustomize/v1,yourplugin/v1 +``` + +You can probably define a method to your scaffolder that calls the plugin scaffolding method in order. +See [example of deploy-image][example-of-deploy-image-3]. + +#### Define Plugin Bundles + +Alternatively, you can create a plugin bundle to include the target plugins. For instance: + +```go + mylanguagev1Bundle, _ := plugin.NewBundle(language.DefaultNameQualifier, plugin.Version{Number: 1}, + kustomizecommonv1.Plugin{}, // extend the common base from Kuebebuilder + mylanguagev1.Plugin{}, // your plugin language which will do the scaffolds for the specific language on top of the common base + ) +``` -[sdk-cli-pkg]: https://github.com/operator-framework/operator-sdk/blob/master/internal/cmd/operator-sdk/cli/cli.go -[sdk-ansible]: https://github.com/operator-framework/operator-sdk/tree/master/internal/plugins/ansible/v1 -[sdk-helm]: https://github.com/operator-framework/operator-sdk/tree/master/internal/plugins/helm/v1 -[operator-pattern]: https://kubernetes.io/docs/concepts/extend-kubernetes/operator/ [controller-runtime]: https://github.com/kubernetes-sigs/controller-runtime -[plugin-2.0]: https://github.com/kubernetes-sigs/kubebuilder/issues/1378 -[config-gen-readme]: https://github.com/kubernetes-sigs/kubebuilder/blob/master/pkg/cli/alpha/config-gen/README.md -[config-gen]: https://github.com/kubernetes-sigs/kubebuilder/blob/master/pkg/cli/alpha/config-gen -[plugins-phase1-design-doc-1.5]: https://github.com/kubernetes-sigs/kubebuilder/blob/master/designs/extensible-cli-and-scaffolding-plugins-phase-1-5.md -[extending-cli]: extending-cli.md -[new-plugin-gen]: https://github.com/kubernetes-sigs/kubebuilder/blob/master/designs/code-generate-image-plugin.md -[kubebuilder-declarative-pattern]: https://github.com/kubernetes-sigs/kubebuilder-declarative-pattern -[declarative-code]: https://github.com/kubernetes-sigs/kubebuilder/blob/master/pkg/plugins/golang/declarative -[sdk]: https://github.com/operator-framework/operator-sdk \ No newline at end of file +[deploy-image]: https://github.com/kubernetes-sigs/kubebuilder/tree/v3.7.0/pkg/plugins/golang/deploy-image/v1alpha1 +[grafana]: https://github.com/kubernetes-sigs/kubebuilder/tree/v3.7.0/pkg/plugins/optional/grafana/v1alpha +[extending-cli]: ./extending-cli.md +[kb-util]: https://pkg.go.dev/sigs.k8s.io/kubebuilder/v3/pkg/plugin/util +[example-of-deploy-image-1]: https://github.com/kubernetes-sigs/kubebuilder/blob/df1ed6ccf19df40bd929157a91eaae6a9215bfc6/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/api/types.go#L58 +[example-of-deploy-image-2]: https://github.com/kubernetes-sigs/kubebuilder/blob/master/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/api.go#L170-L266 +[example-of-deploy-image-3]: https://github.com/kubernetes-sigs/kubebuilder/blob/master/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/api.go#L77-L98 +[available-plugins]: https://github.com/kubernetes-sigs/kubebuilder/pull/available-plugins.md +[operator-sdk-manifest]: https://github.com/operator-framework/operator-sdk/tree/v1.23.0/internal/plugins/manifests/v2 +[operator-sdk-scorecard]: https://github.com/operator-framework/operator-sdk/tree/v1.23.0/internal/plugins/scorecard/v2 +[operator-sdk-plugin-ref]: https://github.com/operator-framework/operator-sdk/blob/v1.23.0/internal/cmd/operator-sdk/cli/cli.go#L78-L160 +[plugins-section]: ??? +[plugins-phase1-design-doc]: https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/designs/extensible-cli-and-scaffolding-plugins-phase-1.md#extensible-cli-and-scaffolding-plugins +[plugins-phase1-design-doc-1.5]: https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/designs/extensible-cli-and-scaffolding-plugins-phase-1-5.md#extensible-cli-and-scaffolding-plugins---phase-15 +[plugins-phase2-design-doc]: https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/designs/extensible-cli-and-scaffolding-plugins-phase-2.md#extensible-cli-and-scaffolding-plugins---phase-2 +[go-v3-main-template]: https://github.com/kubernetes-sigs/kubebuilder/blob/3bfc84ec8767fa760d1771ce7a0cb05a9a8f6286/pkg/plugins/golang/v3/scaffolds/internal/templates/main.go#L183 +[kubebuilder-machinery]: https://github.com/kubernetes-sigs/kubebuilder/blob/3bfc84ec8767fa760d1771ce7a0cb05a9a8f6286/pkg/plugins/golang/v3/scaffolds/internal/templates/main.go#L28 +[go-v3-settemplatedefault]: https://github.com/kubernetes-sigs/kubebuilder/blob/3bfc84ec8767fa760d1771ce7a0cb05a9a8f6286/pkg/plugins/golang/v3/scaffolds/internal/templates/main.go#L40 +[go-v3-scaffold-execute]: https://github.com/kubernetes-sigs/kubebuilder/blob/3bfc84ec8767fa760d1771ce7a0cb05a9a8f6286/pkg/plugins/golang/v3/scaffolds/init.go#L120 +[kubebuilder-machinery-pkg]: https://pkg.go.dev/sigs.k8s.io/kubebuilder/v3/pkg/machinery#section-documentation diff --git a/docs/book/src/plugins/declarative-v1.md b/docs/book/src/plugins/declarative-v1.md index a7595c2c471..c3513618dae 100644 --- a/docs/book/src/plugins/declarative-v1.md +++ b/docs/book/src/plugins/declarative-v1.md @@ -1,31 +1,30 @@ # Declarative Plugin -The declarative plugin allows you to create [controllers][controller-runtime] using the [kubebuilder-declarative-pattern][kubebuilder-declarative-pattern]. -By using the declarative plugin, you can make the required changes on top of what is scaffolded by default when you create a Go project with Kubebuilder and the Golang plugins (i.e. go/v2, go/v3). +The declarative plugin allows you to create [controllers][controller-runtime] using the [kubebuilder-declarative-pattern][kubebuilder-declarative-pattern]. +By using the declarative plugin, you can make the required changes on top of what is scaffolded by default when you create a Go project with Kubebuilder and the Golang plugins (i.e. go/v2, go/v3). - + ## When to use it ? -- If you are looking to scaffold one or more [controllers][controller-runtime] following [the pattern][kubebuilder-declarative-pattern] ( See an e.g. of the reconcile method implemented [here][addon-v3-controller]) +- If you are looking to scaffold one or more [controllers][controller-runtime] following [the pattern][kubebuilder-declarative-pattern] ( See an e.g. of the reconcile method implemented [here][addon-v3-controller]) - If you want to have manifests shipped inside your Manager container. The declarative plugin works with channels, which allow you to push manifests. [More info][addon-channels-info] ## How to use it ? The declarative plugin requires to be used with one of the available Golang plugins -If you want that any API(s) and its respective controller(s) generate to reconcile them of your project adopt this partner then: +If you want that any API(s) and its respective controller(s) generate to reconcile them of your project adopt this partner then: ```sh kubebuilder init --plugins=go/v3,declarative/v1 --domain example.org --repo example.org/guestbook-operator ``` -If you want to adopt this pattern for specific API(s) and its respective controller(s) (not for any API/controller scaffold using Kubebuilder CLI) then: +If you want to adopt this pattern for specific API(s) and its respective controller(s) (not for any API/controller scaffold using Kubebuilder CLI) then: ```sh kubebuilder create api --plugins=go/v3,declarative/v1 --version v1 --kind Guestbook @@ -35,30 +34,30 @@ kubebuilder create api --plugins=go/v3,declarative/v1 --version v1 --kind Guestb The declarative plugin implements the following subcommands: -* init (`$ kubebuilder init [OPTIONS]`) -* create api (`$ kubebuilder create api [OPTIONS]`) +- init (`$ kubebuilder init [OPTIONS]`) +- create api (`$ kubebuilder create api [OPTIONS]`) ## Affected files The following scaffolds will be created or updated by this plugin: -* `controllers/*_controller.go` -* `api/*_types.go` -* `channels/packages///manifest.yaml` -* `channels/stable` -* `Dockerfile` +- `controllers/*_controller.go` +- `api/*_types.go` +- `channels/packages///manifest.yaml` +- `channels/stable` +- `Dockerfile` ## Further resources -* Read more about the [declarative pattern][kubebuilder-declarative-pattern] -* Watch the KubeCon 2018 Video [Managing Addons with Operators][kubecon-video] -* Check the [plugin implementation][plugin-implementation] +- Read more about the [declarative pattern][kubebuilder-declarative-pattern] +- Watch the KubeCon 2018 Video [Managing Addons with Operators][kubecon-video] +- Check the [plugin implementation][plugin-implementation] -[dockerfile-addon]: https://github.com/kubernetes-sigs/kubebuilder/blob/master/testdata/project-v3-addon/Dockerfile#L16-L19 [addon-channels-info]: https://github.com/kubernetes-sigs/kubebuilder-declarative-pattern/blob/master/docs/addon/walkthrough/README.md#adding-a-manifest [controller-runtime]: https://github.com/kubernetes-sigs/controller-runtime [kubebuilder-declarative-pattern]: https://github.com/kubernetes-sigs/kubebuilder-declarative-pattern [testdata]: https://github.com/kubernetes-sigs/kubebuilder/tree/master/testdata/ [kubecon-video]: https://www.youtube.com/watch?v=LPejvfBR5_w [plugin-implementation]: https://github.com/kubernetes-sigs/kubebuilder/tree/master/pkg/plugins/golang/declarative -[addon-v3-controller]: https://github.com/kubernetes-sigs/kubebuilder/tree/master/testdata/project-v3-addon \ No newline at end of file +[addon-v3-controller]: https://github.com/kubernetes-sigs/kubebuilder/tree/master/testdata/project-v3-declarative-v1 + diff --git a/docs/book/src/plugins/extending-cli.md b/docs/book/src/plugins/extending-cli.md index 953f98c99e6..7a9f0e89b1f 100644 --- a/docs/book/src/plugins/extending-cli.md +++ b/docs/book/src/plugins/extending-cli.md @@ -186,7 +186,7 @@ Once a plugin is deprecated, have it implement a [Deprecated][deprecate-plugin-d Note that it means that when a user of your CLI calls this plugin, the execution of the sub-commands will be sorted by the order to which they were added in a chain: -> sub-command of plugin A -> sub-command of plugin B -> sub-command of plugin C +> `sub-command` of plugin A ➔ `sub-command` of plugin B ➔ `sub-command` of plugin C Then, to initialize using this "Plugin Bundle" which will run the chain of plugins: @@ -194,9 +194,9 @@ Then, to initialize using this "Plugin Bundle" which will run the chain of plugi kubebuider init --plugins=myplugin.example/v1 ``` -- Runs init sub-command of the plugin A -- And then, runs init sub-command of the plugin B -- And then, runs init sub-command of the plugin C +- Runs init `sub-command` of the plugin A +- And then, runs init `sub-command` of the plugin B +- And then, runs init `sub-command` of the plugin C [project-file-config]: ../reference/project-config.md [plugin-interface]: https://pkg.go.dev/sigs.k8s.io/kubebuilder/v3/pkg/plugin#Plugin @@ -210,4 +210,4 @@ kubebuider init --plugins=myplugin.example/v1 [deprecate-plugin-doc]: https://pkg.go.dev/sigs.k8s.io/kubebuilder/v3/pkg/plugin#Deprecated [plugin-update-meta]: https://pkg.go.dev/sigs.k8s.io/kubebuilder/v3/pkg/plugin#UpdatesMetadata [cli]: https://pkg.go.dev/sigs.k8s.io/kubebuilder/v3/pkg/cli -[plugin-version-type]: https://pkg.go.dev/sigs.k8s.io/kubebuilder/v3/pkg/plugin#Version \ No newline at end of file +[plugin-version-type]: https://pkg.go.dev/sigs.k8s.io/kubebuilder/v3/pkg/plugin#Version diff --git a/docs/book/src/plugins/go-v2-plugin.md b/docs/book/src/plugins/go-v2-plugin.md index aea3b38db13..3c2d3f18a23 100644 --- a/docs/book/src/plugins/go-v2-plugin.md +++ b/docs/book/src/plugins/go-v2-plugin.md @@ -3,22 +3,22 @@ -The `go/v2` plugin has the purpose to scaffold Golang projects to help users -to build projects with [controllers][controller-runtime] and keep the backwards compatibility +The `go/v2` plugin has the purpose to scaffold Golang projects to help users +to build projects with [controllers][controller-runtime] and keep the backwards compatibility with the default scaffold made using Kubebuilder CLI `2.x.z` releases. - - [Extending the CLI and Scaffolds](extending-cli.md) - - [Creating your own plugins](creating-plugins.md) +- [Extending the CLI and Scaffolds](extending-cli.md) +- [Creating your own plugins](creating-plugins.md) +- [Testing your plugins](testing-plugins.md) - [plugins-phase1-design-doc]: https://github.com/kubernetes-sigs/kubebuilder/blob/master/designs/extensible-cli-and-scaffolding-plugins-phase-1.md - [plugins-phase1-design-doc-1.5]: https://github.com/kubernetes-sigs/kubebuilder/blob/master/designs/extensible-cli-and-scaffolding-plugins-phase-1-5.md - [extending-cli]: extending-cli.md - - - [section-future-vision-plugins]: https://book.kubebuilder.io/plugins/creating-plugins.html#future-vision-for-kubebuilder-plugins +[plugins-phase1-design-doc]: https://github.com/kubernetes-sigs/kubebuilder/blob/master/designs/extensible-cli-and-scaffolding-plugins-phase-1.md +[plugins-phase1-design-doc-1.5]: https://github.com/kubernetes-sigs/kubebuilder/blob/master/designs/extensible-cli-and-scaffolding-plugins-phase-1-5.md +[extending-cli]: extending-cli.md +[section-future-vision-plugins]: https://book.kubebuilder.io/plugins/creating-plugins.html#future-vision-for-kubebuilder-plugins diff --git a/docs/book/src/plugins/testing-plugins.md b/docs/book/src/plugins/testing-plugins.md new file mode 100644 index 00000000000..0215ca71294 --- /dev/null +++ b/docs/book/src/plugins/testing-plugins.md @@ -0,0 +1,84 @@ +# Test Your Plugins + +You can test your plugin in two dimenstion: + +1. Validate your plugin behavior through E2E tests +2. Generate sample projects based on your plugin that can be placed in `./testdata/` + +## Write E2E Tests + +You can check [Kubebuilder/v3/test/e2e/utils](https://pkg.go.dev/sigs.k8s.io/kubebuilder/v3/test/e2e/utils) package that offers `TestContext` of rich methods: + +- [NewTestContext](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/test/e2e/utils/test_context.go#L51) helps define: + - Temporary folder for testing projects + - Temporary controller-manager image + - [Kubectl execution method](https://pkg.go.dev/sigs.k8s.io/kubebuilder/v3/test/e2e/utils#Kubectl) + - The cli executable (`kubebuilder`, `operator-sdk`, OR your extended-cli) + +Once defined, you can use `TestContext` to: + +1. Setup testing environment, e.g: + - Cleanup environment, create temp dir. See [Prepare](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/test/e2e/utils/test_context.go#L97) + - Install prerequisites CRDs: See [InstallCertManager](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/test/e2e/utils/test_context.go#L138), [InstallPrometheusManager](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.6.0/test/e2e/utils/test_context.go#L171) +2. Validate the plugin behavior, e.g: + - Trigger the plugin's bound subcommands. See [Init](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/test/e2e/utils/test_context.go#L213), [CreateAPI](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.6.0/test/e2e/utils/test_context.go#L222) + - Use [PluginUtil](https://pkg.go.dev/sigs.k8s.io/kubebuilder/v3/pkg/plugin/util) to verify the scaffolded outputs. See [InsertCode](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/pkg/plugin/util/util.go#L67), [ReplaceInFile](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.6.0/pkg/plugin/util/util.go#L196), [UncommendCode](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.6.0/pkg/plugin/util/util.go#L86) +3. Further make sure the scaffolded output works, e.g: + - Execute commands in your `Makefile`. See [Make](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/test/e2e/utils/test_context.go#L240) + - Temporary load image of the testing controller. See [LoadImageToKindCluster](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/test/e2e/utils/test_context.go#L283) + - Call Kubectl to validate running resources. See [utils.Kubectl](https://pkg.go.dev/sigs.k8s.io/kubebuilder/v3/test/e2e/utils#Kubectl) +4. Delete temporary resources after testing exited, e.g: + - Uninstall prerequisites CRDs: See [UninstallPrometheusOperManager](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/test/e2e/utils/test_context.go#L183) + - Delete temp dir. See [Destroy](https://github.com/kubernetes-sigs/kubebuilder/blob/v3.7.0/test/e2e/utils/test_context.go#L255) + +**References:** [operator-sdk e2e tests](https://github.com/operator-framework/operator-sdk/tree/master/test/e2e/go), [kubebuiler e2e tests](https://github.com/kubernetes-sigs/kubebuilder/tree/master/test/e2e/v3) + +## Generate Test Samples + +It can be straightforward to view content of sample projects generated by your plugin. + +For example, Kubebuilder generate [sample projects](https://github.com/kubernetes-sigs/kubebuilder/tree/v3.7.0/testdata) based on different plugins to validate the layouts. + +Simiply, you can also use `TextContext` to generate folders of scaffolded projects from your plugin. +The commands are very similar as mentioned in [creating-plugins](creating-plugins.md#write-e2e-tests). + +Following is a general workflow to create a sample by the plugin `go/v3`: (`kbc` is an instance of `TextContext`) + +- To initialized a project: + ```go + By("initializing a project") + err = kbc.Init( + "--plugins", "go/v3", + "--project-version", "3", + "--domain", kbc.Domain, + "--fetch-deps=false", + "--component-config=true", + ) + ExpectWithOffset(1, err).NotTo(HaveOccurred()) + ``` +- To define API: + ```go + By("creating API definition") + err = kbc.CreateAPI( + "--group", kbc.Group, + "--version", kbc.Version, + "--kind", kbc.Kind, + "--namespaced", + "--resource", + "--controller", + "--make=false", + ) + ExpectWithOffset(1, err).NotTo(HaveOccurred()) + ``` +- To scaffold webhook configurations: + ```go + By("scaffolding mutating and validating webhooks") + err = kbc.CreateWebhook( + "--group", kbc.Group, + "--version", kbc.Version, + "--kind", kbc.Kind, + "--defaulting", + "--programmatic-validation", + ) + ExpectWithOffset(1, err).NotTo(HaveOccurred()) + ``` diff --git a/docs/book/src/plugins/to-add-optional-features.md b/docs/book/src/plugins/to-add-optional-features.md new file mode 100644 index 00000000000..085b11fda94 --- /dev/null +++ b/docs/book/src/plugins/to-add-optional-features.md @@ -0,0 +1,9 @@ +## To add optional features + +The following plugins are useful to generate code and take advantage of optional features + +| Plugin | Key | Description | +| ---------------------------------------------------------------------------------- | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [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. | +| [grafana.kubebuilder.io/v1-alpha](grafana-v1-alpha.md) | `grafana/v1-alpha` | Optional helper plugin which can be used to scaffold Grafana Manifests Dashboards for the default metrics which are exported by controller-runtime. | +| [deploy-image.go.kubebuilder.io/v1-alpha](deploy-image-plugin-v1-alpha) | `deploy-image/v1-alpha` | Optional helper plugin which can be used to scaffold APIs and controller with code implementation to Deploy and Manage an Operand(image). | diff --git a/docs/book/src/plugins/to-be-extended.md b/docs/book/src/plugins/to-be-extended.md new file mode 100644 index 00000000000..754c43613b2 --- /dev/null +++ b/docs/book/src/plugins/to-be-extended.md @@ -0,0 +1,28 @@ +## To help projects using Kubebuilder as Lib to composite new solutions and plugins + + + +Then, see that you can use the kustomize plugin, which is responsible for to scaffold the kustomize files under `config/`, as +the base language plugins which are responsible for to scaffold the Golang files to create your own plugins to work with +another languages (i.e. [Operator-SDK][sdk] does to allow users work with Ansible/Helm) or to add +helpers on top, such as [Operator-SDK][sdk] does to add their features to integrate the projects with [OLM][olm]. + +| Plugin | Key | Description | +| ---------------------------------------------------------------------------------- | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [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 `config/` directory). This plugin is used in the composition to create the plugin (`go/v3`). | +| [kustomize.common.kubebuilder.io/v2-alpha](kustomize-v2-alpha.md) | `kustomize/v2-alpha` | It has the same purpose of `kustomize/v1`. However, it works with [kustomize][kustomize] version `v4` and addresses the required changes for 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`) | +| `base.go.kubebuilder.io/v4-alpha` | `base/v3-alpha` | Responsible for scaffolding all files which specifically requires Golang. This plugin is used in the composition to create the plugin (`go/v4-alpha`) | + +[create-plugins]: creating-plugins.md +[kubebuilder-declarative-pattern]: https://github.com/kubernetes-sigs/kubebuilder-declarative-pattern +[kustomize]: https://kustomize.io/ +[sdk]: https://github.com/operator-framework/operator-sdk +[olm]: https://olm.operatorframework.io/ + diff --git a/docs/book/src/plugins/to-scaffold-project.md b/docs/book/src/plugins/to-scaffold-project.md new file mode 100644 index 00000000000..f8de71fee6f --- /dev/null +++ b/docs/book/src/plugins/to-scaffold-project.md @@ -0,0 +1,9 @@ +## To scaffold the projects + +The following plugins are useful to scaffold the whole project with the tool. + +| Plugin | Key | Description | +| ---------------------------------------------------------------------------------- | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [go.kubebuilder.io/v2 - (Deprecated)](go-v2-plugin.md) | `go/v2` | Golang plugin responsible for scaffolding the legacy layout provided with Kubebuilder CLI >= `2.0.0` and < `3.0.0`. | +| [go.kubebuilder.io/v3 - (Default scaffold with Kubebuilder init)](go-v3-plugin.md) | `go/v3` | Default scaffold used for creating a project when no plugin(s) are provided. Responsible for scaffolding Golang projects and its configurations. | +| [go.kubebuilder.io/v4-alpha - (Add Apple Sillicom Support)](go-v4-plugin.md) | `go/v4` | Scaffold composite by `base.go.kubebuilder.io/v3` and [kustomize.common.kubebuilder.io/v2-alpha](kustomize-v2-alpha.md). Responsible for scaffolding Golang projects and its configurations. | diff --git a/docs/book/src/quick-start.md b/docs/book/src/quick-start.md index c2d3034c468..ceaefc7f913 100644 --- a/docs/book/src/quick-start.md +++ b/docs/book/src/quick-start.md @@ -31,7 +31,7 @@ Install [kubebuilder](https://sigs.k8s.io/kubebuilder): ```bash # download kubebuilder and install locally. -curl -L -o kubebuilder https://go.kubebuilder.io/dl/latest/$(go env GOOS)/$(go env GOARCH) +curl -L -o kubebuilder https://go.kubebuilder.io/dl/latest/$\(go env GOOS\)/$\(go env GOARCH\) chmod +x kubebuilder && mv kubebuilder /usr/local/bin/ ``` diff --git a/docs/book/src/reference/completion.md b/docs/book/src/reference/completion.md index a30635c7e0e..3e123de5d28 100644 --- a/docs/book/src/reference/completion.md +++ b/docs/book/src/reference/completion.md @@ -31,5 +31,7 @@ fi diff --git a/docs/book/src/reference/controller-gen.md b/docs/book/src/reference/controller-gen.md index b3c753904b1..97225650ca3 100644 --- a/docs/book/src/reference/controller-gen.md +++ b/docs/book/src/reference/controller-gen.md @@ -13,7 +13,7 @@ results). Both are configured through command line options specified in [marker format](/reference/markers.md). -For instance, +For instance, the following command: ```shell controller-gen paths=./... crd:trivialVersions=true rbac:roleName=controller-perms output:crd:artifacts:config=config/crd/bases diff --git a/docs/book/src/reference/envtest.md b/docs/book/src/reference/envtest.md index 8a0a0646dfc..1099bf88cd1 100644 --- a/docs/book/src/reference/envtest.md +++ b/docs/book/src/reference/envtest.md @@ -12,7 +12,7 @@ The make targets require `bash` to run. ## Installation in Air Gaped/disconnected environments If you would like to download the tarball containing the binaries, to use in a disconnected environment you can use -`setup-envtest` to download the required binaries locally. There are a lot of ways to configure `setup-envtest` to avoid talking to +[`setup-envtest`][setup-envtest] to download the required binaries locally. There are a lot of ways to configure `setup-envtest` to avoid talking to the internet you can read about them [here](https://github.com/kubernetes-sigs/controller-runtime/tree/master/tools/setup-envtest#what-if-i-dont-want-to-talk-to-the-internet). The examples below will show how to install the Kubernetes API binaries using mostly defaults set by `setup-envtest`. @@ -76,6 +76,15 @@ err = testEnv.Stop() Logs from the test runs are prefixed with `test-env`. + + ### Configuring your test control plane Controller-runtime’s [envtest][envtest] framework requires `kubectl`, `kube-apiserver`, and `etcd` binaries be present locally to simulate the API portions of a real cluster. @@ -97,12 +106,12 @@ You can use environment variables and/or flags to specify the `kubectl`,`api-ser ### Environment Variables | Variable name | Type | When to use | -| --- | :--- | :--- | +| --- | :--- | :--- | | `USE_EXISTING_CLUSTER` | boolean | Instead of setting up a local control plane, point to the control plane of an existing cluster. | -| `KUBEBUILDER_ASSETS` | path to directory | Point integration tests to a directory containing all binaries (api-server, etcd and kubectl). | -| `TEST_ASSET_KUBE_APISERVER`, `TEST_ASSET_ETCD`, `TEST_ASSET_KUBECTL` | paths to, respectively, api-server, etcd and kubectl binaries | Similar to `KUBEBUILDER_ASSETS`, but more granular. Point integration tests to use binaries other than the default ones. These environment variables can also be used to ensure specific tests run with expected versions of these binaries. | -| `KUBEBUILDER_CONTROLPLANE_START_TIMEOUT` and `KUBEBUILDER_CONTROLPLANE_STOP_TIMEOUT` | durations in format supported by [`time.ParseDuration`](https://golang.org/pkg/time/#ParseDuration) | Specify timeouts different from the default for the test control plane to (respectively) start and stop; any test run that exceeds them will fail. | -| `KUBEBUILDER_ATTACH_CONTROL_PLANE_OUTPUT` | boolean | Set to `true` to attach the control plane's stdout and stderr to os.Stdout and os.Stderr. This can be useful when debugging test failures, as output will include output from the control plane. | +| `KUBEBUILDER_ASSETS` | path to directory | Point integration tests to a directory containing all binaries (api-server, etcd and kubectl). | +| `TEST_ASSET_KUBE_APISERVER`, `TEST_ASSET_ETCD`, `TEST_ASSET_KUBECTL` | paths to, respectively, api-server, etcd and kubectl binaries | Similar to `KUBEBUILDER_ASSETS`, but more granular. Point integration tests to use binaries other than the default ones. These environment variables can also be used to ensure specific tests run with expected versions of these binaries. | +| `KUBEBUILDER_CONTROLPLANE_START_TIMEOUT` and `KUBEBUILDER_CONTROLPLANE_STOP_TIMEOUT` | durations in format supported by [`time.ParseDuration`](https://golang.org/pkg/time/#ParseDuration) | Specify timeouts different from the default for the test control plane to (respectively) start and stop; any test run that exceeds them will fail. | +| `KUBEBUILDER_ATTACH_CONTROL_PLANE_OUTPUT` | boolean | Set to `true` to attach the control plane's stdout and stderr to os.Stdout and os.Stderr. This can be useful when debugging test failures, as output will include output from the control plane. | See that the `test` makefile target will ensure that all is properly setup when you are using it. However, if you would like to run the tests without use the Makefile targets, for example via an IDE, then you can set the environment variables directly in the code of your `suite_test.go`: @@ -116,7 +125,7 @@ var _ = BeforeSuite(func(done Done) { logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true))) testenv = &envtest.Environment{} - + _, err := testenv.Start() Expect(err).NotTo(HaveOccurred()) @@ -133,6 +142,14 @@ var _ = AfterSuite(func() { }) ``` + + ### Flags Here's an example of modifying the flags with which to start the API server in your integration tests, compared to the default values in `envtest.DefaultKubeAPIServerFlags`: @@ -167,6 +184,114 @@ expectedOwnerReference := v1.OwnerReference{ Expect(deployment.ObjectMeta.OwnerReferences).To(ContainElement(expectedOwnerReference)) ``` +## Cert-Manager and Prometheus options + +Projects scaffolded with Kubebuilder can enable the [`metrics`][metrics] and the [`cert-manager`][cert-manager] options. Note that when we are using the ENV TEST we are looking to test the controllers and their reconciliation. It is considered an integrated test because the ENV TEST API will do the test against a cluster and because of this the binaries are downloaded and used to configure its pre-requirements, however, its purpose is mainly to `unit` test the controllers. + +Therefore, to test a reconciliation in common cases you do not need to care about these options. However, if you would like to do tests with the Prometheus and the Cert-manager installed you can add the required steps to install them before running the tests. +Following an example. + +```go + // Add the operations to install the Prometheus operator and the cert-manager + // before the tests. + BeforeEach(func() { + By("installing prometheus operator") + Expect(utils.InstallPrometheusOperator()).To(Succeed()) + + By("installing the cert-manager") + Expect(utils.InstallCertManager()).To(Succeed()) + } + + // You can also remove them after the tests:: + AfterEach(func() { + By("uninstalling the Prometheus manager bundle") + utils.UninstallPrometheusOperManager() + + By("uninstalling the cert-manager bundle") + utils.UninstallCertManager() + }) +``` + +Check the following example of how you can implement the above operations: + +```go +const ( + prometheusOperatorVersion = "0.51" + prometheusOperatorURL = "https://raw.githubusercontent.com/prometheus-operator/" + "prometheus-operator/release-%s/bundle.yaml" + certmanagerVersion = "v1.5.3" + certmanagerURLTmpl = "https://github.com/jetstack/cert-manager/releases/download/%s/cert-manager.yaml" +) + +func warnError(err error) { + fmt.Fprintf(GinkgoWriter, "warning: %v\n", err) +} + +// InstallPrometheusOperator installs the prometheus Operator to be used to export the enabled metrics. +func InstallPrometheusOperator() error { + url := fmt.Sprintf(prometheusOperatorURL, prometheusOperatorVersion) + cmd := exec.Command("kubectl", "apply", "-f", url) + _, err := Run(cmd) + return err +} + +// UninstallPrometheusOperator uninstalls the prometheus +func UninstallPrometheusOperator() { + url := fmt.Sprintf(prometheusOperatorURL, prometheusOperatorVersion) + cmd := exec.Command("kubectl", "delete", "-f", url) + if _, err := Run(cmd); err != nil { + warnError(err) + } +} + +// UninstallCertManager uninstalls the cert manager +func UninstallCertManager() { + url := fmt.Sprintf(certmanagerURLTmpl, certmanagerVersion) + cmd := exec.Command("kubectl", "delete", "-f", url) + if _, err := Run(cmd); err != nil { + warnError(err) + } +} + +// InstallCertManager installs the cert manager bundle. +func InstallCertManager() error { + url := fmt.Sprintf(certmanagerURLTmpl, certmanagerVersion) + cmd := exec.Command("kubectl", "apply", "-f", url) + if _, err := Run(cmd); err != nil { + return err + } + // Wait for cert-manager-webhook to be ready, which can take time if cert-manager + //was re-installed after uninstalling on a cluster. + cmd = exec.Command("kubectl", "wait", "deployment.apps/cert-manager-webhook", + "--for", "condition=Available", + "--namespace", "cert-manager", + "--timeout", "5m", + ) + + _, err := Run(cmd) + return err +} + +// LoadImageToKindCluster loads a local docker image to the kind cluster +func LoadImageToKindClusterWithName(name string) error { + cluster := "kind" + if v, ok := os.LookupEnv("KIND_CLUSTER"); ok { + cluster = v + } + + kindOptions := []string{"load", "docker-image", name, "--name", cluster} + cmd := exec.Command("kind", kindOptions...) + _, err := Run(cmd) + return err +} +``` +However, see that tests for the metrics and cert-manager might fit better well as e2e tests and not under the tests done using ENV TEST for the controllers. You might want to give a look at the [sample example][sdk-e2e-sample-example] implemented into [Operator-SDK][sdk] repository to know how you can write your e2e tests to ensure the basic workflows of your project. +Also, see that you can run the tests against a cluster where you have some configurations in place they can use the option to test using an existing cluster: + +```go +testEnv = &envtest.Environment{ + UseExistingCluster: true, +} +```