Showing preview only (4,781K chars total). Download the full file or copy to clipboard to get everything.
Repository: operator-framework/operator-sdk
Branch: master
Commit: 861d4bf353b3
Files: 941
Total size: 4.4 MB
Directory structure:
gitextract_zj60_vqy/
├── .ci/
│ └── gpg/
│ ├── README.md
│ ├── create-keyring.sh
│ ├── pubring.auto
│ └── secring.auto.gpg
├── .cncf-maintainers
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-report.md
│ │ ├── doc-report.md
│ │ ├── feature-request.md
│ │ └── support-question.md
│ ├── ISSUE_TEMPLATE.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── check-docs-only.sh
│ ├── clean-unused-disk-space.sh
│ ├── deploy.yml
│ ├── freshen-images/
│ │ ├── build.sh
│ │ ├── lib.sh
│ │ └── tags.sh
│ ├── freshen-images.yml
│ ├── get_image_tags.sh
│ ├── integration.yml
│ ├── markdown-link-check-config.json
│ ├── olm-check.yml
│ ├── rerun.yml
│ ├── test-go.yml
│ ├── test-helm.yml
│ ├── test-sample-go.yml
│ └── test-sanity.yml
├── .gitignore
├── .gitmodules
├── .golangci.yml
├── .goreleaser.yml
├── CONTRIBUTING.MD
├── LICENSE
├── Makefile
├── OWNERS
├── OWNERS_ALIASES
├── README.md
├── SECURITY.md
├── changelog/
│ ├── fragments/
│ │ └── 00-template.yaml
│ └── generated/
│ ├── v1.10.0.md
│ ├── v1.11.0.md
│ ├── v1.12.0.md
│ ├── v1.13.0.md
│ ├── v1.14.0.md
│ ├── v1.15.0.md
│ ├── v1.16.0.md
│ ├── v1.17.0.md
│ ├── v1.18.0.md
│ ├── v1.19.0.md
│ ├── v1.20.0.md
│ ├── v1.21.0.md
│ ├── v1.22.0.md
│ ├── v1.23.0.md
│ ├── v1.24.0.md
│ ├── v1.25.0.md
│ ├── v1.26.0.md
│ ├── v1.27.0.md
│ ├── v1.28.0.md
│ ├── v1.29.0.md
│ ├── v1.3.0.md
│ ├── v1.30.0.md
│ ├── v1.31.0.md
│ ├── v1.32.0.md
│ ├── v1.33.0.md
│ ├── v1.34.0.md
│ ├── v1.35.0.md
│ ├── v1.36.0.md
│ ├── v1.37.0.md
│ ├── v1.38.0.md
│ ├── v1.39.0.md
│ ├── v1.39.1.md
│ ├── v1.39.2.md
│ ├── v1.4.0.md
│ ├── v1.40.0.md
│ ├── v1.41.0.md
│ ├── v1.42.0.md
│ ├── v1.42.1.md
│ ├── v1.42.2.md
│ ├── v1.5.0.md
│ ├── v1.6.0.md
│ ├── v1.6.1.md
│ ├── v1.7.0.md
│ ├── v1.7.1.md
│ ├── v1.8.0.md
│ └── v1.9.0.md
├── cmd/
│ ├── helm-operator/
│ │ └── main.go
│ └── operator-sdk/
│ └── main.go
├── code-of-conduct.md
├── config/
│ └── crd/
│ └── bases/
│ └── _.yaml
├── go.mod
├── go.sum
├── hack/
│ ├── check-error-log-msg-format.sh
│ ├── check-license.sh
│ ├── check-links.sh
│ ├── check-olm.sh
│ ├── generate/
│ │ ├── cli-doc/
│ │ │ └── gen-cli-doc.go
│ │ ├── cncf-maintainers/
│ │ │ └── main.go
│ │ ├── migrate-markers.sh
│ │ ├── olm_bindata.sh
│ │ └── samples/
│ │ ├── generate_testdata.go
│ │ └── internal/
│ │ ├── go/
│ │ │ ├── generate.go
│ │ │ └── memcached-with-customization/
│ │ │ ├── e2e_test_code.go
│ │ │ └── memcached_with_customization.go
│ │ ├── helm/
│ │ │ ├── generate.go
│ │ │ ├── memcached.go
│ │ │ └── testdata/
│ │ │ └── memcached-0.0.2.tgz
│ │ └── pkg/
│ │ ├── context.go
│ │ └── utils.go
│ ├── lib/
│ │ └── common.sh
│ └── tests/
│ └── subcommand-olm-install.sh
├── images/
│ ├── custom-scorecard-tests/
│ │ ├── Dockerfile
│ │ └── main.go
│ ├── helm-operator/
│ │ └── Dockerfile
│ ├── operator-sdk/
│ │ └── Dockerfile
│ ├── scorecard-storage/
│ │ └── Dockerfile
│ ├── scorecard-test/
│ │ ├── Dockerfile
│ │ └── main.go
│ ├── scorecard-test-kuttl/
│ │ ├── Dockerfile
│ │ ├── entrypoint
│ │ └── main.go
│ └── scorecard-untar/
│ └── Dockerfile
├── internal/
│ ├── annotations/
│ │ ├── metrics/
│ │ │ ├── metrics.go
│ │ │ ├── metrics_suite_test.go
│ │ │ └── metrics_test.go
│ │ └── scorecard/
│ │ └── scorecard.go
│ ├── bindata/
│ │ └── olm/
│ │ ├── manifests.go
│ │ └── versions.go
│ ├── cmd/
│ │ ├── helm-operator/
│ │ │ ├── run/
│ │ │ │ └── cmd.go
│ │ │ └── version/
│ │ │ ├── cmd.go
│ │ │ ├── cmd_test.go
│ │ │ └── version_suite_test.go
│ │ └── operator-sdk/
│ │ ├── alpha/
│ │ │ └── config3alphato3/
│ │ │ ├── cmd.go
│ │ │ ├── convert_config_3-alpha_to_3.go
│ │ │ ├── convert_config_3-alpha_to_3_test.go
│ │ │ └── suite_test.go
│ │ ├── bundle/
│ │ │ ├── bundle_suite_test.go
│ │ │ ├── cmd.go
│ │ │ ├── cmd_test.go
│ │ │ └── validate/
│ │ │ ├── cmd.go
│ │ │ ├── cmd_suite_test.go
│ │ │ ├── internal/
│ │ │ │ └── logger.go
│ │ │ ├── optional.go
│ │ │ ├── optional_test.go
│ │ │ ├── validate.go
│ │ │ └── validate_test.go
│ │ ├── cleanup/
│ │ │ └── cmd.go
│ │ ├── cli/
│ │ │ ├── cli.go
│ │ │ ├── cli_suite_test.go
│ │ │ ├── version.go
│ │ │ └── version_test.go
│ │ ├── generate/
│ │ │ ├── bundle/
│ │ │ │ ├── bundle.go
│ │ │ │ └── cmd.go
│ │ │ ├── cmd.go
│ │ │ ├── internal/
│ │ │ │ ├── genutil.go
│ │ │ │ ├── genutil_suite_test.go
│ │ │ │ ├── manifests.go
│ │ │ │ ├── manifests_test.go
│ │ │ │ ├── relatedimages.go
│ │ │ │ └── relatedimages_test.go
│ │ │ ├── kustomize/
│ │ │ │ ├── cmd.go
│ │ │ │ └── manifests.go
│ │ │ └── packagemanifests/
│ │ │ ├── cmd.go
│ │ │ ├── cmd_test.go
│ │ │ ├── packagemanifests.go
│ │ │ ├── packagemanifests_suite_test.go
│ │ │ ├── packagemanifests_test.go
│ │ │ └── testdata/
│ │ │ └── PROJECT
│ │ ├── olm/
│ │ │ ├── cmd.go
│ │ │ ├── cmd_test.go
│ │ │ ├── install.go
│ │ │ ├── install_test.go
│ │ │ ├── olm_suite_test.go
│ │ │ ├── status.go
│ │ │ ├── status_test.go
│ │ │ ├── uninstall.go
│ │ │ └── uninstall_test.go
│ │ ├── pkgmantobundle/
│ │ │ ├── cmd.go
│ │ │ ├── cmd_test.go
│ │ │ ├── pkgmantobundle_suite_test.go
│ │ │ ├── pkgmantobundle_test.go
│ │ │ └── testdata/
│ │ │ └── packagemanifests/
│ │ │ ├── 0.0.1/
│ │ │ │ ├── cache.example.com_memcacheds.yaml
│ │ │ │ ├── memcached-operator-controller-manager-metrics-service_v1_service.yaml
│ │ │ │ ├── memcached-operator-controller-manager_v1_serviceaccount.yaml
│ │ │ │ ├── memcached-operator-manager-config_v1_configmap.yaml
│ │ │ │ ├── memcached-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ │ ├── memcached-operator.clusterserviceversion.yaml
│ │ │ │ └── scorecard-config.yaml
│ │ │ ├── 0.0.2/
│ │ │ │ ├── cache.example.com_memcacheds.yaml
│ │ │ │ ├── memcached-operator-controller-manager-metrics-service_v1_service.yaml
│ │ │ │ ├── memcached-operator-controller-manager_v1_serviceaccount.yaml
│ │ │ │ ├── memcached-operator-manager-config_v1_configmap.yaml
│ │ │ │ ├── memcached-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ │ └── memcached-operator.clusterserviceversion.yaml
│ │ │ └── memcached-operator.package.yaml
│ │ ├── run/
│ │ │ ├── bundle/
│ │ │ │ └── cmd.go
│ │ │ ├── bundleupgrade/
│ │ │ │ └── cmd.go
│ │ │ ├── cmd.go
│ │ │ ├── cmd_test.go
│ │ │ ├── packagemanifests/
│ │ │ │ ├── packagemanifests.go
│ │ │ │ ├── packagemanifests_suite_test.go
│ │ │ │ └── packagemanifests_test.go
│ │ │ └── run_suite_test.go
│ │ └── scorecard/
│ │ ├── cmd.go
│ │ ├── cmd_test.go
│ │ ├── scorecard_suite_test.go
│ │ └── xunit/
│ │ └── xunit.go
│ ├── flags/
│ │ └── flags.go
│ ├── generate/
│ │ ├── clusterserviceversion/
│ │ │ ├── bases/
│ │ │ │ ├── clusterserviceversion.go
│ │ │ │ ├── definitions/
│ │ │ │ │ ├── ast.go
│ │ │ │ │ ├── crd.go
│ │ │ │ │ ├── crd_test.go
│ │ │ │ │ ├── definitions.go
│ │ │ │ │ ├── definitions_suite_test.go
│ │ │ │ │ ├── definitions_test.go
│ │ │ │ │ ├── markers.go
│ │ │ │ │ ├── markers_test.go
│ │ │ │ │ └── zz_generated.markerhelp.go
│ │ │ │ ├── metadata.go
│ │ │ │ └── metadata_test.go
│ │ │ ├── clusterserviceversion.go
│ │ │ ├── clusterserviceversion_suite_test.go
│ │ │ ├── clusterserviceversion_test.go
│ │ │ ├── clusterserviceversion_updaters.go
│ │ │ └── clusterserviceversion_updaters_test.go
│ │ ├── collector/
│ │ │ ├── clusterserviceversion.go
│ │ │ ├── clusterserviceversion_test.go
│ │ │ ├── collector_suite_test.go
│ │ │ ├── filter.go
│ │ │ └── manifests.go
│ │ ├── internal/
│ │ │ └── genutil.go
│ │ ├── packagemanifest/
│ │ │ ├── packagemanifest.go
│ │ │ ├── packagemanifest_suite_test.go
│ │ │ ├── packagemanifest_test.go
│ │ │ └── packagemanifestfakes/
│ │ │ └── fake_generator.go
│ │ └── testdata/
│ │ ├── clusterserviceversions/
│ │ │ ├── bases/
│ │ │ │ ├── memcached-operator-multiVersion.yaml
│ │ │ │ ├── memcached-operator.clusterserviceversion.yaml
│ │ │ │ └── with-ui-metadata.clusterserviceversion.yaml
│ │ │ └── output/
│ │ │ ├── memcached-operator-multiVersion.yaml
│ │ │ ├── memcached-operator.clusterserviceversion.yaml
│ │ │ └── with-ui-metadata.clusterserviceversion.yaml
│ │ ├── go/
│ │ │ ├── PROJECT
│ │ │ ├── api/
│ │ │ │ ├── shared/
│ │ │ │ │ ├── doc.go
│ │ │ │ │ └── memcached_types.go
│ │ │ │ ├── v1alpha1/
│ │ │ │ │ ├── doc.go
│ │ │ │ │ └── memcached_types.go
│ │ │ │ └── v1alpha2/
│ │ │ │ ├── doc.go
│ │ │ │ ├── dummy_types.go
│ │ │ │ ├── memcached_types.go
│ │ │ │ ├── memcachedrs_types.go
│ │ │ │ └── motorcycle_types.go
│ │ │ └── static/
│ │ │ ├── basic.multiversion.operator.yaml
│ │ │ └── basic.operator.yaml
│ │ └── memcached-operator.package.yaml
│ ├── helm/
│ │ ├── client/
│ │ │ ├── actionconfig.go
│ │ │ ├── client.go
│ │ │ ├── client_test.go
│ │ │ ├── doc.go
│ │ │ ├── restclientgetter.go
│ │ │ └── secrets_watch.go
│ │ ├── controller/
│ │ │ ├── controller.go
│ │ │ ├── doc.go
│ │ │ ├── reconcile.go
│ │ │ └── reconcile_test.go
│ │ ├── flags/
│ │ │ ├── flag.go
│ │ │ ├── flag_test.go
│ │ │ └── suite_test.go
│ │ ├── internal/
│ │ │ ├── diff/
│ │ │ │ └── diff.go
│ │ │ └── types/
│ │ │ ├── doc.go
│ │ │ ├── types.go
│ │ │ └── types_test.go
│ │ ├── manifestutil/
│ │ │ └── resource_policy.go
│ │ ├── metrics/
│ │ │ └── metrics.go
│ │ ├── release/
│ │ │ ├── doc.go
│ │ │ ├── manager.go
│ │ │ ├── manager_factory.go
│ │ │ └── manager_test.go
│ │ └── watches/
│ │ ├── watches.go
│ │ └── watches_test.go
│ ├── markers/
│ │ └── markers.go
│ ├── olm/
│ │ ├── client/
│ │ │ ├── client.go
│ │ │ ├── client_suite_test.go
│ │ │ ├── client_test.go
│ │ │ └── status.go
│ │ ├── fbcutil/
│ │ │ ├── util.go
│ │ │ └── util_test.go
│ │ ├── installer/
│ │ │ ├── client.go
│ │ │ ├── client_test.go
│ │ │ ├── installer_suite_test.go
│ │ │ └── manager.go
│ │ └── operator/
│ │ ├── bundle/
│ │ │ └── install.go
│ │ ├── bundleupgrade/
│ │ │ └── upgrade.go
│ │ ├── config.go
│ │ ├── helpers.go
│ │ ├── install_mode.go
│ │ ├── install_mode_test.go
│ │ ├── operator_suite_test.go
│ │ ├── packagemanifests/
│ │ │ └── install.go
│ │ ├── registry/
│ │ │ ├── catalog.go
│ │ │ ├── configmap/
│ │ │ │ ├── configmap.go
│ │ │ │ ├── configmap_suite_test.go
│ │ │ │ ├── configmap_test.go
│ │ │ │ ├── deployment.go
│ │ │ │ ├── deployment_test.go
│ │ │ │ ├── registry.go
│ │ │ │ ├── registry_test.go
│ │ │ │ ├── service.go
│ │ │ │ └── service_test.go
│ │ │ ├── configmap.go
│ │ │ ├── configmap_test.go
│ │ │ ├── fbcindex/
│ │ │ │ ├── configMapWriter.go
│ │ │ │ ├── fbc_registry_pod.go
│ │ │ │ └── fbc_registry_pod_test.go
│ │ │ ├── index/
│ │ │ │ ├── bundle_add_mode.go
│ │ │ │ ├── registry_pod.go
│ │ │ │ └── registry_pod_test.go
│ │ │ ├── index_image.go
│ │ │ ├── index_image_test.go
│ │ │ ├── olm_resources.go
│ │ │ ├── olm_resources_test.go
│ │ │ ├── operator_installer.go
│ │ │ ├── operator_installer_test.go
│ │ │ └── registry_suite_test.go
│ │ └── uninstall.go
│ ├── plugins/
│ │ ├── helm/
│ │ │ └── v1/
│ │ │ ├── api.go
│ │ │ ├── chartutil/
│ │ │ │ ├── chart.go
│ │ │ │ ├── chart_test.go
│ │ │ │ └── testdata/
│ │ │ │ ├── test-chart/
│ │ │ │ │ ├── .helmignore
│ │ │ │ │ ├── Chart.yaml
│ │ │ │ │ ├── templates/
│ │ │ │ │ │ ├── NOTES.txt
│ │ │ │ │ │ ├── _helpers.tpl
│ │ │ │ │ │ ├── deployment.yaml
│ │ │ │ │ │ ├── ingress.yaml
│ │ │ │ │ │ ├── service.yaml
│ │ │ │ │ │ ├── serviceaccount.yaml
│ │ │ │ │ │ └── tests/
│ │ │ │ │ │ └── test-connection.yaml
│ │ │ │ │ └── values.yaml
│ │ │ │ ├── test-chart-1.2.0.tgz
│ │ │ │ └── test-chart-1.2.3.tgz
│ │ │ ├── init.go
│ │ │ ├── plugin.go
│ │ │ └── scaffolds/
│ │ │ ├── api.go
│ │ │ ├── doc.go
│ │ │ ├── init.go
│ │ │ └── internal/
│ │ │ └── templates/
│ │ │ ├── config/
│ │ │ │ ├── crd/
│ │ │ │ │ ├── crd.go
│ │ │ │ │ └── kustomization.go
│ │ │ │ ├── rbac/
│ │ │ │ │ ├── manager_role.go
│ │ │ │ │ └── manager_role_test.go
│ │ │ │ └── samples/
│ │ │ │ └── custom_resource.go
│ │ │ ├── dockerfile.go
│ │ │ ├── gitignore.go
│ │ │ ├── makefile.go
│ │ │ └── watches.go
│ │ ├── manifests/
│ │ │ └── v2/
│ │ │ ├── api.go
│ │ │ ├── init.go
│ │ │ ├── plugin.go
│ │ │ ├── templates/
│ │ │ │ └── config/
│ │ │ │ ├── manifests/
│ │ │ │ │ └── kustomization.go
│ │ │ │ └── samples/
│ │ │ │ └── kustomization.go
│ │ │ └── utils.go
│ │ ├── plugins.go
│ │ ├── scorecard/
│ │ │ └── v2/
│ │ │ ├── init.go
│ │ │ └── plugin.go
│ │ └── util/
│ │ ├── cleanup.go
│ │ ├── legacy_keys.go
│ │ └── message.go
│ ├── registry/
│ │ ├── image.go
│ │ ├── labels.go
│ │ ├── labels_test.go
│ │ ├── logger.go
│ │ ├── registry_suite_test.go
│ │ └── validate.go
│ ├── scorecard/
│ │ ├── bundle.go
│ │ ├── bundle_test.go
│ │ ├── config.go
│ │ ├── config_test.go
│ │ ├── formatting.go
│ │ ├── formatting_test.go
│ │ ├── kubeclient.go
│ │ ├── kubeclient_test.go
│ │ ├── labels_test.go
│ │ ├── run_test.go
│ │ ├── scorecard.go
│ │ ├── scorecard_suite_test.go
│ │ ├── storage.go
│ │ ├── tar.go
│ │ ├── testconfigmap.go
│ │ ├── testdata/
│ │ │ ├── bundle/
│ │ │ │ ├── manifests/
│ │ │ │ │ ├── cache.example.com_memcacheds_crd.yaml
│ │ │ │ │ └── memcached-operator.clusterserviceversion.yaml
│ │ │ │ ├── metadata/
│ │ │ │ │ └── annotations.yaml
│ │ │ │ └── tests/
│ │ │ │ └── scorecard/
│ │ │ │ ├── config.yaml
│ │ │ │ └── kuttl/
│ │ │ │ ├── kuttl-test.yaml
│ │ │ │ └── list-pods/
│ │ │ │ ├── 00-assert.yaml
│ │ │ │ └── 00-pod.yaml
│ │ │ ├── generate-bundle-tarball.sh
│ │ │ └── pod.yaml
│ │ ├── testpod.go
│ │ └── tests/
│ │ ├── basic.go
│ │ ├── bundle_test.go
│ │ ├── crhelper.go
│ │ └── olm.go
│ ├── testutils/
│ │ ├── olm.go
│ │ ├── scorecard.go
│ │ └── utils.go
│ ├── util/
│ │ ├── bundleutil/
│ │ │ ├── bundleutil.go
│ │ │ └── template.go
│ │ ├── k8sutil/
│ │ │ ├── api.go
│ │ │ ├── api_test.go
│ │ │ ├── constants.go
│ │ │ ├── k8sutil.go
│ │ │ ├── k8sutil_test.go
│ │ │ ├── object.go
│ │ │ └── scan.go
│ │ └── projutil/
│ │ ├── interactive_promt_util.go
│ │ ├── interactive_promt_util_test.go
│ │ ├── project_util.go
│ │ └── projutil_test.go
│ ├── validate/
│ │ ├── external.go
│ │ ├── external_test.go
│ │ ├── result.go
│ │ ├── result_test.go
│ │ ├── suite_test.go
│ │ └── testdata/
│ │ ├── errors.sh
│ │ ├── fails.sh
│ │ └── passes.sh
│ └── version/
│ └── version.go
├── netlify.toml
├── proposals/
│ ├── README.md
│ ├── TEMPLATE.md
│ ├── ansible-helm-addapi.md
│ ├── ansible-operator-devex.md
│ ├── ansible-operator-status.md
│ ├── ansible-operator-testing.md
│ ├── ansible-operator.md
│ ├── automating-releases.md
│ ├── cli-ux-phase1.md
│ ├── helm-operator.md
│ ├── hugo-doc-build.md
│ ├── improve-csv-cli.md
│ ├── improved-scorecard-config.md
│ ├── kubebuilder-integration.md
│ ├── kubernetes-1.17.md
│ ├── leader-for-life.md
│ ├── metering-operator-metrics.md
│ ├── operator-testing-tool.md
│ ├── qa-samples-proposal.md
│ ├── scorecard-custom-tests-2.md
│ ├── scorecard-plugin-system.md
│ ├── sdk-code-annotations.md
│ ├── sdk-integration-with-olm.md
│ ├── tech-debt.md
│ ├── tls-utilities.md
│ └── upstream-osdk-features-into-controller-runtime.md
├── release/
│ ├── Makefile
│ └── changelog/
│ ├── gen-changelog.go
│ └── internal/
│ ├── changelog.go
│ ├── changelog_test.go
│ ├── fragment.go
│ ├── fragment_test.go
│ ├── migration_guide.go
│ ├── migration_guide_test.go
│ └── testdata/
│ ├── ignore/
│ │ ├── 00-template.yaml
│ │ ├── more-fragments/
│ │ │ └── ignored.yaml
│ │ └── non-yaml.txt
│ ├── invalid_entry/
│ │ └── fragment1.yaml
│ ├── invalid_yaml/
│ │ └── fragment1.yaml
│ └── valid/
│ ├── fragment1.yaml
│ └── fragment2.yml
├── test/
│ ├── common/
│ │ ├── sa_secret.go
│ │ └── scorecard.go
│ ├── e2e/
│ │ ├── go/
│ │ │ ├── cluster_test.go
│ │ │ ├── local_test.go
│ │ │ ├── scorecard_test.go
│ │ │ └── suite_test.go
│ │ └── helm/
│ │ ├── cluster_test.go
│ │ ├── local_test.go
│ │ ├── olm_test.go
│ │ ├── scorecard_test.go
│ │ └── suite_test.go
│ └── integration/
│ ├── packagemanifests_test.go
│ └── suite_test.go
├── testdata/
│ ├── go/
│ │ └── v4/
│ │ ├── memcached-operator/
│ │ │ ├── .devcontainer/
│ │ │ │ ├── devcontainer.json
│ │ │ │ └── post-install.sh
│ │ │ ├── .dockerignore
│ │ │ ├── .github/
│ │ │ │ └── workflows/
│ │ │ │ ├── lint.yml
│ │ │ │ ├── test-e2e.yml
│ │ │ │ └── test.yml
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── Dockerfile
│ │ │ ├── Makefile
│ │ │ ├── PROJECT
│ │ │ ├── README.md
│ │ │ ├── api/
│ │ │ │ └── v1alpha1/
│ │ │ │ ├── groupversion_info.go
│ │ │ │ ├── memcached_types.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ ├── bundle/
│ │ │ │ ├── manifests/
│ │ │ │ │ ├── cache.example.com_memcacheds.yaml
│ │ │ │ │ ├── memcached-operator-controller-manager-metrics-monitor_monitoring.coreos.com_v1_servicemonitor.yaml
│ │ │ │ │ ├── memcached-operator-controller-manager-metrics-service_v1_service.yaml
│ │ │ │ │ ├── memcached-operator-memcached-admin-role_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ │ │ ├── memcached-operator-memcached-editor-role_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ │ │ ├── memcached-operator-memcached-viewer-role_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ │ │ ├── memcached-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ │ │ ├── memcached-operator-webhook-service_v1_service.yaml
│ │ │ │ │ └── memcached-operator.clusterserviceversion.yaml
│ │ │ │ ├── metadata/
│ │ │ │ │ └── annotations.yaml
│ │ │ │ └── tests/
│ │ │ │ └── scorecard/
│ │ │ │ └── config.yaml
│ │ │ ├── bundle.Dockerfile
│ │ │ ├── cmd/
│ │ │ │ └── main.go
│ │ │ ├── config/
│ │ │ │ ├── certmanager/
│ │ │ │ │ ├── certificate-metrics.yaml
│ │ │ │ │ ├── certificate-webhook.yaml
│ │ │ │ │ ├── issuer.yaml
│ │ │ │ │ ├── kustomization.yaml
│ │ │ │ │ └── kustomizeconfig.yaml
│ │ │ │ ├── crd/
│ │ │ │ │ ├── bases/
│ │ │ │ │ │ └── cache.example.com_memcacheds.yaml
│ │ │ │ │ ├── kustomization.yaml
│ │ │ │ │ └── kustomizeconfig.yaml
│ │ │ │ ├── default/
│ │ │ │ │ ├── cert_metrics_manager_patch.yaml
│ │ │ │ │ ├── kustomization.yaml
│ │ │ │ │ ├── manager_metrics_patch.yaml
│ │ │ │ │ ├── manager_webhook_patch.yaml
│ │ │ │ │ └── metrics_service.yaml
│ │ │ │ ├── manager/
│ │ │ │ │ ├── kustomization.yaml
│ │ │ │ │ └── manager.yaml
│ │ │ │ ├── manifests/
│ │ │ │ │ ├── bases/
│ │ │ │ │ │ └── memcached-operator.clusterserviceversion.yaml
│ │ │ │ │ └── kustomization.yaml
│ │ │ │ ├── network-policy/
│ │ │ │ │ ├── allow-metrics-traffic.yaml
│ │ │ │ │ ├── allow-webhook-traffic.yaml
│ │ │ │ │ └── kustomization.yaml
│ │ │ │ ├── prometheus/
│ │ │ │ │ ├── kustomization.yaml
│ │ │ │ │ ├── monitor.yaml
│ │ │ │ │ └── monitor_tls_patch.yaml
│ │ │ │ ├── rbac/
│ │ │ │ │ ├── kustomization.yaml
│ │ │ │ │ ├── leader_election_role.yaml
│ │ │ │ │ ├── leader_election_role_binding.yaml
│ │ │ │ │ ├── memcached_admin_role.yaml
│ │ │ │ │ ├── memcached_editor_role.yaml
│ │ │ │ │ ├── memcached_viewer_role.yaml
│ │ │ │ │ ├── metrics_auth_role.yaml
│ │ │ │ │ ├── metrics_auth_role_binding.yaml
│ │ │ │ │ ├── metrics_reader_role.yaml
│ │ │ │ │ ├── role.yaml
│ │ │ │ │ ├── role_binding.yaml
│ │ │ │ │ └── service_account.yaml
│ │ │ │ ├── samples/
│ │ │ │ │ ├── cache_v1alpha1_memcached.yaml
│ │ │ │ │ └── kustomization.yaml
│ │ │ │ ├── scorecard/
│ │ │ │ │ ├── bases/
│ │ │ │ │ │ └── config.yaml
│ │ │ │ │ ├── kustomization.yaml
│ │ │ │ │ └── patches/
│ │ │ │ │ ├── basic.config.yaml
│ │ │ │ │ └── olm.config.yaml
│ │ │ │ └── webhook/
│ │ │ │ ├── kustomization.yaml
│ │ │ │ ├── kustomizeconfig.yaml
│ │ │ │ ├── manifests.yaml
│ │ │ │ └── service.yaml
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── hack/
│ │ │ │ └── boilerplate.go.txt
│ │ │ ├── internal/
│ │ │ │ ├── controller/
│ │ │ │ │ ├── memcached_controller.go
│ │ │ │ │ ├── memcached_controller_test.go
│ │ │ │ │ └── suite_test.go
│ │ │ │ └── webhook/
│ │ │ │ └── v1alpha1/
│ │ │ │ ├── memcached_webhook.go
│ │ │ │ ├── memcached_webhook_test.go
│ │ │ │ └── webhook_suite_test.go
│ │ │ └── test/
│ │ │ ├── e2e/
│ │ │ │ ├── e2e_suite_test.go
│ │ │ │ └── e2e_test.go
│ │ │ └── utils/
│ │ │ └── utils.go
│ │ └── monitoring/
│ │ └── memcached-operator/
│ │ ├── .devcontainer/
│ │ │ ├── devcontainer.json
│ │ │ └── post-install.sh
│ │ ├── .dockerignore
│ │ ├── .github/
│ │ │ └── workflows/
│ │ │ ├── lint.yml
│ │ │ ├── test-e2e.yml
│ │ │ └── test.yml
│ │ ├── .gitignore
│ │ ├── .golangci.yml
│ │ ├── Dockerfile
│ │ ├── Makefile
│ │ ├── PROJECT
│ │ ├── README.md
│ │ ├── api/
│ │ │ └── v1alpha1/
│ │ │ ├── groupversion_info.go
│ │ │ ├── memcached_types.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── bundle/
│ │ │ ├── manifests/
│ │ │ │ ├── cache.example.com_memcacheds.yaml
│ │ │ │ ├── memcached-operator-controller-manager-metrics-monitor_monitoring.coreos.com_v1_servicemonitor.yaml
│ │ │ │ ├── memcached-operator-controller-manager-metrics-service_v1_service.yaml
│ │ │ │ ├── memcached-operator-memcached-admin-role_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ │ ├── memcached-operator-memcached-editor-role_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ │ ├── memcached-operator-memcached-viewer-role_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ │ ├── memcached-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ │ ├── memcached-operator-prometheus-role-binding_rbac.authorization.k8s.io_v1_rolebinding.yaml
│ │ │ │ ├── memcached-operator-prometheus-role_rbac.authorization.k8s.io_v1_role.yaml
│ │ │ │ ├── memcached-operator-webhook-service_v1_service.yaml
│ │ │ │ └── memcached-operator.clusterserviceversion.yaml
│ │ │ ├── metadata/
│ │ │ │ └── annotations.yaml
│ │ │ └── tests/
│ │ │ └── scorecard/
│ │ │ └── config.yaml
│ │ ├── bundle.Dockerfile
│ │ ├── cmd/
│ │ │ └── main.go
│ │ ├── config/
│ │ │ ├── certmanager/
│ │ │ │ ├── certificate-metrics.yaml
│ │ │ │ ├── certificate-webhook.yaml
│ │ │ │ ├── issuer.yaml
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── kustomizeconfig.yaml
│ │ │ ├── crd/
│ │ │ │ ├── bases/
│ │ │ │ │ └── cache.example.com_memcacheds.yaml
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── kustomizeconfig.yaml
│ │ │ ├── default/
│ │ │ │ ├── cert_metrics_manager_patch.yaml
│ │ │ │ ├── kustomization.yaml
│ │ │ │ ├── manager_metrics_patch.yaml
│ │ │ │ ├── manager_webhook_patch.yaml
│ │ │ │ └── metrics_service.yaml
│ │ │ ├── manager/
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── manager.yaml
│ │ │ ├── manifests/
│ │ │ │ ├── bases/
│ │ │ │ │ └── memcached-operator.clusterserviceversion.yaml
│ │ │ │ └── kustomization.yaml
│ │ │ ├── network-policy/
│ │ │ │ ├── allow-metrics-traffic.yaml
│ │ │ │ ├── allow-webhook-traffic.yaml
│ │ │ │ └── kustomization.yaml
│ │ │ ├── prometheus/
│ │ │ │ ├── kustomization.yaml
│ │ │ │ ├── monitor.yaml
│ │ │ │ └── monitor_tls_patch.yaml
│ │ │ ├── rbac/
│ │ │ │ ├── kustomization.yaml
│ │ │ │ ├── leader_election_role.yaml
│ │ │ │ ├── leader_election_role_binding.yaml
│ │ │ │ ├── memcached_admin_role.yaml
│ │ │ │ ├── memcached_editor_role.yaml
│ │ │ │ ├── memcached_viewer_role.yaml
│ │ │ │ ├── metrics_auth_role.yaml
│ │ │ │ ├── metrics_auth_role_binding.yaml
│ │ │ │ ├── metrics_reader_role.yaml
│ │ │ │ ├── prometheus_role.yaml
│ │ │ │ ├── prometheus_role_binding.yaml
│ │ │ │ ├── role.yaml
│ │ │ │ ├── role_binding.yaml
│ │ │ │ └── service_account.yaml
│ │ │ ├── samples/
│ │ │ │ ├── cache_v1alpha1_memcached.yaml
│ │ │ │ └── kustomization.yaml
│ │ │ ├── scorecard/
│ │ │ │ ├── bases/
│ │ │ │ │ └── config.yaml
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patches/
│ │ │ │ ├── basic.config.yaml
│ │ │ │ └── olm.config.yaml
│ │ │ └── webhook/
│ │ │ ├── kustomization.yaml
│ │ │ ├── kustomizeconfig.yaml
│ │ │ ├── manifests.yaml
│ │ │ └── service.yaml
│ │ ├── docs/
│ │ │ └── monitoring/
│ │ │ ├── metrics.md
│ │ │ └── runbooks/
│ │ │ ├── memcachedDeploymentSizeUndesired.md
│ │ │ └── memcachedOperatorDown.md
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── hack/
│ │ │ └── boilerplate.go.txt
│ │ ├── internal/
│ │ │ ├── controller/
│ │ │ │ ├── memcached_controller.go
│ │ │ │ ├── memcached_controller_test.go
│ │ │ │ └── suite_test.go
│ │ │ └── webhook/
│ │ │ └── v1alpha1/
│ │ │ ├── memcached_webhook.go
│ │ │ ├── memcached_webhook_test.go
│ │ │ └── webhook_suite_test.go
│ │ ├── monitoring/
│ │ │ ├── alerts.go
│ │ │ ├── metrics.go
│ │ │ ├── metricsdocs/
│ │ │ │ └── metricsdocs.go
│ │ │ └── prom-rule-ci/
│ │ │ ├── prom-rules-tests.yaml
│ │ │ ├── rule-spec-dumper.go
│ │ │ └── verify-rules.sh
│ │ └── test/
│ │ ├── e2e/
│ │ │ ├── e2e_suite_test.go
│ │ │ └── e2e_test.go
│ │ └── utils/
│ │ └── utils.go
│ └── helm/
│ └── memcached-operator/
│ ├── .gitignore
│ ├── Dockerfile
│ ├── Makefile
│ ├── PROJECT
│ ├── bundle/
│ │ ├── manifests/
│ │ │ ├── cache.example.com_memcacheds.yaml
│ │ │ ├── memcached-operator-controller-manager-metrics-monitor_monitoring.coreos.com_v1_servicemonitor.yaml
│ │ │ ├── memcached-operator-controller-manager-metrics-service_v1_service.yaml
│ │ │ ├── memcached-operator-memcached-admin-role_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ ├── memcached-operator-memcached-editor-role_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ ├── memcached-operator-memcached-viewer-role_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ ├── memcached-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ └── memcached-operator.clusterserviceversion.yaml
│ │ ├── metadata/
│ │ │ └── annotations.yaml
│ │ └── tests/
│ │ └── scorecard/
│ │ └── config.yaml
│ ├── bundle.Dockerfile
│ ├── config/
│ │ ├── crd/
│ │ │ ├── bases/
│ │ │ │ └── cache.example.com_memcacheds.yaml
│ │ │ └── kustomization.yaml
│ │ ├── default/
│ │ │ ├── kustomization.yaml
│ │ │ ├── manager_metrics_patch.yaml
│ │ │ └── metrics_service.yaml
│ │ ├── manager/
│ │ │ ├── kustomization.yaml
│ │ │ └── manager.yaml
│ │ ├── manifests/
│ │ │ ├── bases/
│ │ │ │ └── memcached-operator.clusterserviceversion.yaml
│ │ │ └── kustomization.yaml
│ │ ├── network-policy/
│ │ │ ├── allow-metrics-traffic.yaml
│ │ │ └── kustomization.yaml
│ │ ├── prometheus/
│ │ │ ├── kustomization.yaml
│ │ │ └── monitor.yaml
│ │ ├── rbac/
│ │ │ ├── kustomization.yaml
│ │ │ ├── leader_election_role.yaml
│ │ │ ├── leader_election_role_binding.yaml
│ │ │ ├── memcached_admin_role.yaml
│ │ │ ├── memcached_editor_role.yaml
│ │ │ ├── memcached_viewer_role.yaml
│ │ │ ├── metrics_auth_role.yaml
│ │ │ ├── metrics_auth_role_binding.yaml
│ │ │ ├── metrics_reader_role.yaml
│ │ │ ├── role.yaml
│ │ │ ├── role_binding.yaml
│ │ │ └── service_account.yaml
│ │ ├── samples/
│ │ │ ├── cache_v1alpha1_memcached.yaml
│ │ │ └── kustomization.yaml
│ │ └── scorecard/
│ │ ├── bases/
│ │ │ └── config.yaml
│ │ ├── kustomization.yaml
│ │ └── patches/
│ │ ├── basic.config.yaml
│ │ └── olm.config.yaml
│ ├── helm-charts/
│ │ └── memcached/
│ │ ├── .helmignore
│ │ ├── Chart.yaml
│ │ ├── README.md
│ │ ├── templates/
│ │ │ ├── NOTES.txt
│ │ │ ├── _helpers.tpl
│ │ │ ├── pdb.yaml
│ │ │ ├── statefulset.yaml
│ │ │ └── svc.yaml
│ │ └── values.yaml
│ └── watches.yaml
├── tools/
│ ├── scripts/
│ │ └── fetch
│ └── tools.go
└── website/
├── assets/
│ └── scss/
│ ├── _breadcrumb.scss
│ ├── _docs.scss
│ ├── _footer.scss
│ ├── _functions.scss
│ ├── _global.scss
│ ├── _header.scss
│ ├── _homepage.scss
│ ├── _reset.scss
│ ├── _sidebar-tree.scss
│ ├── _styles_project.scss
│ ├── _type.scss
│ └── _variables.scss
├── config.toml
├── content/
│ └── en/
│ ├── _index.html
│ ├── build/
│ │ └── _index.html
│ ├── community/
│ │ └── _index.md
│ ├── docs/
│ │ ├── _index.md
│ │ ├── advanced-topics/
│ │ │ ├── _index.md
│ │ │ ├── custom-bundle-validation.md
│ │ │ ├── multi-arch.md
│ │ │ └── multi-sa.md
│ │ ├── best-practices/
│ │ │ ├── _index.md
│ │ │ ├── best-practices.md
│ │ │ ├── common-recommendation.md
│ │ │ ├── designing-lean-operators.md
│ │ │ ├── managing-resources.md
│ │ │ ├── multi-tenancy.md
│ │ │ ├── observability-best-practices.md
│ │ │ ├── pod-security-standards.md
│ │ │ └── resource-pruning.md
│ │ ├── building-operators/
│ │ │ ├── _index.md
│ │ │ ├── ansible/
│ │ │ │ ├── OWNERS
│ │ │ │ ├── _index.md
│ │ │ │ ├── development-tips.md
│ │ │ │ ├── installation.md
│ │ │ │ ├── migration.md
│ │ │ │ ├── quickstart.md
│ │ │ │ ├── reference/
│ │ │ │ │ ├── _index.md
│ │ │ │ │ ├── advanced_options.md
│ │ │ │ │ ├── ansible-base-images.md
│ │ │ │ │ ├── dependent-watches.md
│ │ │ │ │ ├── finalizers.md
│ │ │ │ │ ├── information-flow-ansible-operator.md
│ │ │ │ │ ├── internal_metrics.md
│ │ │ │ │ ├── proxy-vars.md
│ │ │ │ │ ├── retroactively-owned-resources.md
│ │ │ │ │ ├── scaffolding.md
│ │ │ │ │ ├── watches.md
│ │ │ │ │ └── webhooks.md
│ │ │ │ ├── testing-guide.md
│ │ │ │ └── tutorial.md
│ │ │ ├── golang/
│ │ │ │ ├── _index.md
│ │ │ │ ├── advanced-topics.md
│ │ │ │ ├── crds-scope.md
│ │ │ │ ├── installation.md
│ │ │ │ ├── migration.md
│ │ │ │ ├── operator-scope.md
│ │ │ │ ├── quickstart.md
│ │ │ │ ├── references/
│ │ │ │ │ ├── _index.md
│ │ │ │ │ ├── client.md
│ │ │ │ │ ├── event-filtering.md
│ │ │ │ │ ├── logging.md
│ │ │ │ │ ├── markers.md
│ │ │ │ │ ├── openapi-validation.md
│ │ │ │ │ └── proxy-vars.md
│ │ │ │ ├── testing.md
│ │ │ │ ├── tutorial.md
│ │ │ │ └── webhook.md
│ │ │ └── helm/
│ │ │ ├── _index.md
│ │ │ ├── installation.md
│ │ │ ├── migration.md
│ │ │ ├── quickstart.md
│ │ │ ├── reference/
│ │ │ │ ├── _index.md
│ │ │ │ ├── advanced_features/
│ │ │ │ │ ├── _index.md
│ │ │ │ │ ├── annotations.md
│ │ │ │ │ ├── max_concurrent_reconciles.md
│ │ │ │ │ └── override_values.md
│ │ │ │ ├── proxy-vars.md
│ │ │ │ └── watches.md
│ │ │ └── tutorial.md
│ │ ├── cli/
│ │ │ ├── _index.md
│ │ │ ├── operator-sdk.md
│ │ │ ├── operator-sdk_alpha.md
│ │ │ ├── operator-sdk_alpha_config-3alpha-to-3.md
│ │ │ ├── operator-sdk_alpha_generate.md
│ │ │ ├── operator-sdk_bundle.md
│ │ │ ├── operator-sdk_bundle_validate.md
│ │ │ ├── operator-sdk_cleanup.md
│ │ │ ├── operator-sdk_completion.md
│ │ │ ├── operator-sdk_completion_bash.md
│ │ │ ├── operator-sdk_completion_fish.md
│ │ │ ├── operator-sdk_completion_powershell.md
│ │ │ ├── operator-sdk_completion_zsh.md
│ │ │ ├── operator-sdk_create.md
│ │ │ ├── operator-sdk_create_api.md
│ │ │ ├── operator-sdk_create_webhook.md
│ │ │ ├── operator-sdk_edit.md
│ │ │ ├── operator-sdk_generate.md
│ │ │ ├── operator-sdk_generate_bundle.md
│ │ │ ├── operator-sdk_generate_kustomize.md
│ │ │ ├── operator-sdk_generate_kustomize_manifests.md
│ │ │ ├── operator-sdk_init.md
│ │ │ ├── operator-sdk_olm.md
│ │ │ ├── operator-sdk_olm_install.md
│ │ │ ├── operator-sdk_olm_status.md
│ │ │ ├── operator-sdk_olm_uninstall.md
│ │ │ ├── operator-sdk_pkgman-to-bundle.md
│ │ │ ├── operator-sdk_run.md
│ │ │ ├── operator-sdk_run_bundle-upgrade.md
│ │ │ ├── operator-sdk_run_bundle.md
│ │ │ ├── operator-sdk_scorecard.md
│ │ │ └── operator-sdk_version.md
│ │ ├── contribution-guidelines/
│ │ │ ├── _index.md
│ │ │ ├── changelog.md
│ │ │ ├── developer-guide.md
│ │ │ ├── documentation.md
│ │ │ ├── faq.md
│ │ │ ├── issue-lifecycle.md
│ │ │ ├── opening-pull-requests.md
│ │ │ ├── plugins.md
│ │ │ ├── releasing.md
│ │ │ ├── reporting-issues.md
│ │ │ └── testing.md
│ │ ├── faqs/
│ │ │ └── _index.md
│ │ ├── installation/
│ │ │ └── _index.md
│ │ ├── olm-integration/
│ │ │ ├── _index.md
│ │ │ ├── cli-overview.md
│ │ │ ├── generation.md
│ │ │ ├── quickstart-bundle.md
│ │ │ ├── testing-deployment.md
│ │ │ ├── tutorial-bundle.md
│ │ │ └── tutorial-package-manifests.md
│ │ ├── overview/
│ │ │ ├── _index.md
│ │ │ ├── cheat-sheet.md
│ │ │ ├── operator-capabilities.md
│ │ │ └── project-layout.md
│ │ ├── testing-operators/
│ │ │ ├── _index.md
│ │ │ └── scorecard/
│ │ │ ├── _index.md
│ │ │ ├── custom-tests.md
│ │ │ └── kuttl-tests.md
│ │ └── upgrading-sdk-version/
│ │ ├── _index.md
│ │ ├── backport-policy.md
│ │ ├── v0.1.0-migration-guide.md
│ │ ├── v0.18.0.md
│ │ ├── v0.19.0.md
│ │ ├── v1.0.0.md
│ │ ├── v1.1.0.md
│ │ ├── v1.10.0.md
│ │ ├── v1.11.0.md
│ │ ├── v1.12.0.md
│ │ ├── v1.13.0.md
│ │ ├── v1.14.0.md
│ │ ├── v1.15.0.md
│ │ ├── v1.16.0.md
│ │ ├── v1.17.0.md
│ │ ├── v1.18.0.md
│ │ ├── v1.19.0.md
│ │ ├── v1.2.0.md
│ │ ├── v1.20.0.md
│ │ ├── v1.21.0.md
│ │ ├── v1.22.0.md
│ │ ├── v1.23.0.md
│ │ ├── v1.24.0.md
│ │ ├── v1.25.0.md
│ │ ├── v1.26.0.md
│ │ ├── v1.27.0.md
│ │ ├── v1.28.0.md
│ │ ├── v1.29.0.md
│ │ ├── v1.3.0.md
│ │ ├── v1.30.0.md
│ │ ├── v1.31.0.md
│ │ ├── v1.32.0.md
│ │ ├── v1.33.0.md
│ │ ├── v1.34.0.md
│ │ ├── v1.35.0.md
│ │ ├── v1.36.0.md
│ │ ├── v1.37.0.md
│ │ ├── v1.38.0.md
│ │ ├── v1.39.0.md
│ │ ├── v1.39.1.md
│ │ ├── v1.39.2.md
│ │ ├── v1.4.0.md
│ │ ├── v1.40.0.md
│ │ ├── v1.41.0.md
│ │ ├── v1.42.0.md
│ │ ├── v1.42.1.md
│ │ ├── v1.42.2.md
│ │ ├── v1.5.0.md
│ │ ├── v1.6.0.md
│ │ ├── v1.6.1.md
│ │ ├── v1.7.0.md
│ │ ├── v1.7.1.md
│ │ ├── v1.8.0.md
│ │ ├── v1.9.0.md
│ │ └── version-upgrade-guide.md
│ └── search.md
├── layouts/
│ ├── 404.html
│ ├── _default/
│ │ ├── baseof.html
│ │ └── single.html
│ ├── build/
│ │ └── single.html
│ ├── docs/
│ │ ├── baseof.html
│ │ ├── list.html
│ │ └── single.html
│ ├── faq/
│ │ └── baseof.html
│ ├── index.html
│ ├── partials/
│ │ ├── footer.html
│ │ ├── head.html
│ │ ├── hooks/
│ │ │ ├── body-end.html
│ │ │ └── head-end.html
│ │ ├── navbar-version-selector.html
│ │ ├── navbar.html
│ │ ├── scripts.html
│ │ └── section-index.html
│ └── shortcodes/
│ ├── client-go-version.html
│ ├── kube-version.html
│ └── table.html
└── scripts/
├── set_menu_version.sh
├── update_branch_mappings.sh
├── update_download_url.sh
└── update_latest_release_compat.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: .ci/gpg/README.md
================================================
# SDK GPG Keys
## Current *key*pers
The keys are currently in the hands of [Joe Lanford](https://github.com/joelanford/).
## Transferring keys
In order to transfer the keys to other members of the Operator SDK admins, following the following:
1. get public GPG key from the person(s) you will transfer to
2. import their key into your keyring
```
gpg --import KEY
```
3. verify their identity, is this really their key. Video call can be useful for this.
4. sign their key
```
gpg --sign-key EMAIL-OF-USERS-KEY
```
5. export the SDK public key
```
gpg --export --armor -o 3B2F1481D146238080B346BB052996E2A20B5C7E.pub .asc 3B2F1481D146238080B346BB052996E2A20B5C7
```
6. export the SDK private key
```
gpg --export-secret-key --armor -o 3B2F1481D146238080B346BB052996E2A2 0B5C7E.priv.asc 3B2F1481D146238080B346BB052996E2A20B5C7E
```
7. export the SDK sub key
```
gpg --export-secret-subkeys --armor -o 3B2F1481D146238080B346BB052996 E2A20B5C7E.sub_priv.asc 3B2F1481D146238080B346BB052996E2A20B5C7E
```
8. encrypt each key for the person
```
gpg --encrypt --sign --armor -r EMAIL-OF-USERS-KEY --output 052996E2A20B5C7E.subkey.private.asc.enc 052996E2A20B5C7E.subkey.private.asc
```
9. send them the encrypted key to the user
10. user should be able to decrypt with their key.
## Updating expiration date
There will be a few people that have the keys. Those people should be able to update the expiration date. This won't have to be done until November 8, 2025.
You will want to update the date of the key:
```
gpg --edit-key (key id)
```
Once you're in the gpg console select the key , there are 2, you need to update both. I just pick a 3 year term.
```
gpg> expire
(follow prompts)
3y
gpg> save
```
You can use whatever term the team wants.
One of the resources I used: [How to change the expiration date of a GPG key](https://www.g-loaded.eu/2010/11/01/change-expiration-date-gpg-key/)
## Sending keys to keyserver
Once you have the keys updated, you should send them to a keyserver. I have a couple examples, not sure if both are needed.
```
gpg --keyserver keyserver.ubuntu.com --send-key 3B2F1481D146238080B346BB052996E2A20B5C7E
gpg --keyserver pgp.mit.edu --send-key 3B2F1481D146238080B346BB052996E2A20B5C7E
```
I *think* you only need to send it to one server, most of the commands in my shell history use `pgp.mit.edu`
## Updating secring.auto.gpg
Once you have the keys updated, you need to regenerate the keyrings that are stored in the [SDK repo](https://github.com/operator-framework/operator-sdk/tree/master/.ci/gpg).
Use the SDK key to sign and encrypt it. You need to use `--local-user` to avoid GPG from using your own key.
```
gpg --cipher-algo AES256 --output secring.auto.gpg --local-user "cncf-operator-sdk@cncf.io" --sign --symmetric 3B2F1481D146238080B346BB052996E2A20B5C7E.sub_priv.asc
```
## Updating pubring.auto
This is the public keyring. It's simply the public key. Export the public key then rename it as `pubring.auto`
```
gpg --export --armor -o 3B2F1481D146238080B346BB052996E2A20B5C7E.pub.asc 3B2F1481D146238080B346BB052996E2A20B5C7E
cp 3B2F1481D146238080B346BB052996E2A20B5C7E.pub.asc pubring.auto
```
## CI usage of keys
The GPG keys are stored in [.ci/gpg](https://github.com/operator-framework/operator-sdk/tree/master/.ci/gpg) of the Operator SDK repo.
In Github settings, there is a `GPG_PASSWORD` environment variable. It is set here in the [Environments](https://github.com/operator-framework/operator-sdk/settings/environments/172302554/edit) tab. You need to be admin.
The `GPG_PASSWORD` has been encrypted and handed to a few people. These people are the keepers of the password.
## Original process
The original keys were setup using the following article.
https://blogs.itemis.com/en/secure-your-travis-ci-releases-part-2-signature-with-openpgp
================================================
FILE: .ci/gpg/create-keyring.sh
================================================
#!/bin/bash
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
# Modified from https://blogs.itemis.com/en/secure-your-travis-ci-releases-part-2-signature-with-openpgp
function err_exit() {
echo "ERROR: ${1:-"Unknown Error"} Exiting." 1>&2
exit 1
}
declare -r GPG_HOME="${DIR}/keyring"
declare -r SECRING_AUTO="${GPG_HOME}/secring.auto"
declare -r PUBRING_AUTO="${GPG_HOME}/pubring.auto"
mkdir -p --mode 700 "$GPG_HOME"
cp "${DIR}"/*.auto* "${GPG_HOME}"
echo -e "\nImporting public keys..."
{ gpg --home "${GPG_HOME}" --import "${PUBRING_AUTO}" ; } || { err_exit "Could not import public key into gpg." ; }
echo "Success!"
echo -e "\nDecrypting secret key..."
{
# $GPG_PASSWORD is taken from the script's env (injected by CI).
echo $GPG_PASSWORD | gpg --home "${GPG_HOME}" --decrypt \
--pinentry-mode loopback --batch \
--passphrase-fd 0 \
--output "${SECRING_AUTO}" \
"${SECRING_AUTO}".gpg ; \
} || { err_exit "Failed to decrypt secret key." ; }
echo "Success!"
echo -e "\nImporting private keys..."
# { gpg --home "${GPG_HOME}" --import "${PUBRING_AUTO}" ; } || { err_exit "Could not import public key into gpg." ; }
{ gpg --home "${GPG_HOME}" --import "${SECRING_AUTO}" ; } || { err_exit "Could not import secret key into gpg." ; }
echo "Success!"
================================================
FILE: .ci/gpg/pubring.auto
================================================
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBF+clTQBEADMHVz8qS+dcYC0qxlSNe4Yipbr/BtVuWGJay26OAbS4K7sjzs3
XP+RhjUsJGOnPXn+N/zM6wVNczV7MrdfWNK1UAWBPVC4HjD/ysj/m5lMv/j0RNym
W6VNdSgV4YWyQHn6eD279gT4p6GAVvQj0eXnWtX7eA0SaITi6dMNqw8QcTOBxzFI
PXw+4MDJJKDAammtNKgj6LtmYc3o9d8aqbwtPfj3Vvi5d3SWfMx8a+2aSDkVcsva
bloGUBXYWFzO11T4OYvUYXgQdaKHyT+ZWGCpDsnQV/KqG5S456jmV+Qp+98vwe8k
XhXhlkjauhbvVR0uGAv0RJ4NZPSmWpie6f7ApQ3XTg3+ZvsrTvi3STCkOKA8/CLm
/xRhAF/aFZSOLlgzyAxr45j0PRjzX3XJfPePkV1D1cFso3JGDT5Y2oku8bNqYTof
fV/vw6jxylSNKApn1VyViwZ0+aE9kjMHXytKWWLK+woxrFOG74nGcI+xBOAOHvSU
GRh5EVXydbyMxqEpq2Su+rHlzfzgPh+hORNQgrag+qdbTVMimCoD+datX4854Hkb
nah+mq7RtI0k5Nn+ENm4ufbHEKiNb56qFTNgMkquG5vxpA6NOlZ0QfKUxiDU08+g
Pix7+TY7lzNhGipD7QjqfuJJr+1k3p/GrIpoHlU8/8FvlNYBDG3oMUvxNwARAQAB
tDJPcGVyYXRvciBTREsgKHJlbGVhc2UpIDxjbmNmLW9wZXJhdG9yLXNka0BjbmNm
LmlvPokCVAQTAQgAPhYhBDsvFIHRRiOAgLNGuwUpluKiC1x+BQJfnJU0AhsBBQkD
w7iABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEAUpluKiC1x+P5IQAJXpQMA1
kIr6S2N9A4TE6z+dhN0g3oPdZqOYwlKpX32H4nLdv219Ns1mwBHUfTFmcbUuQLwH
1TjF7cVya/tUoyh/P7bBBOy/vC0NvvaOuhRXxeJJD7Q8neuXyCpIoCW8x2Eq47ut
21AL79ZrzZEBpavJ80S2uNTx7HGKYug491OKkEWO3Y+FOmTV38WsN+lpM+atn1LP
gWkEhWaxwkfLrYUgZ/lDBAIhPZ7n3gYptmTQdCzlp4dSEwJXesV35aMWfJOM848M
fVJFyFcMNo6ww0tHD+7btrGc4fHSJC/dKZcYVoiSHmpuAqRBXHWMxKPfijgwWQs5
6JjxCWt4bwouF0D2uE6SD/MYsxN05yZL6OGfzzQES5Ilt0DS3QRLktN8PdeuS+WN
jLVo7/Q2SUGZcANm+5/ul7Qwj9JeFSK3VloLKY0YFEbnyTHw2TU4oDqyffUWTn+h
Pt34Wy+OWRM+2ykxFP1VklgCN07ESRSZOTN6iUzqets50rKpY3okNiZeMPcblxQo
uQ5/NFmYV/de87JuSmOKXB2yy/xdr7oxkbw9uYZmBEvw4etxH2yyzVxr0BJ4r0DW
5DlSxOeHaNa7aUVQnlK+Xf27Pj1XyYvV6G7NWEZYZQ/pclO0rhFH21ZiGo3DHgSo
cAGv6SWU01nELYYHTn3QFdmdjxmbqjSC0t+EiQJUBBMBCAA+AhsBBQsJCAcCBhUK
CQgLAgQWAgMBAh4BAheAFiEEOy8UgdFGI4CAs0a7BSmW4qILXH4FAmkUpkMFCQ8b
q48ACgkQBSmW4qILXH7MSw/+MniPUuEPYy42zuAHP1NGeHRJCWWzDRGwI5QML1LE
xqDmhzLAxLClZrSjDHRNFMNIYkIjzo1X858jIFgl8l5IdVfy/NZ2VkI46YP8rKFB
5L/2KJC+zVUF0x57vG72Dyt5fq77ytnSPqNKt7+hB5DlsjA2ZpCPZ9t1QTrw04jD
NpPjl2OmZKUwN6xh7bebb7RA+p+XmwhP0xKCcJtYbqOl3IdqrVz0Vz4ppvRIPlim
cVBHS2ufowjPQNR/iS6HGKyVfzMRNFWqP4nz67uzh1rK0vdBnCSf1vFJLFyKi2S+
OFUUQu2uKibq1n4jGgtY7YQO422GWr9jWyV9NrAgNT+FIKrozLoCjqgbvZpdglA5
s4CQbBxLXtlRFwTRtv1mZKraou7ybyip+CdB8mySmVmpYpUDv8ABEGReZKVgrI/y
8D4K+1TmdSvEkoUtuSjm/N/u4PtDZDFOCozEGGTvAjdpvFjdp2Bw3WNmWMNSnkJE
kqurCAlsqQTF+ckqcn2MrP9oE2v+GPyipN/sx60wNuoIB+xKT2RwO8kP7KBZl1D8
ppRq6oEMx+XJSoekAenR5vXWsV1ZYcG4I33FcwSOgRd842R5dEDG5mXJExBb8Jky
FbWqq/2uoRT0+AUitOUrd5so58EIvVBxeRYO2C+pJS0vkrbE916h9iVWwhOMsY5Y
FNa5Ag0EX5yWFgEQAKPVhCFIwrySnVagMvkCzbIWWWOZ2RdOti0wEuMueRRoqjEg
QZusH9p7KmH08LziIoYuscYLqs0F1WraacbIkJcop4kui8meinPf7ZtM6fKlo52T
VCGi8XDwJdExWGNF6EN709ZBheTZovuw++0uXlyXDaJQt2PGzYp8EbBKURXp5eMY
IVQZ8i8wRD+CNtMiJS2SGpowKwS7KsFqWI01+4Fiyac/mke+fvIj+QyI0Hx3QuYj
w8Jv7N3NlVu72YgPw/QTLLqKZt/DMi1/bU4/vyW8YFUbN3aYf8RjIGzAcRRuWoFx
v2ZpPPZjLzl1MVcpZTuf46MoIJik4rtJV99AV1HbKVS2/Ym8s4JH+AfVnRpzxkXY
MQj0L6jCxVL12oyT2Xindw15DOBGyE2qE714/2oZnUsiAQo57IublOBRw8uerj29
Lj94Kj6n5BrUVwYSz5vquojFLPLE3Gy/aVGZRD8DcFOhXfbUN7bN+vnW7WsklWlg
gS9sw9HKJyJnOQO78Plnl9HWfK2gVxG3eiwUgsjSWKW/OlLPGUeaczjzQkAOJOUo
bPphOdgbaatkIU7GuYCwD/IM7i/jUiLs7vPRwk7eXeZnV9uqoCqrIdTQQZzFg4CZ
8zxrNKvGPQw4zaN8YMw9aDeDdJdNciXqrJY5VRZ8/j5AGwesHIdNKkYKDJNbABEB
AAGJBHIEGAEIACYWIQQ7LxSB0UYjgICzRrsFKZbiogtcfgUCX5yWFgIbAgUJA8O4
gAJACRAFKZbiogtcfsF0IAQZAQgAHRYhBIYT24eluoJe8/0OviqFnQi/mIbbBQJf
nJYWAAoJECqFnQi/mIbbHdwP/0qoULqBuHM2ki9nbKuuLWXVIisH48q8J5lI5gOX
EMndiAC7/f53sTA6i8/wi4RvfjRHzDSiex1gMcIc4MKB1r4+79a9bHHn/BI5vJ3S
Qc8znlEvHkLlQc92W37IonRDCIw8XyACpUNeRzZciCEEgPjKQ/RXmt726DzuFV3Y
RieuQwNro36Ve2W/Om0VOMElV27et4ykvAepL8YCbGGDAXqRU/FlEdwwgovB4s3Y
mAZ3ZoVohAGP47jddE6Evmiv4X8TrTBzhlNSn9rxpHElGvOUeA0UFtXqiSfPBNBF
oHUIPRheMVkvaTmsQR+/J9eC4JMPJlOMmNi8I7QwPEv8oj1/ImlxT56e0ah3zc17
z3ddcJLZKZpNjcu9D6/97322uHibtK2g5DzGbpvXSwjpNuFuA85iC1M8vHDcGV1O
tTkemHP6y4+twfJsqffnuXtt/3JhN8q2ysAo9U4w0XtAR1HdSV2qgbOROjnmXiia
8xL3e1ZIb7DjtbtAgBCPBOWoPKNhWDfaXxeV8O1xHST5jo5uC4QxTC2yKQr4W+pV
LlkI8jK+/iQwIhrMyURahyx++sg2NDggjZb6hC/m8mY7JjfS08Qurfm1of2g4yO1
jcpZlWY/PDr4MZFMDZENH7uqba/eWCWLj03OL+JIG8N5VnFIEdFGMf84vtMpY35b
ALYjjBgP/iKjHX5Zwo+wj7vsdpQu+w+pr5tecptmJ2uypJ6Ns+cuDcz1qfaAOjR3
rZDGuckuX06G6E5tc/9vMKOtwySD2FgEAdpNdtG1WVIqldgTK7A7odhDtbIeVj3L
2ysci9xa4Gukj0qB3byuRPhBkHlYkP8KCPiSwkB75OxKZxx3DfMbc5ZZWzge6NCd
aeH41sETtzJiploHIqIOMve8o/7Rl+Mz9MXyedjvOqBKWNDFJxtbv/9TcaIH0MqD
Wv1MQzOZJMO6DC/u7aQz+Jk+Or529Swqoq7JfbdYMpEvLO6wOohYqxGuR36DW8F/
FJSFbDG3DPLLWsv+01xcYG4s7GNSK30uF2jCMVEb3dOzBpz9DxUY8QHleMGBE2Vb
29JiDD7nBMd/TVQFaARa0WGXpImcPq4COcwG126pcFeadxMDobPlcHWHvEzfakud
xYkYd+LFeIlw6Aapb4u/Vjd5o+oIU6bjJ9gN8Ev5Q3xjuxHdatXLVHpS3/xt/iwP
+LVTIE0pLN43mwGmLsqADrJjs+lUg3sftXVA3jUHD28AblZcI7y+ZjQagIxAAozm
nTiYy4GvqezDLVb3irq64g3CrqrXJx9hAnKgqFeJ8+F2JzAMxh65bto/tac8hvdX
B22UTIP7JwGxqTQmyr/7Kui/eleCt0t2UXY7i5Ovh+vApGXbx4YRiQRyBBgBCAAm
AhsCFiEEOy8UgdFGI4CAs0a7BSmW4qILXH4FAmkU5xUFCQ8b638CQMF0IAQZAQgA
HRYhBIYT24eluoJe8/0OviqFnQi/mIbbBQJfnJYWAAoJECqFnQi/mIbbHdwP/0qo
ULqBuHM2ki9nbKuuLWXVIisH48q8J5lI5gOXEMndiAC7/f53sTA6i8/wi4RvfjRH
zDSiex1gMcIc4MKB1r4+79a9bHHn/BI5vJ3SQc8znlEvHkLlQc92W37IonRDCIw8
XyACpUNeRzZciCEEgPjKQ/RXmt726DzuFV3YRieuQwNro36Ve2W/Om0VOMElV27e
t4ykvAepL8YCbGGDAXqRU/FlEdwwgovB4s3YmAZ3ZoVohAGP47jddE6Evmiv4X8T
rTBzhlNSn9rxpHElGvOUeA0UFtXqiSfPBNBFoHUIPRheMVkvaTmsQR+/J9eC4JMP
JlOMmNi8I7QwPEv8oj1/ImlxT56e0ah3zc17z3ddcJLZKZpNjcu9D6/97322uHib
tK2g5DzGbpvXSwjpNuFuA85iC1M8vHDcGV1OtTkemHP6y4+twfJsqffnuXtt/3Jh
N8q2ysAo9U4w0XtAR1HdSV2qgbOROjnmXiia8xL3e1ZIb7DjtbtAgBCPBOWoPKNh
WDfaXxeV8O1xHST5jo5uC4QxTC2yKQr4W+pVLlkI8jK+/iQwIhrMyURahyx++sg2
NDggjZb6hC/m8mY7JjfS08Qurfm1of2g4yO1jcpZlWY/PDr4MZFMDZENH7uqba/e
WCWLj03OL+JIG8N5VnFIEdFGMf84vtMpY35bALYjCRAFKZbiogtcfhHND/9A54vj
2qrbv58mlK0RLV3PQJPlYlD1uzWXqZi35197b+T8gm5YBJ7d2/Q50DolX2k04AcE
X4gklwaiV83EpZrMYKeqHrOot6H1FJ86oQmStRzVhgiWZjfCX8Ll4wDNOC0FsIus
O3kL6p4TNlPlg3rx+kELIYMSzGQipmBSziXC7Xm3/nFGPior1gfy+62SXlVV37zG
1LCJwVdx+0bgcv/OD9FQx7tOHvrvcJgRcwKq23ElnPQwTmlnqzp7B77Jy4E2QQ6U
fAo10fcjFu3yjyhTeuLkgei1uRJL7yKoWjok3kOGfxy6sJGY6BIpIHVtWDGWVK5r
SY+YR9MfnORd2PCEmaNF7mpOTf0Cn1JAXFrAFVYAWVXBQX4y1nx/9UlSi3C3gnpH
ExoFX5Kc/Cvwib4W9md5ZtGKszUAEDZv7Eb4G/o5pWP1C5dyuX8qP95+2Qlwxmom
40rm8Sk+RBlubBUxPeevxQXIATLPDEKStk/5guFzrOilbDeLaSJYS424eSpDGgvt
8fJjJxM2Rc+zmFob6vpKGFhGJCxSIFArRO9J3g0G1LGJj+38ZL+LWqcQbjqy2pEF
DaVoVyi9q09uZ/NOC/JDV+pbTOoShaWPYOoYE4F4A8EXkpRBhQxT6BYEvPLCgiCz
TsHpyxJ86L++bxtv9JhE6w19geq68spOgobXuw==
=pKuo
-----END PGP PUBLIC KEY BLOCK-----
================================================
FILE: .cncf-maintainers
================================================
approvers:
- OchiengEd
- acornett21
- anik120
- camilamacedo86
- grokspawn
- jberkhahn
- joelanford
- oceanc80
- rashmigottipati
reviewers:
- OchiengEd
- acornett21
- anik120
- camilamacedo86
- grokspawn
- jberkhahn
- joelanford
- oceanc80
- rashmigottipati
================================================
FILE: .github/ISSUE_TEMPLATE/bug-report.md
================================================
---
name: Bug Report
about: If things aren't working as expected.
title: ''
labels: ''
assignees: ''
---
## Bug Report
<!--
Thanks for filing an issue! Before hitting the button, please answer these questions.
Fill in as much of the template below as you can. If you leave out information, we can't help you as well.
Note: Make sure to first check the prerequisites that can be found in the main README.md file!
-->
#### What did you do?
<!-- A clear and concise description of the steps you took (or insert a code snippet). -->
#### What did you expect to see?
<!-- A clear and concise description of what you expected to happen (or insert a code snippet). -->
#### What did you see instead? Under which circumstances?
<!-- A clear and concise description of what ACTUALLY happened (or insert a code snippet). -->
#### Environment
**Operator type:**
<!-- Uncomment one or more of the following lines corresponding to the language of the operator type -->
<!-- /language go -->
<!-- /language ansible - For ansible operator related bugs, please create the issue in https://github.com/operator-framework/ansible-operator-plugins -->
<!-- /language helm -->
**Kubernetes cluster type:**
<!-- The type of cluster used for testing/deployment, ex. "vanilla", "OpenShift" -->
`$ operator-sdk version`
<!-- Insert the output of `operator-sdk version` here. -->
`$ go version` (if language is Go)
<!-- Insert the output of `go version` here -->
`$ kubectl version`
<!-- Insert the output of `kubectl version` here -->
#### Possible Solution
<!-- Only if you have suggestions on a fix for the bug -->
#### Additional context
<!-- Add any other context about the problem here. -->
================================================
FILE: .github/ISSUE_TEMPLATE/doc-report.md
================================================
---
name: Doc Report
about: Raise an issue with the documentation.
title: ''
labels: kind/documentation
assignees: ''
---
<!-- Please submit only documentation-related issues with this form, or follow the
Contribute to Operator SDK guidelines (https://sdk.operatorframework.io/docs/contribution-guidelines/reporting-issues/) to submit a PR. Use this template while reporting a bug and provide as much info as possible. Not doing so may result in your bug not being addressed in a timely manner. Thanks!
-->
### What is the URL of the document?
<!-- The URL to help identify the document. -->
### Which section(s) is the issue in?
<!-- The sections(s) within the document that have issue in. -->
### What needs fixing?
<!-- A clear and concise description of what the issue is. -->
#### Additional context
<!-- Add any other context about the problem here. -->
================================================
FILE: .github/ISSUE_TEMPLATE/feature-request.md
================================================
---
name: Feature Request
about: Suggest a feature
title: ''
labels: ''
assignees: ''
---
## Feature Request
#### Describe the problem you need a feature to resolve.
<!--
A clear and concise description of what the problem is. Example:
I have an issue when ...
-->
#### Describe the solution you'd like.
<!-- A clear and concise description of what you want to happen. Add any considered drawbacks. -->
<!-- If your request relates to a particular operator type, uncomment one or more of the following lines corresponding to the language of that type -->
<!-- /language go -->
<!-- /language ansible For ansible operator related feature requests, please create the issue in https://github.com/operator-framework/ansible-operator-plugins -->
<!-- /language helm -->
================================================
FILE: .github/ISSUE_TEMPLATE/support-question.md
================================================
---
name: Support Question
about: Any support questions you might have.
title: ''
labels: ''
assignees: ''
---
<!--
Thanks for filing an issue! Before hitting the button, please answer these questions.
Fill in as much of the template below as you can. If you leave out information, we can't help you as well.
We will try our best to answer the question, but we also have a mailing list and slack channel for any other questions.
-->
## Type of question
<!-- Uncomment one or more of the following lines depending on what you are asking about: -->
<!-- Best practices -->
<!-- How to implement a specific feature -->
<!-- General operator-related help -->
<!-- Open question -->
## Question
#### What did you do?
<!-- A clear and concise description of the steps you took (or insert a code snippet). -->
#### What did you expect to see?
<!-- A clear and concise description of what you expected to happen (or insert a code snippet). -->
#### What did you see instead? Under which circumstances?
<!-- A clear and concise description of what you expected to happen (or insert a code snippet). -->
#### Environment
**Operator type:**
<!-- Uncomment one or more of the following lines corresponding to the language of the operator type -->
<!-- /language go -->
<!-- /language ansible - For ansible operator related questions, please create the issue in https://github.com/operator-framework/ansible-operator-plugins -->
<!-- /language helm -->
**Kubernetes cluster type:**
<!-- The type of cluster used for testing/deployment, ex. "vanilla", "OpenShift" -->
`$ operator-sdk version`
<!-- Insert the output of `operator-sdk version` here. -->
`$ go version` (if language is Go)
<!-- Insert the output of `go version` here -->
`$ kubectl version`
<!-- Insert the output of `kubectl version` here -->
#### Additional context
<!-- Add any other context about the question here. -->
================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
<!---
Thanks for filing an issue! Before you submit, please read the following:
Check the other issue templates if you are trying to submit a bug report, feature request, or question. Search open/closed issues before submitting since someone might have asked the same thing before!
For ansible operator related requests, please create the issue in https://github.com/operator-framework/ansible-operator-plugins
-->
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!--
Welcome to the Operator SDK! Before contributing, make sure to:
- Read the contributing guidelines https://github.com/operator-framework/operator-sdk/blob/master/CONTRIBUTING.MD
- Rebase your branch on the latest upstream master
- Link any relevant issues, PR's, or documentation
- Check that the commit message is concice and helpful:
- When fixing an issue, add "Closes #<ISSUE_NUMBER>"
- Sign your commit https://github.com/apps/dco
- Follow the below checklist if making a user-facing change
Note, the location for ansible operator related logic has changed. For ansible operator related changes, please create the Pull Request in https://github.com/operator-framework/ansible-operator-plugins
-->
**Description of the change:**
**Motivation for the change:**
**Checklist**
If the pull request includes user-facing changes, extra documentation is required:
- [ ] Add a new changelog fragment in `changelog/fragments` (see [`changelog/fragments/00-template.yaml`](https://github.com/operator-framework/operator-sdk/tree/master/changelog/fragments/00-template.yaml))
- [ ] Add or update relevant sections of the docs website in [`website/content/en/docs`](https://github.com/operator-framework/operator-sdk/tree/master/website/content/en/docs)
================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: docker
directory: "/images/custom-scorecard-tests"
schedule:
interval: daily
- package-ecosystem: docker
directory: "/images/helm-operator"
schedule:
interval: daily
- package-ecosystem: docker
directory: "/images/operator-sdk"
schedule:
interval: daily
- package-ecosystem: docker
directory: "/images/scorecard-test"
schedule:
interval: daily
- package-ecosystem: docker
directory: "/images/scorecard-test-kuttl"
schedule:
interval: daily
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: daily
================================================
FILE: .github/workflows/check-docs-only.sh
================================================
#!/usr/bin/env bash
set -e
# If running in Github actions: this should be set to "github.base_ref".
: ${1?"the first argument must be set to a commit-ish reference"}
# Patterns to ignore.
declare -a DOC_PATTERNS
DOC_PATTERNS=(
"(\.md)"
"(\.MD)"
"(\.png)"
"(\.pdf)"
"(netlify\.toml)"
"(website/)"
"(changelog/)"
"(OWNERS)"
"(OWNERS_ALIASES)"
"(LICENSE)"
)
if ! git diff --name-only $1 | grep -qvE "$(IFS="|"; echo "${DOC_PATTERNS[*]}")"; then
echo "true"
exit 0
fi
================================================
FILE: .github/workflows/clean-unused-disk-space.sh
================================================
#!/usr/bin/env bash
set -e
echo "Removing unused system files to gain more disk space"
rm -fr /opt/hostedtoolcache
cd /opt
find . -maxdepth 1 -mindepth 1 '!' -path ./containerd '!' -path ./actionarchivecache '!' -path ./runner '!' -path ./runner-cache -exec rm -rf '{}' ';'
================================================
FILE: .github/workflows/deploy.yml
================================================
name: deploy
on:
push:
branches:
- '**'
- '!dependabot/**'
tags:
- 'v*'
- 'scorecard-kuttl/v*'
pull_request:
branches: [ master ]
jobs:
check_docs_only:
name: check_docs_only
runs-on: ubuntu-24.04
outputs:
skip: ${{ steps.check_docs_only.outputs.skip }}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- id: check_docs_only
# Since PR's are squashed prior to merging to the branch checked out (default branch),
# HEAD^ will resolve to the previous point in history.
run: |
REF="HEAD^"
[[ -z "${{ github.base_ref }}" ]] || REF=$(git show-ref ${{ github.base_ref }} | head -1 | cut -d' ' -f2)
echo "skip=$(.github/workflows/check-docs-only.sh $REF)" >> $GITHUB_OUTPUT
# Job to test release steps. This will only create a release remotely if run on a tagged commit.
goreleaser:
name: goreleaser
needs: check_docs_only
# Run this job on a tag like 'vX.Y.Z' or on a branch or pull request with code changes.
if: startsWith(github.ref, 'refs/tags/v') || ( needs.check_docs_only.outputs.skip != 'true' && !startsWith(github.ref, 'refs/tags/') )
runs-on: ubuntu-24.04
environment: deploy
steps:
- name: checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: install
uses: actions/setup-go@v6
with:
go-version-file: "go.mod"
- name: gpg init
if: ${{ github.event_name != 'pull_request' }}
run: .ci/gpg/create-keyring.sh
env:
GPG_PASSWORD: ${{ secrets.GPG_PASSWORD }}
- name: release
run: |
if [[ $GITHUB_REF != refs/tags/v* ]]; then
export DRY_RUN=1
fi
make release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Job matrix for image builds. Only pushes if a tag with prefix "v" is present.
images:
name: images
needs: check_docs_only
# Run this job on a tag like 'vX.Y.Z' or on a branch or pull request with code changes.
if: startsWith(github.ref, 'refs/tags/v') || ( needs.check_docs_only.outputs.skip != 'true' && !startsWith(github.ref, 'refs/tags/') )
runs-on: ubuntu-24.04
environment: deploy
strategy:
matrix:
id: ["operator-sdk", "helm-operator", "scorecard-test"]
steps:
- name: set up qemu
uses: docker/setup-qemu-action@v4
- name: set up buildx
uses: docker/setup-buildx-action@v4
- name: quay.io login
if: ${{ github.event_name != 'pull_request' }}
uses: docker/login-action@v4
with:
username: ${{ secrets.QUAY_USERNAME }}
password: ${{ secrets.QUAY_PASSWORD }}
registry: quay.io
# Check out repo before tag step for script.
- name: checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: create tags
id: tags
run: |
IMG=quay.io/${{ github.repository_owner }}/${{ matrix.id }}
echo tags=$(.github/workflows/get_image_tags.sh "$IMG" "v") >> $GITHUB_OUTPUT
- name: build and push
uses: docker/build-push-action@v7
with:
file: ./images/${{ matrix.id }}/Dockerfile
context: .
platforms: linux/amd64,linux/arm64,linux/ppc64le,linux/s390x
# Push on tag, or master or latest branch push.
push: ${{ (github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/latest')) }}
tags: ${{ steps.tags.outputs.tags }}
# scorecard-test-kuttl image build job. Only pushes if a tag with prefix "scorecard-kuttl/v" is present.
image-scorecard-test-kuttl:
name: image-scorecard-test-kuttl
needs: check_docs_only
# Run this job on a tag like 'scorecard-kuttl/vX.Y.Z' or on a branch or pull request with code changes.
if: startsWith(github.ref, 'refs/tags/scorecard-kuttl/v') || ( needs.check_docs_only.outputs.skip != 'true' && !startsWith(github.ref, 'refs/tags/') )
runs-on: ubuntu-24.04
environment: deploy
steps:
- name: set up qemu
uses: docker/setup-qemu-action@v4
- name: set up buildx
uses: docker/setup-buildx-action@v4
- name: quay.io login
if: ${{ github.event_name != 'pull_request' }}
uses: docker/login-action@v4
with:
username: ${{ secrets.QUAY_USERNAME }}
password: ${{ secrets.QUAY_PASSWORD }}
registry: quay.io
# Check out repo before tag step for script.
- name: checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: create tags
id: tags
run: |
IMG=quay.io/${{ github.repository_owner }}/scorecard-test-kuttl
echo tags=$(.github/workflows/get_image_tags.sh "$IMG" "scorecard-kuttl/v") >> $GITHUB_OUTPUT
- name: build and push
uses: docker/build-push-action@v7
with:
file: ./images/scorecard-test-kuttl/Dockerfile
context: .
# s390x is not supported by the scorecard-test-kuttl base image.
platforms: linux/amd64,linux/arm64,linux/ppc64le
# Push on tag, or master branch push.
push: ${{ (github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master')) }}
tags: ${{ steps.tags.outputs.tags }}
================================================
FILE: .github/workflows/freshen-images/build.sh
================================================
#!/usr/bin/env bash
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
source ${DIR}/lib.sh
set -eu
set -o pipefail
# Comma-separated list of build platforms, ex. linux/s390x.
# See 'docker buildx build --help' for --platform flag info.
DEFAULT_PLATFORMS="linux/amd64,linux/arm64,linux/ppc64le,linux/s390x"
# TODO(estroz): support scorecard-test-kuttl rebuilds.
# DEFAULT_SCORECARD_KUTTL_PLATFORMS="linux/amd64,linux/arm64,linux/ppc64le"
PLATFORMS=
# Time window to compare image creation times against, relative to now.
# --timespan should be set to this duration in seconds.
DEFAULT_TIMESPAN=86400 # 24 hours in seconds
TIMESPAN=
# What to do with the image, either load (default) or push.
IMAGE_DO=--load
# Space-separated list of git tags.
# The --tags arg can be comma-separated.
TAGS=
# ID of the image, ex. operator-sdk.
IMAGE_ID=
# Update all images.
FORCE=0
while [[ $# -gt 0 ]]; do
case $1 in
--push)
IMAGE_DO=$1
;;
--force)
FORCE=1
;;
--tags)
TAGS=($(echo $2 | sed -E 's/,/ /g'))
shift
;;
--image-id)
IMAGE_ID=$2
shift
;;
--platforms)
PLATFORMS=$2
shift
;;
--timespan)
TIMESPAN=$2
shift
;;
*) echo "Invalid flag $1"; exit 1 ;;
esac
shift
done
: ${IMAGE_ID:?--image-id is required}
: ${TAGS:?--tags is required}
# Set defaults.
case $IMAGE_ID in
scorecard-test-kuttl)
# TODO(estroz): support scorecard-test-kuttl rebuilds.
# PLATFORMS=${PLATFORMS:-$DEFAULT_SCORECARD_KUTTL_PLATFORMS}
echo "$IMAGE_ID is not supported"
exit 1
;;
*)
PLATFORMS=${PLATFORMS:-$DEFAULT_PLATFORMS}
;;
esac
TIMESPAN=${TIMESPAN:-$DEFAULT_TIMESPAN}
# Clone the operator-sdk repo into a temp dir with cleanup.
tmp=$(mktemp -d --tmpdir freshen-images-tmp.XXXXXX)
git clone https://github.com/operator-framework/operator-sdk.git $tmp
trap "rm -rf $tmp" EXIT
pushd $tmp
# Build the image defined by IMAGE_ID for each tag for a set of platforms.
for i in ${!TAGS[*]}; do
if (($i=0)); then
build_generic ${TAGS[$i]} $IMAGE_ID "$PLATFORMS" true
else
build_generic ${TAGS[$i]} $IMAGE_ID "$PLATFORMS" false
fi
done
popd
================================================
FILE: .github/workflows/freshen-images/lib.sh
================================================
#!/usr/bin/env bash
# _buildx runs "docker buildx build" in CI-output mode.
function _buildx() {
echo -e "\n$ docker buildx build --progress plain $@"
docker buildx build --progress plain $@
}
# _pull runs "docker pull".
function _pull() {
echo -e "\n$ docker pull $@"
docker pull $@
}
# cmp_times returns false if time $2 occurred within some timespan defined by TIMESPAN
# relative to time $1.
function cmp_times() {
local base_seconds=$(date -d "$1" +%s)
local img_time_seconds=$(date -d "$2" +%s)
if (( $base_seconds - $TIMESPAN < $img_time_seconds )) || (( $FORCE )); then
# return false
return 1
fi
# return true
return 0
}
# is_dockerfile_fresh returns false if at least one image in a "FROM" directive
# in the Dockerfile at $1 has been freshly built within TIMESPAN relative to now,
# or FORCE=1.
function is_dockerfile_fresh() {
local dockerfile=$1
# Strip flag from FROM to get image, which always precedes this flag if set.
local docker_images=$(grep -oP "FROM (--platform=[^ ]+ )?\K([^ ]+)" $dockerfile)
for img in $docker_images; do
_pull $img
local img_create_time=$(docker inspect --format '{{.Created}}' $img)
if [[ "$img_create_time" == "0001-01-01T00:00:00Z" ]]; then
echo "image creation time could be found for $img"
exit 1
fi
if ! cmp_times "$(date)" "$img_create_time"; then
# return false
echo "is_dockerfile_fresh returning 1 (false) for [$img]"
return 1
fi
done
}
# Build an image at path ./images/$2/Dockerfile checked out at git tag $1
# for all platforms in $3. Tag is assumed to be "v"+semver; the image is tagged
# with the full semver string and with "v${major}.${minor}".
# The build will only run if the Dockerfile is not fresh.
function build_generic() {
local tag=$1
local id=$2
local platforms=$3
local buildlatest=$4
local tag_maj_min="quay.io/operator-framework/${id}:$(echo $tag | grep -Eo "v[1-9]+\.[0-9]+")"
local tag_full="quay.io/operator-framework/${id}:${tag}"
local tag_latest="quay.io/operator-framework/${id}:latest"
local dockerfile=./images/${id}/Dockerfile
git checkout refs/tags/$tag
if is_dockerfile_fresh "$dockerfile"; then
echo "Skipping build of $dockerfile, it is FRESH!"
else
# dockerfile is not fresh, rebuildng image
if $buildlatest; then
echo "Rebuilding image [$tag_maj_min] and latest for [$platforms]"
_buildx --builder=container --tag "$tag_maj_min" --tag "$tag_full" --tag "$tag_latest" --platform "$platforms" --file "$dockerfile" $IMAGE_DO .
else
echo "Rebuilding image [$tag_maj_min] for [$platforms]"
_buildx --builder=container --tag "$tag_maj_min" --tag "$tag_full" --platform "$platforms" --file "$dockerfile" $IMAGE_DO .
fi
fi
}
================================================
FILE: .github/workflows/freshen-images/tags.sh
================================================
#!/usr/bin/env bash
set -eu
set -o pipefail
# Major version to select (default 1).
MAJ=${1:-1}
# Number of minor versions to select (default 2).
NUM_MINORS=${2:-2}
# Get unique "v${major}.${minor}" tags, then add the greatest patch version for each
# to a list.
declare -a LATEST_GIT_TAGS
for tag in $(git tag --sort=-v:refname -l "v${MAJ}.*" | grep -Eo "v${MAJ}\.[^\.]+" | uniq | head -n $NUM_MINORS); do
LATEST_GIT_TAGS+=( $(git tag --sort=-v:refname -l "$tag*" | head -n 1) )
done
# Print tags in comma-separated form.
echo ${LATEST_GIT_TAGS[@]} | sed -E 's/[ ]+/,/g'
================================================
FILE: .github/workflows/freshen-images.yml
================================================
name: freshen-images
on:
workflow_dispatch:
inputs:
force:
description: Force rebuild of all images.
default: ''
required: false
schedule:
# Run at 11 am UTC every day.
- cron: '0 11 * * *'
jobs:
git_tags:
runs-on: ubuntu-24.04
outputs:
git_tags: ${{ steps.tags.outputs.git_tags }}
steps:
- name: checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- id: tags
run: echo "git_tags=$(.github/workflows/freshen-images/tags.sh)" >> $GITHUB_OUTPUT
build:
name: build
needs: git_tags
runs-on: ubuntu-24.04
environment: deploy
strategy:
matrix:
# TODO(estroz): support scorecard-test-kuttl rebuilds.
id: ["operator-sdk", "helm-operator", "scorecard-test"]
steps:
- name: set up qemu
uses: docker/setup-qemu-action@v4
- name: set up buildx
uses: docker/setup-buildx-action@v4
- name: quay.io login
uses: docker/login-action@v4
with:
username: ${{ secrets.QUAY_USERNAME }}
password: ${{ secrets.QUAY_PASSWORD }}
registry: quay.io
- name: checkout
uses: actions/checkout@v6
with:
fetch-depth: 1
- name: build and push
id: build_ids
run: |
.github/workflows/freshen-images/build.sh --push \
--image-id ${{ matrix.id }} \
--tags ${{ needs.git_tags.outputs.git_tags }} \
${{ github.event.inputs.force != '' && '--force' || '' }}
================================================
FILE: .github/workflows/get_image_tags.sh
================================================
#!/usr/bin/env bash
IMG="$1"
TAG_PREFIX="$2"
: ${IMG:?"\$1 must be set to an image tag"}
: ${TAG_PREFIX:?"\$2 must be set to some tag prefix to pass to refs/tags/{prefix}*"}
: ${GITHUB_REF:?"GITHUB_REF must be set to a git 'refs/' path in the environment (typically set by the Actions runner)"}
if [[ $GITHUB_REF == refs/tags/${TAG_PREFIX}* ]]; then
# Release tags.
TAG="${GITHUB_REF#refs/tags/${TAG_PREFIX}}"
# Prepend "v" if removed by the above variable operation, since $TAG should always be semver.
[[ $TAG == v* ]] || TAG="v${TAG}"
MAJOR_MINOR="${TAG%.*}"
echo "${IMG}:${TAG},${IMG}:${MAJOR_MINOR}"
elif [[ $GITHUB_REF == refs/tags/* ]]; then
# Any other tag, which will not be pushed.
TAG="$(echo "${GITHUB_REF#refs/tags/}" | sed -r 's|/+|-|g')-local"
echo "${IMG}:${TAG}"
elif [[ $GITHUB_REF == refs/heads/* ]]; then
# Branch build.
TAG="$(echo "${GITHUB_REF#refs/heads/}" | sed -r 's|/+|-|g')"
echo "${IMG}:${TAG}"
elif [[ $GITHUB_REF == refs/pull/* ]]; then
# PR build.
TAG="pr-$(echo "${GITHUB_REF}" | sed -E 's|refs/pull/([^/]+)/?.*|\1|')"
echo "${IMG}:${TAG}"
fi
================================================
FILE: .github/workflows/integration.yml
================================================
name: integration
on:
pull_request: {}
jobs:
check_docs_only:
name: check_docs_only
runs-on: ubuntu-24.04
outputs:
skip: ${{ steps.check_docs_only.outputs.skip }}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- id: check_docs_only
# Since PR's are squashed prior to merging to the branch checked out (default branch),
# HEAD^ will resolve to the previous point in history.
run: |
REF="HEAD^"
[[ -z "${{ github.base_ref }}" ]] || REF=$(git show-ref ${{ github.base_ref }} | head -1 | cut -d' ' -f2)
echo "skip=$(.github/workflows/check-docs-only.sh $REF)" >> $GITHUB_OUTPUT
integration:
name: integration
runs-on: ubuntu-24.04
needs: check_docs_only
if: needs.check_docs_only.outputs.skip != 'true'
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Cleanup Unused Disk Space
run: |
.github/workflows/clean-unused-disk-space.sh
- uses: actions/setup-go@v6
with:
go-version-file: "go.mod"
- run: make test-e2e-integration
================================================
FILE: .github/workflows/markdown-link-check-config.json
================================================
{
"ignorePatterns": [
{ "pattern": "^https://github.com/.+" },
{ "pattern": "^mailto:" }
],
"httpHeaders": [
{
"urls": ["https://docs.github.com"],
"headers": {
"User-Agent": "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:98.0) Gecko/20100101 Firefox/98.0"
}
}
]
}
================================================
FILE: .github/workflows/olm-check.yml
================================================
name: olm-check
on:
pull_request:
branches:
- 'release-*'
workflow_dispatch:
jobs:
check-olm-minor-releases:
name: check-olm-minor-releases
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- id: run-check-olm
run: ./hack/check-olm.sh
================================================
FILE: .github/workflows/rerun.yml
================================================
on:
issue_comment:
types: [created]
jobs:
rerun_tests:
name: rerun_pr_tests
if: ${{ github.event.issue.pull_request }}
runs-on: ubuntu-24.04
steps:
- uses: operator-framework/rerun-actions@v0.4.0
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
comment_id: ${{ github.event.comment.id }}
================================================
FILE: .github/workflows/test-go.yml
================================================
name: go
on:
pull_request: {}
env:
MEMCACHED_IMAGE: "memcached:1.4.36-alpine"
jobs:
check_docs_only:
name: check_docs_only
runs-on: ubuntu-24.04
outputs:
skip: ${{ steps.check_docs_only.outputs.skip }}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- id: check_docs_only
# Since PR's are squashed prior to merging to the branch checked out (default branch),
# HEAD^ will resolve to the previous point in history.
run: |
REF="HEAD^"
[[ -z "${{ github.base_ref }}" ]] || REF=$(git show-ref ${{ github.base_ref }} | head -1 | cut -d' ' -f2)
echo "skip=$(.github/workflows/check-docs-only.sh $REF)" >> $GITHUB_OUTPUT
e2e:
name: e2e
runs-on: ubuntu-24.04
needs: check_docs_only
if: needs.check_docs_only.outputs.skip != 'true'
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Cleanup Unused Disk Space
run: |
.github/workflows/clean-unused-disk-space.sh
- uses: actions/setup-go@v6
with:
go-version-file: "go.mod"
- run: sudo rm -rf /usr/local/bin/kustomize
- run: make test-e2e-go
unit:
name: unit
runs-on: ubuntu-24.04
needs: check_docs_only
if: needs.check_docs_only.outputs.skip != 'true'
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Cleanup Unused Disk Space
run: |
.github/workflows/clean-unused-disk-space.sh
- uses: actions/setup-go@v6
with:
go-version-file: "go.mod"
- run: make test-unit
- uses: shogo82148/actions-goveralls@v1
with:
path-to-profile: coverage.out
================================================
FILE: .github/workflows/test-helm.yml
================================================
name: helm
on:
pull_request: {}
jobs:
check_docs_only:
name: check_docs_only
runs-on: ubuntu-24.04
outputs:
skip: ${{ steps.check_docs_only.outputs.skip }}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- id: check_docs_only
# Since PR's are squashed prior to merging to the branch checked out (default branch),
# HEAD^ will resolve to the previous point in history.
run: |
REF="HEAD^"
[[ -z "${{ github.base_ref }}" ]] || REF=$(git show-ref ${{ github.base_ref }} | head -1 | cut -d' ' -f2)
echo "skip=$(.github/workflows/check-docs-only.sh $REF)" >> $GITHUB_OUTPUT
e2e:
name: e2e
runs-on: ubuntu-24.04
needs: check_docs_only
if: needs.check_docs_only.outputs.skip != 'true'
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Cleanup Unused Disk Space
run: |
.github/workflows/clean-unused-disk-space.sh
- uses: actions/setup-go@v6
with:
go-version-file: "go.mod"
- run: sudo rm -rf /usr/local/bin/kustomize
- run: make test-e2e-helm
================================================
FILE: .github/workflows/test-sample-go.yml
================================================
name: memcached-sample
on:
pull_request: {}
jobs:
check_docs_only:
name: check_docs_only
runs-on: ubuntu-24.04
outputs:
skip: ${{ steps.check_docs_only.outputs.skip }}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- id: check_docs_only
# Since PR's are squashed prior to merging to the branch checked out (default branch),
# HEAD^ will resolve to the previous point in history.
run: |
REF="HEAD^"
[[ -z "${{ github.base_ref }}" ]] || REF=$(git show-ref ${{ github.base_ref }} | head -1 | cut -d' ' -f2)
echo "skip=$(.github/workflows/check-docs-only.sh $REF)" >> $GITHUB_OUTPUT
e2e:
name: e2e
runs-on: ubuntu-24.04
needs: check_docs_only
if: needs.check_docs_only.outputs.skip != 'true'
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Cleanup Unused Disk Space
run: |
.github/workflows/clean-unused-disk-space.sh
- uses: actions/setup-go@v6
with:
go-version-file: "go.mod"
- run: sudo rm -rf /usr/local/bin/kustomize
- run: make test-e2e-sample-go
================================================
FILE: .github/workflows/test-sanity.yml
================================================
name: sanity
on:
pull_request: {}
jobs:
check_docs_only:
name: check_docs_only
runs-on: ubuntu-24.04
outputs:
skip: ${{ steps.check_docs_only.outputs.skip }}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- id: check_docs_only
# Since PR's are squashed prior to merging to the branch checked out (default branch),
# HEAD^ will resolve to the previous point in history.
run: |
REF="HEAD^"
[[ -z "${{ github.base_ref }}" ]] || REF=$(git show-ref ${{ github.base_ref }} | head -1 | cut -d' ' -f2)
echo "skip=$(.github/workflows/check-docs-only.sh $REF)" >> $GITHUB_OUTPUT
sanity:
name: sanity
runs-on: ubuntu-24.04
needs: check_docs_only
if: needs.check_docs_only.outputs.skip != 'true'
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Cleanup Unused Disk Space
run: |
.github/workflows/clean-unused-disk-space.sh
- uses: actions/setup-go@v6
with:
go-version-file: "go.mod"
id: go
- run: sudo rm -rf /usr/local/bin/kustomize
- run: make test-sanity
docs:
name: docs
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
submodules: recursive
- run: make test-docs
- uses: gaurav-nelson/github-action-markdown-link-check@v1
with:
max-depth: 1
config-file: '.github/workflows/markdown-link-check-config.json'
================================================
FILE: .gitignore
================================================
# Folders
.idea
# Build artifacts
/build
/dist
**/bin/
# Test artifacts
**/testbin/
# CI GPG keyring
/.ci/gpg/keyring
# Website
website/public/
website/resources/
website/node_modules/
website/tech-doc-hugo
# Ignore molecule samples testdata if it be generated in the testdata/ diretory
testdata/ansible/memcached-molecule-operator
testdata/ansible/advanced-molecule-operator
# Trash files
*\.DS_Store
# Created by https://www.toptal.com/developers/gitignore/api/go,vim,emacs,visualstudiocode
# Edit at https://www.toptal.com/developers/gitignore?templates=go,vim,emacs,visualstudiocode
### Emacs ###
# -*- mode: gitignore; -*-
*~
\#*\#
/.emacs.desktop
/.emacs.desktop.lock
*.elc
auto-save-list
tramp
.\#*
# Org-mode
.org-id-locations
*_archive
# flymake-mode
*_flymake.*
# eshell files
/eshell/history
/eshell/lastdir
# elpa packages
/elpa/
# reftex files
*.rel
# AUCTeX auto folder
/auto/
# cask packages
.cask/
dist/
# Flycheck
flycheck_*.el
# server auth directory
/server/
# projectiles files
.projectile
# directory configuration
.dir-locals.el
# network security
/network-security.data
### Go ###
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary, built with `go test -c`
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
### Vim ###
# Swap
[._]*.s[a-v][a-z]
!*.svg # comment out if you don't need vector files
[._]*.sw[a-p]
[._]s[a-rt-v][a-z]
[._]ss[a-gi-z]
[._]sw[a-p]
# Session
Session.vim
Sessionx.vim
# Temporary
.netrwhist
# Auto-generated tag files
tags
# Persistent undo
[._]*.un~
### VisualStudioCode ###
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
### VisualStudioCode Patch ###
# Ignore all local history of files
.history
.ionide
# End of https://www.toptal.com/developers/gitignore/api/go,vim,emacs,visualstudiocode
# Python cache (Ansible molecule)
test/ansible/plugins/filter/__pycache__/
================================================
FILE: .gitmodules
================================================
[submodule "website/themes/docsy"]
path = website/themes/docsy
url = https://github.com/asmacdo/docsy.git
================================================
FILE: .golangci.yml
================================================
version: "2"
linters:
enable:
- dupl
- ginkgolinter
- goconst
- gocyclo
- gosec
- misspell
- nakedret
- revive
- unconvert
- unparam
exclusions:
generated: lax
presets:
- comments
- common-false-positives
- legacy
- std-error-handling
rules:
- linters:
- revive
text: should not use dot imports
source: ginkgo|gomega
- linters:
- gosec
text: G110|G601|G404|G204|G306
paths:
- third_party$
- builtin$
- examples$
settings:
revive:
rules:
- name: var-naming
disabled: true
formatters:
enable:
- goimports
exclusions:
generated: lax
paths:
- third_party$
- builtin$
- examples$
================================================
FILE: .goreleaser.yml
================================================
# Global environment variables for builds.
env:
- CGO_ENABLED=0
- GO111MODULE=on
- GOPROXY=https://proxy.golang.org|direct
- REPO=github.com/operator-framework/operator-sdk
- GO_BUILD_TAGS=containers_image_openpgp
# Hooks to run before any build is run.
before:
hooks:
- go version | grep --quiet "go1\.15\.5" || echo "Go binary version must be 1.15.5"
- go mod download
# Binary builds.
builds:
# operator-sdk build steps
- id: operator-sdk
main: ./cmd/operator-sdk
binary: operator-sdk
mod_timestamp: "{{ .CommitTimestamp }}"
# containers_image_openpgp for containers/image
flags: &build-flags
- -tags=containers_image_openpgp
asmflags: &build-asmflags
- all=-trimpath={{ .Env.PWD }}
gcflags: &build-gcflags
- all=-trimpath={{ .Env.PWD }}
ldflags: &build-ldflags
- -X {{ .Env.REPO }}/internal/version.Version={{ .Env.SIMPLE_VERSION }}
- -X {{ .Env.REPO }}/internal/version.GitVersion={{ .Env.GIT_VERSION }}
- -X {{ .Env.REPO }}/internal/version.GitCommit={{ .Env.GIT_COMMIT }}
- -X {{ .Env.REPO }}/internal/version.KubernetesVersion={{ .Env.K8S_VERSION }}
- -X {{ .Env.REPO }}/internal/version.ImageVersion={{ .Env.IMAGE_VERSION }}
targets: &build-targets
- darwin_amd64
- darwin_arm64
- linux_amd64
- linux_arm64
- linux_ppc64le
- linux_s390x
# helm-operator build steps
- id: helm-operator
main: ./cmd/helm-operator
binary: helm-operator
mod_timestamp: "{{ .CommitTimestamp }}"
flags: *build-flags
asmflags: *build-asmflags
gcflags: *build-gcflags
ldflags: *build-ldflags
targets: *build-targets
# Use most recent tag and short commit for snapshot version.
snapshot:
name_template: "{{ .Env.GIT_VERSION }}"
# We don't use archives, so skip creating them.
archives:
- format: binary
name_template: "{{ .Binary }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}{{ if .Mips }}_{{ .Mips }}{{ end }}"
checksum:
name_template: "checksums.txt"
# Sign the checksum file with the CI GPG key.
signs:
- signature: "${artifact}.asc"
artifacts: checksum
# Use the CI signing subkey A20B5C7E decrypted into .ci/gpg/keyring to sign the release.
args: ["--home", ".ci/gpg/keyring", "-u", "A20B5C7E", "--output", "${signature}", "--detach-sign", "${artifact}"]
# We use a custom changelog generator.
changelog:
# TODO(estroz): configure homebrew publishing
# brews:
# - name: operator-sdk
# ids:
# - operator-sdk
# Uncomment for testing
# release:
# github:
# owner: <your-github-namespace>
# name: operator-sdk
================================================
FILE: CONTRIBUTING.MD
================================================
# How to contribute
Operator SDK is Apache 2.0 licensed and accepts contributions via GitHub pull requests. This document outlines some of the conventions on commit message formatting, contact points for developers, and other resources to help get contributions into operator-sdk.
# Email and Chat
- Email: [operator-framework][operator_framework]
## Getting started
- Fork the repository on GitHub
- See the [developer guide][developer-guide] for build instructions
## Reporting bugs and creating issues
Reporting bugs is one of the best ways to contribute. However, a good bug report has some very specific qualities, so please read over our short document on [reporting issues][reporting-issues] before submitting a bug report. This document might contain links to known issues, another good reason to take a look there before reporting a bug.
## Contribution flow
This is a rough outline of what a contributor's workflow looks like:
- Create a topic branch from where to base the contribution. This is usually master.
- Make commits of logical units.
- Make sure commit messages are in the proper format (see below).
- Push changes in a topic branch to a personal fork of the repository.
- Submit a pull request to operator-framework/operator-sdk.
- The PR must receive a LGTM from two maintainers found in the MAINTAINERS file.
Thanks for contributing!
### Code style
The coding style suggested by the Go community is used in operator-sdk. See the [style doc][golang-style-doc] for details.
Please follow this style to make operator-sdk easy to review, maintain and develop.
### Format of the commit message
We follow a rough convention for commit messages that is designed to answer two
questions: what changed and why. The subject line should feature the what and
the body of the commit should describe the why.
```
scripts: add the test-cluster command
this uses tmux to setup a test cluster that can easily be killed and started for debugging.
Fixes #38
```
The format can be described more formally as follows:
```
<subsystem>: <what changed>
<BLANK LINE>
<why this change was made>
<BLANK LINE>
<footer>
```
The first line is the subject and should be no longer than 70 characters, the second line is always blank, and other lines should be wrapped at 80 characters. This allows the message to be easier to read on GitHub as well as in various git tools.
## Documentation
Most contributions involve some sort of documentation. See our [doc contribution guidelines][doc-contrib] for details.
## Changelog
The operator-sdk maintains a changelog and most contributions should involve a changelog entry. See our [changelog contribution guidelines][changelog-contrib] for details.
[operator_framework]: https://groups.google.com/forum/#!forum/operator-framework
[developer-guide]: https://sdk.operatorframework.io/docs/contribution-guidelines/developer-guide/
[reporting-issues]: https://sdk.operatorframework.io/docs/contribution-guidelines/reporting-issues/
[golang-style-doc]: https://github.com/golang/go/wiki/CodeReviewComments
[doc-contrib]: https://sdk.operatorframework.io/docs/contribution-guidelines/documentation
[changelog-contrib]:https://master.sdk.operatorframework.io/docs/contribution-guidelines/changelog
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: Makefile
================================================
SHELL = /bin/bash
# IMAGE_VERSION represents the helm-operator, and scorecard subproject versions.
# This value must be updated to the release tag of the most recent release, a change that must
# occur in the release commit. IMAGE_VERSION will be removed once each subproject that uses this
# version is moved to a separate repo and release process.
export IMAGE_VERSION = v1.42.2
# Build-time variables to inject into binaries
export SIMPLE_VERSION = $(shell (test "$(shell git describe --tags)" = "$(shell git describe --tags --abbrev=0)" && echo $(shell git describe --tags)) || echo $(shell git describe --tags --abbrev=0)+git)
export GIT_VERSION = $(shell git describe --dirty --tags --always)
export GIT_COMMIT = $(shell git rev-parse HEAD)
export K8S_VERSION = 1.33.1
export KIND_VERSION = 0.29.0
# Build settings
export TOOLS_DIR = tools/bin
export SCRIPTS_DIR = tools/scripts
GO := $(shell type -P go)
REPO = $(shell $(GO) list -m)
BUILD_DIR = build
GO_ASMFLAGS = -asmflags "all=-trimpath=$(shell dirname $(PWD))"
GO_GCFLAGS = -gcflags "all=-trimpath=$(shell dirname $(PWD))"
GO_BUILD_ARGS = \
$(GO_GCFLAGS) $(GO_ASMFLAGS) \
-ldflags " \
-X '$(REPO)/internal/version.Version=$(SIMPLE_VERSION)' \
-X '$(REPO)/internal/version.GitVersion=$(GIT_VERSION)' \
-X '$(REPO)/internal/version.GitCommit=$(GIT_COMMIT)' \
-X '$(REPO)/internal/version.KubernetesVersion=v$(K8S_VERSION)' \
-X '$(REPO)/internal/version.ImageVersion=$(IMAGE_VERSION)' \
" \
# containers_image_openpgp for containers/image
GO_BUILD_TAGS = containers_image_openpgp
export GO111MODULE = on
export CGO_ENABLED = 0
export PATH := $(PWD)/$(BUILD_DIR):$(PWD)/$(TOOLS_DIR):$(PATH)
##@ Development
.PHONY: generate
generate: build # Generate CLI docs and samples
rm -rf testdata
$(GO) run ./hack/generate/cncf-maintainers/main.go
$(GO) run -tags=$(GO_BUILD_TAGS) ./hack/generate/cli-doc/gen-cli-doc.go
$(GO) run ./hack/generate/samples/generate_testdata.go
$(GO) generate ./...
.PHONY: bindata
OLM_VERSIONS = 0.26.0 0.27.0 0.28.0
bindata: ## Update project bindata
./hack/generate/olm_bindata.sh $(OLM_VERSIONS)
$(MAKE) fix
.PHONY: fix
fix: ## Fixup files in the repo.
$(GO) mod tidy
$(GO) fmt ./...
make setup-lint
$(TOOLS_DIR)/golangci-lint run --fix --build-tags $(GO_BUILD_TAGS)
.PHONY: setup-lint
setup-lint: ## Setup the lint
$(SCRIPTS_DIR)/fetch golangci-lint 2.6.2
.PHONY: lint
lint: setup-lint ## Run the lint check
$(TOOLS_DIR)/golangci-lint run --build-tags $(GO_BUILD_TAGS)
.PHONY: clean
clean: ## Cleanup build artifacts and tool binaries.
rm -rf $(BUILD_DIR) dist $(TOOLS_DIR)
##@ Build
# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set)
ifeq (,$(shell go env GOBIN))
GOBIN=$(shell go env GOPATH)/bin
else
GOBIN=$(shell go env GOBIN)
endif
.PHONY: install
install: ## Install operator-sdk and helm-operator.
@if [ -z "$(GOBIN)" ]; then \
echo "Error: GOBIN is not set"; \
exit 1; \
fi
$(GO) install $(GO_BUILD_ARGS) -tags=$(GO_BUILD_TAGS) ./cmd/{operator-sdk,helm-operator}
.PHONY: build
build: ## Build operator-sdk and helm-operator.
@mkdir -p $(BUILD_DIR)
$(GO) build $(GO_BUILD_ARGS) -tags=$(GO_BUILD_TAGS) -o $(BUILD_DIR) ./cmd/{operator-sdk,helm-operator}
.PHONY: build/operator-sdk build/helm-operator
build/operator-sdk build/helm-operator:
$(GO) build $(GO_BUILD_ARGS) -tags=$(GO_BUILD_TAGS) -o $(BUILD_DIR)/$(@F) ./cmd/$(@F)
# Build scorecard binaries.
.PHONY: build/scorecard-test build/scorecard-test-kuttl build/custom-scorecard-tests
build/scorecard-test build/scorecard-test-kuttl build/custom-scorecard-tests:
$(GO) build $(GO_GCFLAGS) $(GO_ASMFLAGS) -o $(BUILD_DIR)/$(@F) ./images/$(@F)
##@ Dev image build
# Convenience wrapper for building all remotely hosted images.
.PHONY: image-build
IMAGE_TARGET_LIST = operator-sdk helm-operator scorecard-test scorecard-test-kuttl
image-build: $(foreach i,$(IMAGE_TARGET_LIST),image/$(i)) ## Build all images.
# Build an image.
BUILD_IMAGE_REPO = quay.io/operator-framework
# When running in a terminal, this will be false. If true (ex. CI), print plain progress.
ifneq ($(shell test -t 0; echo $$?),0)
DOCKER_PROGRESS = --progress plain
endif
image/%: export DOCKER_CLI_EXPERIMENTAL = enabled
image/%:
docker buildx build $(DOCKER_PROGRESS) -t $(BUILD_IMAGE_REPO)/$*:dev -f ./images/$*/Dockerfile --load .
image-base/%: export DOCKER_CLI_EXPERIMENTAL = enabled
image-base/%:
docker buildx build $(DOCKER_PROGRESS) -t $(BUILD_IMAGE_REPO)/$*-base:dev -f ./images/$*/base.Dockerfile --load images/$*
##@ Release
.PHONY: release
release: ## Release target. See 'make -f release/Makefile help' for more information.
$(MAKE) -f release/Makefile $@
.PHONY: prerelease
prerelease: generate ## Write release commit changes. See 'make -f release/Makefile help' for more information.
ifneq ($(RELEASE_VERSION),$(IMAGE_VERSION))
$(error "IMAGE_VERSION "$(IMAGE_VERSION)" must be updated to match RELEASE_VERSION "$(RELEASE_VERSION)" prior to creating a release commit")
endif
$(MAKE) -f release/Makefile $@
.PHONY: tag
tag: ## Tag a release commit. See 'make -f release/Makefile help' for more information.
$(MAKE) -f release/Makefile $@
##@ Test
.PHONY: test-all
test-all: test-static test-e2e ## Run all tests
.PHONY: test-static
test-static: test-sanity test-unit test-docs ## Run all non-cluster-based tests
.PHONY: test-sanity
test-sanity: generate fix ## Test repo formatting, linting, etc.
git diff --exit-code # fast-fail if generate or fix produced changes
./hack/check-license.sh
./hack/check-error-log-msg-format.sh
$(GO) vet -tags=$(GO_BUILD_TAGS) ./...
make setup-lint
make lint
git diff --exit-code # diff again to ensure other checks don't change repo
.PHONY: test-docs
test-docs: ## Test doc links
$(GO) run ./release/changelog/gen-changelog.go -validate-only
git submodule update --init --recursive website/
./hack/check-links.sh
.PHONY: test-unit
TEST_PKGS = $(shell $(GO) list ./... | grep -v -E 'github.com/operator-framework/operator-sdk/test/')
test-unit: ## Run unit tests
CGO_ENABLED=1 $(GO) test -race -tags=$(GO_BUILD_TAGS) -coverprofile=coverage.out -covermode=atomic -short $(TEST_PKGS)
e2e_tests := test-e2e-go test-e2e-helm test-e2e-integration
e2e_targets := test-e2e $(e2e_tests)
.PHONY: $(e2e_targets)
.PHONY: test-e2e-setup
export KIND_CLUSTER := osdk-test
KUBEBUILDER_ASSETS = $(PWD)/$(shell $(GO) install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest && $(shell $(GO) env GOPATH)/bin/setup-envtest use $(K8S_VERSION) --bin-dir tools/bin/ -p path)
test-e2e-setup:: build dev-install cluster-create
.PHONY: cluster-create
cluster-create::
[[ "`$(TOOLS_DIR)/kind get clusters`" =~ "$(KIND_CLUSTER)" ]] || $(TOOLS_DIR)/kind create cluster --image="kindest/node:v$(K8S_VERSION)" --name $(KIND_CLUSTER)
.PHONY: dev-install
dev-install::
$(SCRIPTS_DIR)/fetch kind $(KIND_VERSION)
$(SCRIPTS_DIR)/fetch kubectl $(K8S_VERSION) # Install kubectl AFTER envtest because envtest includes its own kubectl binary
.PHONY: test-e2e-teardown
test-e2e-teardown:
$(SCRIPTS_DIR)/fetch kind $(KIND_VERSION)
$(TOOLS_DIR)/kind delete cluster --name $(KIND_CLUSTER)
rm -f $(KUBECONFIG)
# Double colon rules allow repeated rule declarations.
# Repeated rules are executed in the order they appear.
$(e2e_targets):: test-e2e-setup image/scorecard-test
test-e2e:: $(e2e_tests) ## Run e2e tests
test-e2e-sample-go:: dev-install cluster-create ## Run Memcached Operator Sample e2e tests
make test-e2e -C ./testdata/go/v4/memcached-operator/
test-e2e-go:: image/custom-scorecard-tests ## Run Go e2e tests
$(GO) test ./test/e2e/go -v -ginkgo.v
test-e2e-helm:: image/helm-operator ## Run Helm e2e tests
$(GO) test ./test/e2e/helm -v -ginkgo.v
test-e2e-integration:: ## Run integration tests
$(GO) test ./test/integration -v -ginkgo.v
./hack/tests/subcommand-olm-install.sh
.DEFAULT_GOAL := help
.PHONY: help
help: ## Show this help screen.
@echo 'Usage: make <OPTIONS> ... <TARGETS>'
@echo ''
@echo 'Available targets are:'
@echo ''
@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>\033[0m\n"} /^[a-zA-Z0-9_-]+:.*?##/ { printf " \033[36m%-25s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
================================================
FILE: OWNERS
================================================
approvers:
- sdk-admins
- sdk-approvers
reviewers:
- sdk-admins
- sdk-approvers
- sdk-reviewers
================================================
FILE: OWNERS_ALIASES
================================================
# See the OWNERS docs: https://git.k8s.io/community/contributors/guide/owners.md
aliases:
# Contributors who can be contacted to perform admin-related tasks on the repo.
# This role is a subset of the approver role.
sdk-admins:
- joelanford
- oceanc80
# Contributors who can approve any PRs in the repo.
sdk-approvers:
- camilamacedo86
- jberkhahn
- rashmigottipati
- grokspawn
- anik120
- acornett21
- OchiengEd
# Contributors who can review and LGTM any PRs in the repo.
sdk-reviewers:
# Contributors who were approvers that are no longer directly involved with the project.
# This role is symbolic.
sdk-emeritus-admins:
- everettraven
sdk-emeritus-approvers:
- bharathi-tenneti
- fabianvf
- hasbro17
- shawn-hurley
- estroz
- marc-obrien
- asmacdo
- jmrodri
- theishshah
- varshaprasad96
================================================
FILE: README.md
================================================
<img src="website/static/operator_logo_sdk_color.svg" height="125px"></img>
> ⚠️ **IMPORTANT NOTICE:** Images under `gcr.io/kubebuilder/` Will Be Unavailable Soon
>
> **If your project uses `gcr.io/kubebuilder/kube-rbac-proxy`** it will be affected.
> Your project may fail to work if the image cannot be pulled. **You must move as soon as possible**, sometime from early 2025, the GCR will go away.
>
> The usage of the project [kube-rbac-proxy](https://github.com/brancz/kube-rbac-proxy) was discontinued from Kubebuilder and Operator-SDK.
> It was replaced for similar protection using `authn/authz` via Controller-Runtime's feature [WithAuthenticationAndAuthorization](https://pkg.go.dev/sigs.k8s.io/controller-runtime@v0.18.4/pkg/metrics/filters#WithAuthenticationAndAuthorization).
>
> For more information and guidance see the discussion https://github.com/kubernetes-sigs/kubebuilder/discussions/3907
[](https://github.com/operator-framework/operator-sdk/actions)
[](http://www.apache.org/licenses/LICENSE-2.0.html)
## Documentation
Docs can be found on the [Operator SDK website][sdk-docs].
## Overview
This project is a component of the [Operator Framework][of-home], an
open source toolkit to manage Kubernetes native applications, called
Operators, in an effective, automated, and scalable way. Read more in
the [introduction blog post][of-blog].
[Operators][operator-link] make it easy to manage complex stateful
applications on top of Kubernetes. However writing an Operator today can
be difficult because of challenges such as using low level APIs, writing
boilerplate, and a lack of modularity which leads to duplication.
The Operator SDK is a framework that uses the
[controller-runtime][controller-runtime] library to make writing
operators easier by providing:
- High level APIs and abstractions to write the operational logic more intuitively
- Tools for scaffolding and code generation to bootstrap a new project fast
- Extensions to cover common Operator use cases
## Dependency and platform support
### Go version
Release binaries will be built with the Go compiler version specified in the [developer guide][dev-guide-prereqs].
A Go Operator project's Go version can be found in its `go.mod` file.
[dev-guide-prereqs]:https://sdk.operatorframework.io/docs/contribution-guidelines/developer-guide#prerequisites
### Kubernetes versions
Supported Kubernetes versions for your Operator project or relevant binary can be determined
by following this [compatibility guide][k8s-compat].
[k8s-compat]:https://sdk.operatorframework.io/docs/overview#kubernetes-version-compatibility
### Platforms
The set of supported platforms for all binaries and images can be found in [these tables][platforms].
[platforms]:https://sdk.operatorframework.io/docs/overview#platform-support
## Community and how to get involved
- [Operator framework community][operator-framework-community]
- [Communication channels][operator-framework-communication]
- [Project meetings][operator-framework-meetings]
## How to contribute
Check out the [contributor documentation][contribution-docs].
## License
Operator SDK is under Apache 2.0 license. See the [LICENSE][license_file] file for details.
[controller-runtime]: https://github.com/kubernetes-sigs/controller-runtime
[license_file]:./LICENSE
[of-home]: https://github.com/operator-framework
[of-blog]: https://www.openshift.com/blog/introducing-the-operator-framework
[operator-link]: https://kubernetes.io/docs/concepts/extend-kubernetes/operator/
[sdk-docs]: https://sdk.operatorframework.io
[operator-framework-community]: https://github.com/operator-framework/community
[operator-framework-communication]: https://github.com/operator-framework/community#get-involved
[operator-framework-meetings]: https://github.com/operator-framework/community#meetings
[contribution-docs]: https://sdk.operatorframework.io/docs/contribution-guidelines/
================================================
FILE: SECURITY.md
================================================
# Security Policy
## Supported Versions
Operator SDK makes a constant stream of releases. In general, this means that security
updates will be made in minor releases for the most recent major release only.
## Reporting a Vulnerability
To report a vulnerability, please follow the instructions at
https://access.redhat.com/security/team/contact
================================================
FILE: changelog/fragments/00-template.yaml
================================================
# entries is a list of entries to include in
# release notes and/or the migration guide
entries:
- description: >
Description is the line that shows up in the CHANGELOG. This
should be formatted as markdown and be on a single line. Using
the YAML string '>' operator means you can write your entry
multiple lines and it will still be parsed as a single line.
If an operator type's plugin is being changed then prefix the description with
"(<operator language>/<plugin version>)", ex. "(go/v2)".
If an operator type's runtime is being changed, use then prefix the description
with "For <operator language>-based operators,", ex. "For Go-based operators".
# kind is one of:
# - addition
# - change
# - deprecation
# - removal
# - bugfix
kind: ""
# Is this a breaking change?
breaking: false
# NOTE: ONLY USE `pull_request_override` WHEN ADDING THIS
# FILE FOR A PREVIOUSLY MERGED PULL_REQUEST!
#
# The generator auto-detects the PR number from the commit
# message in which this file was originally added.
#
# What is the pull request number (without the "#")?
# pull_request_override: 0
# Migration can be defined to automatically add a section to
# the migration guide. This is required for breaking changes.
migration:
header: Header text for the migration section
body: |
Body of the migration section. This should be formatted as markdown and can
span multiple lines.
Using the YAML string '|' operator means that newlines in this string will
be honored and interpretted as newlines in the rendered markdown.
================================================
FILE: changelog/generated/v1.10.0.md
================================================
## v1.10.0
### Additions
- Provide XML formatting option for scorecard users. Additionally transforms scorecard result types to xunit testsuite/testcase layout. ([#5048](https://github.com/operator-framework/operator-sdk/pull/5048))
### Changes
- **Breaking change**: (ansible/v1) Bumped Kustomize version in ansible project scaffolding to 3.8.7. ([#5057](https://github.com/operator-framework/operator-sdk/pull/5057))
### Bug Fixes
- Fixed the `operator-sdk generate bundle` command to specify the right path of bundle metadata in bundle.Dockerfile. ([#5030](https://github.com/operator-framework/operator-sdk/pull/5030))
- For Helm-based operators, fixed release equality comparison such that number values are compared and not their types to avoid unnecessary reconciliations. ([#5042](https://github.com/operator-framework/operator-sdk/pull/5042))
- Bump java-operator-plugins. Adds `namespaced` plugin attribute and fixes resource version generation. ([#5020](https://github.com/operator-framework/operator-sdk/pull/5020))
- In the `pkgman-to-bundle` command, changed the default channel name used for CSV's not specified in `package.yaml` to `defaultChannel` instead of "candidate". ([#5062](https://github.com/operator-framework/operator-sdk/pull/5062))
================================================
FILE: changelog/generated/v1.11.0.md
================================================
## v1.11.0
### Additions
- (go/v3, ansible/v1, helm/v1) Added `containerPort` protocol field required for server-side apply in manifests. ([#4863](https://github.com/operator-framework/operator-sdk/pull/4863))
- For helm based operators, added a predicate that filters resources based on selectors specified in `watches.yaml`. Only the resources that contain the labels specified by selectors will be reconciled. ([#4997](https://github.com/operator-framework/operator-sdk/pull/4997))
- For helm-based operators, support go `text/template` expansion of override values. ([#5105](https://github.com/operator-framework/operator-sdk/pull/5105))
### Changes
- (go/v3) Fixed a bug in `make test` caused by incorrect envtest asset setup. ([#4863](https://github.com/operator-framework/operator-sdk/pull/4863))
- (go/v3, ansible/v1, helm/v1) Increased resource limits for controller manager. ([#4863](https://github.com/operator-framework/operator-sdk/pull/4863))
- Updated operator-framework dependency to 0.10.5. This specific update includes a fix for bundle validation when checking for invalid service accounts. ([#5119](https://github.com/operator-framework/operator-sdk/pull/5119))
- For helm-based operators, reverted #5042 and #4937 which modified helm release equality comparison. ([#5097](https://github.com/operator-framework/operator-sdk/pull/5097))
### Bug Fixes
- (ansible/v1) Previously, when scaffolding an Ansible-based operator with both Roles and Playbooks, the roles imported by the playbook could not be found when running locally (`make run`). This change prepends the `ANSIBLE_ROLES_PATH` environment variable with the path to the local roles directory. ([#5118](https://github.com/operator-framework/operator-sdk/pull/5118))
- For Ansible-based operators, if a request is sent without a body in the metadata it will now be extracted from the request URL and properly set owner references/dependent watches. ([#5064](https://github.com/operator-framework/operator-sdk/pull/5064))
- In `generate bundle`, exclude ServiceAccounts already in a CSV from generated bundle. ([#5120](https://github.com/operator-framework/operator-sdk/pull/5120))
================================================
FILE: changelog/generated/v1.12.0.md
================================================
## v1.12.0
### Additions
- If an optional UniqueID is provided by a user in the scorecard config and the user generates XML output the UID will be appended to the test result output. ([#5092](https://github.com/operator-framework/operator-sdk/pull/5092))
### Bug Fixes
- Preserve the order of `webhookdefinitions` while generating bundles, by sorting `webhookDescriptions` in CSV generator. ([#5177](https://github.com/operator-framework/operator-sdk/pull/5177))
================================================
FILE: changelog/generated/v1.13.0.md
================================================
## v1.13.0
### Additions
- Added new optional validator `alpha-deprecated-apis` for the command bundle validate to help you verify if your bundle uses Kubernetes deprecated APIs. ([#5216](https://github.com/operator-framework/operator-sdk/pull/5216))
- Added support for configuring Scorecard Service Accounts using config files alongside the CLI. ([#5245](https://github.com/operator-framework/operator-sdk/pull/5245))
### Changes
- (quarkus/v1alpha) Bumped java-operator-plugins to v0.1.0. This is the first release of the java-operator-plugins repo. There are no other changes besides pointing to a specific tag. ([#5206](https://github.com/operator-framework/operator-sdk/pull/5206))
- For ansible-based operators, we have bumped `ansible-runner` dependency to >= 2.0.2. ([#5205](https://github.com/operator-framework/operator-sdk/pull/5205))
- Updated default base image used in `run bundle` and `run bundle-upgrade` to the multi-arch `quay.io/operator-framework/opm:latest` image to support non-amd64 clusters. ([#5171](https://github.com/operator-framework/operator-sdk/pull/5171))
- Replaced busybox with UBI8.4 for Scorecard Un-Tar image. ([#5191](https://github.com/operator-framework/operator-sdk/pull/5191))
================================================
FILE: changelog/generated/v1.14.0.md
================================================
## v1.14.0
### Additions
- Added new flag options `--storage-image` and `--untar-image` to the Scorecard command to allow overwrite its default values. These options are useful for disconnect environments and to prevent an impact of the external registry's pull limits. ([#5306](https://github.com/operator-framework/operator-sdk/pull/5306))
- Added information to the errors raised by scorecard basic tests to allow easily identify the scenarios. ([#5273](https://github.com/operator-framework/operator-sdk/pull/5273))
### Changes
- - Upgrade the Kubernetes dependencies from `1.21` to `1.22`. - Upgrade the controller-gen dependency from `v0.6.2` to `v0.7.0`. More info: https://github.com/kubernetes-sigs/controller-tools/releases - Upgrade the sigs.k8s.io/controller-runtime dependency from `v0.9.2` to `v0.10.0`. More info: https://github.com/kubernetes-sigs/controller-runtime/releases - Upgrade the Env Test used from `1.21` to `1.22`. ([#5228](https://github.com/operator-framework/operator-sdk/pull/5228))
- Bumped community.kubernetes to kubernetes.core >= 2.2.0. Added the kubernetes.core collection to requirements. ([#5249](https://github.com/operator-framework/operator-sdk/pull/5249))
- Reformat xml output to support in-line attributes. ([#5241](https://github.com/operator-framework/operator-sdk/pull/5241))
### Removals
- Helm operator reconciliation diffs are now logged only at the zap debug level. ([#5307](https://github.com/operator-framework/operator-sdk/pull/5307))
### Bug Fixes
- scorecard will now print out the failed CR when the basic test fails. ([#5255](https://github.com/operator-framework/operator-sdk/pull/5255))
- For Ansible-based Operators, adds documented `Successful` condition, and no longer removes conditions from the status in updates. Users can now wait for a successful reconciliation by waiting for the `Successful` type condition to be `True`. ([#5262](https://github.com/operator-framework/operator-sdk/pull/5262))
- Fixed an error where `bundle validate` would return a "duplicate service account" error when an object and service account have the same `.metadata.name` in a bundle. ([#5282](https://github.com/operator-framework/operator-sdk/pull/5282))
- The list of webhooks in `webhookdescription` was previously sorted based on `webhookType`. It is now being sorted based on webhook names. ([#5301](https://github.com/operator-framework/operator-sdk/pull/5301))
================================================
FILE: changelog/generated/v1.15.0.md
================================================
## v1.15.0
### Changes
- Bumped community.kubernetes to kubernetes.core >= 2.2.0. Added the kubernetes.core collection to requirements. ([#5249](https://github.com/operator-framework/operator-sdk/pull/5249))
### Bug Fixes
- For Ansible operators, if an API endpoint has a "/" in server path component the ansible binary will no longer throw error. ([#5308](https://github.com/operator-framework/operator-sdk/pull/5308))
================================================
FILE: changelog/generated/v1.16.0.md
================================================
## v1.16.0
### Additions
- For Ansible-based operators, add default resource limits for the manager. ([#5274](https://github.com/operator-framework/operator-sdk/pull/5274))
- Add annotation to specify the default container. More info [here](https://kubernetes.io/docs/reference/labels-annotations-taints/#kubectl-kubernetes-io-default-container). ([#5330](https://github.com/operator-framework/operator-sdk/pull/5330))
- Add PHONY targets to Makefile. ([#5330](https://github.com/operator-framework/operator-sdk/pull/5330))
- Add `# TODO(user): Configure the resources accordingly based on the project requirements.` into the file `config/manager/manager.yaml` to make this requirement clear for users. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/. ([#5330](https://github.com/operator-framework/operator-sdk/pull/5330))
- For Golang-based projects, added `ignore-not-found` flag to the `uninstall` and `undeploy` Makefile targets. This change allows `make undeploy` and `make install` to continue if Kustomize encounters a missing resource. You can invoke this feature by calling `make undeploy ignore-not-found=true`. ([#5330](https://github.com/operator-framework/operator-sdk/pull/5330))
- Add new optional validator Good Practices. You are able to test your bundle against good practices defined under operator framework solutions by running:
```sh
$ operator-sdk bundle validate ./bundle --select-optional name=good-practices OR $ operator-sdk bundle validate ./bundle --select-optional suite=operatorframework
```.
([#5448](https://github.com/operator-framework/operator-sdk/pull/5448))
- Add the deprecated APIs optional checker, `alpha-deprecated-apis`, to the `operatorframework` suite. ([#5407](https://github.com/operator-framework/operator-sdk/pull/5407))
### Changes
- Upgrade OPM version that is used by default to 1.19.1 in the generated Makefile so `make catalog-build` also works on OSX. ([#5099](https://github.com/operator-framework/operator-sdk/pull/5099))
- For Ansible-based operators, bumped the `operator_sdk.util` ansible module to 0.3.1. ([#5462](https://github.com/operator-framework/operator-sdk/pull/5462))
- For a more consistent user experience, ensure that all areas that require to be changed are marked by `TODO(user)`. ([#5330](https://github.com/operator-framework/operator-sdk/pull/5330))
- For Helm-based Operators, adopted the same default resource limit values used to scaffold Golang-based projects. ([#5330](https://github.com/operator-framework/operator-sdk/pull/5330))
- For Golang-based Operators, increase the values used in the default scaffold to define the resource limits usage and make clear the need to optimize its values based on the Operator requirements. ([#5330](https://github.com/operator-framework/operator-sdk/pull/5330))
### Deprecations
- Deprecation of the Optional(stage: alpha) Community Operator bundle validation. Its checks were moved to the [external validator](https://github.com/redhat-openshift-ecosystem/ocp-olm-catalog-validator/). ([#5414](https://github.com/operator-framework/operator-sdk/pull/5414))
### Bug Fixes
- Optional `OperatorHub.io` validator called by `operator-sdk bundle validate ./bundle --select-optional name=operatorhub` now includes a previously missing category `Modernization & Migration`. ([#5375](https://github.com/operator-framework/operator-sdk/pull/5375))
- Improves the validate bundle spec error message to provide a better explanation when invalid service accounts are found. ([#5375](https://github.com/operator-framework/operator-sdk/pull/5375))
- Improve scaffolding to filter existing multiline code fragments. More info [kubernetes-sigs/kubebuilder#2343](https://github.com/kubernetes-sigs/kubebuilder/pull/2343/files). ([#5330](https://github.com/operator-framework/operator-sdk/pull/5330))
================================================
FILE: changelog/generated/v1.17.0.md
================================================
## v1.17.0
### Additions
- Now operator-sdk bundle validate also ensures that the `alm-examples` annotation has a valid JSON ([More info](https://github.com/operator-framework/api/pull/207)) Introduction done by upgrading operator-framework/api from the commit `54878ea280f7c7402549dae568916dfb330b9262` to the release `v0.11.1`. ([#5495](https://github.com/operator-framework/operator-sdk/pull/5495))
- Added the `hybrid.helm.sdk.operatorframework.io/v1-alpha` plugin, which scaffolds a hybrid helm based operator. For more details on the plugin, please refer https://github.com/operator-framework/helm-operator-plugins/blob/main/docs/tutorial.md. This plugin is alpha and subject to breaking changes. ([#5504](https://github.com/operator-framework/operator-sdk/pull/5504))
- Add resource requests and limits to kube-rbac-proxy. ([#5505](https://github.com/operator-framework/operator-sdk/pull/5505))
### Changes
- (go/v3) upgrade go version from 1.16 to 1.17 and the following dependencies: - upgrade controller-runtime from `0.10.0` to `0.11.0` - k8s from `1.22` to `1.23` - controller-gen from `v0.0.7` to `v0.8.0`. ([#5505](https://github.com/operator-framework/operator-sdk/pull/5505))
- The debug log level for the sidecar container kube-rbac-proxy was reduced from 10 to 0. ([#5505](https://github.com/operator-framework/operator-sdk/pull/5505))
================================================
FILE: changelog/generated/v1.18.0.md
================================================
## v1.18.0
### Additions
- Add bundle size validator check for the command `operator-sdk bundle validate` check if the bundle is not bigger than ~4MB and warning the authors if the bundle size is closer to this amount. [More info](https://github.com/operator-framework/api/pull/210). ([#5552](https://github.com/operator-framework/operator-sdk/pull/5552))
- Add warning check for properties defined in the CSV for the command `operator-sdk bundle validate` warning when found properties annotations in the CSV recommending define these properties in `metadata/properties.yaml` instead. [More info](https://github.com/operator-framework/api/pull/217). ([#5552](https://github.com/operator-framework/operator-sdk/pull/5552))
- Add support to check for the manifests using the APIs which will be removed in [1.25](https://kubernetes.io/docs/reference/using-api/deprecation-guide/#v1-25) and [1.26](https://kubernetes.io/docs/reference/using-api/deprecation-guide/#v1-26) Kubernetes versions in the bundle manifests via the commands `operator-sdk bundle validate ./bundle --select-optional name=alpha-deprecated-apis` and consequently to `operator-sdk bundle validate ./bundle --select-optional suite=operatorframework`. Note that is unlike these APIs be present on the bundle. [More info](https://github.com/operator-framework/api/pull/208). ([#5552](https://github.com/operator-framework/operator-sdk/pull/5552))
- Adds support to bundle operators using image digests instead of tags. ([#5567](https://github.com/operator-framework/operator-sdk/pull/5567))
### Changes
- (java/v1alpha) bumping the java-operator-plugins dependency to v0.2.0. This release includes the following items.
### Additions - chore: bump go 1.17, k8s 1.23, and kubebuilder 3.3 (#69) - chore(deps): update to Quarkus SDK extension 3.0.2 and Quarkus 2.6.3 (#70) - chore(deps): update to use Quarkus JOSDK extension 3.0.1 (#67) - Remove useless file (#65) - chore: bump k8s 1.22.2 and kubebuilder 3.2 (#64) - exposed endpoints for micrometer metrics (#45) - modified the Quarkus operator SDK version and tutorial too (#40) - chore: bump fabric8 5.8.0 & quarkus 2.4.0 (#42) - modified the doc file and removed file after generation (#41) - release: fix release script to understand release branches (#38)
### Bug Fixes - Fix for wrongly generated file name (#73). ([#5542](https://github.com/operator-framework/operator-sdk/pull/5542))
### Bug Fixes
- Fixed a bug in `generate kustomze manifest` that quotes from interactive input were not trimmed properly. ([#5545](https://github.com/operator-framework/operator-sdk/pull/5545))
- Add requirement cloud.common for Ansible-based operators. ([#5505](https://github.com/operator-framework/operator-sdk/pull/5505))
================================================
FILE: changelog/generated/v1.19.0.md
================================================
## v1.19.0
### Additions
- Add official binary builds for `darwin/arm64`. ([#5581](https://github.com/operator-framework/operator-sdk/pull/5581))
- User is not able to run the `operator-sdk run bundle` in local kind-registry as `--skip-tls` flag is deprecated. OPM introduced new flags `--skip-tls-verify and --use-http`. This fix will enable the newly introduced flags. ([#5617](https://github.com/operator-framework/operator-sdk/pull/5617))
- For the helm/v1 plugin, parsed the "helm.sdk.operatorframework.io/reconcile-period" value from the custom resource annotations for helm operators. This value is then set to the 'ReconcilePeriod' field of the reconciler to reconcile the cluster in the specified intervals of time. ([#5585](https://github.com/operator-framework/operator-sdk/pull/5585))
- Added log so that URL verification errors when starting the ansible-operator are not silently swallowed. ([#5595](https://github.com/operator-framework/operator-sdk/pull/5595))
- Reverted removal of `--skip-tls` flag and mark the flag as deprecated. ([#5633](https://github.com/operator-framework/operator-sdk/pull/5633))
### Changes
- scorecard will now printout test results, if any, even when there is a context timeout. This will allow underlying errors from a test to be shown helping users address the issues. ([#5628](https://github.com/operator-framework/operator-sdk/pull/5628))
### Bug Fixes
- (java/v1alpha) bumped the java-operator-plugins dependency to [v0.3.0](https://github.com/operator-framework/java-operator-plugins/releases/tag/v0.3.0). ([#5588](https://github.com/operator-framework/operator-sdk/pull/5588))
- Add the labels defined in the Manager (Operator Deployment) to the ClusterServiceVersions [`DeploymentSpecs`](https://github.com/operator-framework/api/blob/master/pkg/operators/v1alpha1/clusterserviceversion_types.go#L78) to ensure that they will also be provided to the integration with OLM (CSV). ([#5533](https://github.com/operator-framework/operator-sdk/pull/5533))
================================================
FILE: changelog/generated/v1.20.0.md
================================================
## v1.20.0
### Additions
- New check to warning authors when the CRD description is empty was added to the Good Practices validator. You are able to check it by running `operator-sdk bundle validate ./bundle --select-optional name=good-practices` or `$ operator-sdk bundle validate ./bundle --select-optional suite=operatorframework` ([More info](https://github.com/operator-framework/api/pull/234)). ([#5552](https://github.com/operator-framework/operator-sdk/pull/5552))
- For ansible-based operators, proxy server port can be changed with the new `proxy-port` flag, which still defaults to 8888. ([#5669](https://github.com/operator-framework/operator-sdk/pull/5669))
- Previously we added this error to show the user that the Path component is part of proxy server. Now, kubectl made this fix that handles this case and there is no need to throw this error anymore. ([#5648](https://github.com/operator-framework/operator-sdk/pull/5648))
### Changes
- Update the supported OLM versions to 0.18.3, 0.19.1, 0.20.0. ([#5684](https://github.com/operator-framework/operator-sdk/pull/5684))
### Bug Fixes
- Fix: channel naming validator check and move it for the Good Practices validator. You are able to check it by running `operator-sdk bundle validate ./bundle --select-optional name=good-practices` or `$ operator-sdk bundle validate ./bundle --select-optional suite=operatorframework` ([More info](https://github.com/operator-framework/api/pull/231)). ([#5552](https://github.com/operator-framework/operator-sdk/pull/5552))
- For ansible-based operators, this change fixes an issue that caused finalizers to fail to run if the watched resource (CR) is deleted during reconciliation. ([#5678](https://github.com/operator-framework/operator-sdk/pull/5678))
- The related image discovery feature currently only reads environment variables from the manager container. This was causing an error when the deployment labels or container name that was expected were not present. This fixes that by collecting related images from all containers across all deployments.
This change also enables users to use related images in other containers since related images from everywhere will be considered. ([#5639](https://github.com/operator-framework/operator-sdk/pull/5639))
================================================
FILE: changelog/generated/v1.21.0.md
================================================
## v1.21.0
### Additions
- (declarative/v1): For Golang-based operators, copy the channels directory in the Dockerfile ([More info](https://github.com/kubernetes-sigs/kubebuilder/pull/2507/files)). ([#4863](https://github.com/operator-framework/operator-sdk/pull/4863))
- (go/v3):For Golang-based operators, new README.md will begin to be scaffolded. ([#4863](https://github.com/operator-framework/operator-sdk/pull/4863))
### Changes
- The validate package was inadvertantly exposed, it should be internal as all the other packages are in operator-sdk. The package was moved from `pkg/validate` to `internal/validate`. ([#5726](https://github.com/operator-framework/operator-sdk/pull/5726))
- Changed the default reconcile period of Ansible-based operators to 10h instead of 1m. ([#5781](https://github.com/operator-framework/operator-sdk/pull/5781))
- Bump the helm-operator-plugins dependency version to v0.0.10. ([#5772](https://github.com/operator-framework/operator-sdk/pull/5772))
- (go/v3):For Golang-based operators, upgrade controller-runtime and Kubernetes deps. ([#4863](https://github.com/operator-framework/operator-sdk/pull/4863))
- (kustomize/v1):For Golang/Helm/Ansible-based operators, upgrade kube-rbac-proxy image from v0.8.0 to v0.11.0. ([#4863](https://github.com/operator-framework/operator-sdk/pull/4863))
- (config-gen alpha command): Updated the image `gcr.io/kubebuilder/kube-rbac-proxy` from v0.5.0 to v0.11.0. ([#4863](https://github.com/operator-framework/operator-sdk/pull/4863))
- (config-gen alpha command): upgrade sigs.k8s.io/controller-tools from v0.7.0 to v0.8.0. ([#4863](https://github.com/operator-framework/operator-sdk/pull/4863))
- For Golang-based operators, change Makefile targets to replace go get with go install in order to remove deprecation and begin to be prepared to support go 1.18 in the future releases (IMPORTANT: Golang projects still not supporting versions >= 1.18. To know more about what needs to be done in order to support Golang 1.18, see [here](https://github.com/kubernetes-sigs/kubebuilder/issues/2559) ). ([#4863](https://github.com/operator-framework/operator-sdk/pull/4863))
- Update the `operator-sdk run bundle` command to have a more detailed help output, stating the intent of the command and that index-images passed via the `--index-image` flag should not already contain the bundle. ([#5727](https://github.com/operator-framework/operator-sdk/pull/5727))
### Bug Fixes
- (go/v3): For Golang-based operators, fix suite test using global cfg ([More info](https://github.com/kubernetes-sigs/kubebuilder/pull/2602)). ([#4863](https://github.com/operator-framework/operator-sdk/pull/4863))
- (go/v3): For Golang-based operators, ensure that the plugin can only be used with its go supported version >= 1.17 (IMPORTANT: Golang projects still not supporting versions >= 1.18. To know more about what needs to be done in order to support Golang 1.18, see [here](https://github.com/kubernetes-sigs/kubebuilder/issues/2559) ). ([#4863](https://github.com/operator-framework/operator-sdk/pull/4863))
- (kustomize/v1): For Golang-based operators, fix the issue to scaffold the same Kind for different groups with multi-group support by using group name in crd/patches and rbac editor/viewer manifests ([More info](https://github.com/kubernetes-sigs/kubebuilder/pull/2500)). ([#4863](https://github.com/operator-framework/operator-sdk/pull/4863))
- (kustomize/v1): For Golang-based operators, fix the issue to scaffold the same Kind for different groups with multi-group support by using group name in crd/patches and rbac editor/viewer manifests ([More info](https://github.com/kubernetes-sigs/kubebuilder/pull/2500)). ([#4863](https://github.com/operator-framework/operator-sdk/pull/4863))
- (go/v3): For Golang-based operators, avoid adding duplicated code fragments ([More info](https://github.com/kubernetes-sigs/kubebuilder/pull/2619)). ([#4863](https://github.com/operator-framework/operator-sdk/pull/4863))
================================================
FILE: changelog/generated/v1.22.0.md
================================================
## v1.22.0
### Additions
- For Go (go/v3) and Hybrid Helm (hybrid.helm/v1-alpha) language based operators: Add support for Go 1.18. ([#5843](https://github.com/operator-framework/operator-sdk/pull/5843))
- For `operator-sdk bundle validate` command and GoodPractices validator (`--select-optional name=good-practices`): Add CRD description check validation [More info](https://github.com/operator-framework/api/pull/234). ([#5843](https://github.com/operator-framework/operator-sdk/pull/5843))
- For `operator-sdk bundle validate` command and GoodPractices validator (`--select-optional name=good-practices`): Add a new check to warn authors when permissions to create CRDs are found [More info](https://github.com/operator-framework/api/pull/241). ([#5843](https://github.com/operator-framework/operator-sdk/pull/5843))
- For Quarkus (quarkus/v1-alpha) language based operator: add bundle generation [More info](https://github.com/operator-framework/java-operator-plugins/pull/84). ([#5843](https://github.com/operator-framework/operator-sdk/pull/5843))
- For operator-sdk run bundle and bundle-upgrade subcommands: improve message from common scenario faced to add a new bundle [More info](https://github.com/operator-framework/operator-registry/pull/954). ([#5843](https://github.com/operator-framework/operator-sdk/pull/5843))
- For operator-sdk run bundle and bundle-upgrade subcommands: adds some extra text context to sql statement errors [More info](https://github.com/operator-framework/operator-registry/pull/953). ([#5843](https://github.com/operator-framework/operator-sdk/pull/5843))
- For Golang/Ansible/Helm/HybridHelm language-based operators (go/v3, ansible/v1, helm/v1, hybrid.helm/v1-alpha, add a new comment with the option `leaderElectionReleaseOnCancel` [More info] (https://github.com/kubernetes-sigs/kubebuilder/pull/2596]). ([#5814](https://github.com/operator-framework/operator-sdk/pull/5814))
### Changes
- **Breaking change**: For Ansible-based language operators, upgrade `community.kubernetes` from `1.2.1` to `2.0.1`. **IMPORTANT** The `community.kubernetes` collection is being renamed to kubernetes.core. As of version 2.0.0, the collection has been replaced by deprecated redirects for all content to kubernetes.core. If you are using FQCNs starting with `community.kubernetes`, please update them to `kubernetes.core`. ([#5846](https://github.com/operator-framework/operator-sdk/pull/5846))
- For Ansible-based language operators, upgrade `kubernetes.core` from `2.2.0` to `2.3.1`. **IMPORTANT** The `community.kubernetes` collection is being renamed to kubernetes.core. As of version 2.0.0, the collection has been replaced by deprecated redirects for all content to kubernetes.core. If you are using FQCNs starting with `community.kubernetes`, please update them to `kubernetes.core`. ([#5846](https://github.com/operator-framework/operator-sdk/pull/5846))
- For Ansible-based language operators, upgrade `community.kubernetes` from `1.2.1` to `2.0.1`. **IMPORTANT** The `community.kubernetes` collection is being renamed to kubernetes.core. As of version 2.0.0, the collection has been replaced by deprecated redirects for all content to kubernetes.core. If you are using FQCNs starting with `community.kubernetes`, please update them to `kubernetes.core`. ([#5846](https://github.com/operator-framework/operator-sdk/pull/5846))
- Scorecard details got generated for the bundle even if no details were present for the scorecard in the java plugin. This change will add scorecard changes on conditional basis. ([#5800](https://github.com/operator-framework/operator-sdk/pull/5800))
- Hide --skip-tls flag as it is deprecated. ([#5830](https://github.com/operator-framework/operator-sdk/pull/5830))
- For Go (go/v3) and Helm Hybrid (hybrid.helm/v1-alpha) language based operators: Upgrade Kubernetes dependencies from `1.23` to `1.24` and controller-gen from `v0.8.0` to `v0.9.0`. ([#5843](https://github.com/operator-framework/operator-sdk/pull/5843))
- For Helm (helm/v1) and Hybrid Helm (hybrid.helm/v1-alpha) language based operators: Upgrade helm from `v3.6.2` to `v3.9.0`. ([#5843](https://github.com/operator-framework/operator-sdk/pull/5843))
- For Ansible (ansible/v1) and Helm (helm/v1) language based operators: change the default value for the manager.option LeaderElectionResourceLock from `comfigmaps` to `configmapsleases` to allow a safe transition to use the leases option on the future. [More info](https://github.com/kubernetes-sigs/controller-runtime/pull/1903). ([#5843](https://github.com/operator-framework/operator-sdk/pull/5843))
- For Quarkus (quarkus/v1-alpha) language based operator: upgrade dependency from `v0.0.3` to `v0.5.1` [More info](https://github.com/operator-framework/java-operator-plugins/releases). ([#5843](https://github.com/operator-framework/operator-sdk/pull/5843))
- For Helm Hybrid (hybrid.helm/v1-alpha) language based operator: Upgrade dependency from `v0.0.10` to `v0.0.11`. [More info](https://github.com/operator-framework/helm-operator-plugins/releases). ([#5843](https://github.com/operator-framework/operator-sdk/pull/5843))
- For Go (go/v3, go/v2), Ansible (ansible/v1), Helm (helm/v1), and Helm Hybrid (hybrid.helm/v1-alpha) language based operators: Bump OPM version from `v1.19.1` to `v1.23.0`. ([#5843](https://github.com/operator-framework/operator-sdk/pull/5843))
- For Docker images: Bump Go from 1.17 to 1.18. ([#5843](https://github.com/operator-framework/operator-sdk/pull/5843))
- Docs: Update Go 1.17 references to Go 1.18. ([#5843](https://github.com/operator-framework/operator-sdk/pull/5843))
- For HybridHelm based-language (hybrid.helm/v1-alpha), update its version from v0.0.10 to [v0.0.11-0.20220607145946-5b29693d1612](https://github.com/operator-framework/helm-operator-plugins/commit/5b29693d1612f87797e1e91e6cf1253842a5714e). [More info](https://github.com/operator-framework/helm-operator-plugins/compare/v0.0.8...5b29693d1612). ([#5814](https://github.com/operator-framework/operator-sdk/pull/5814))
- Add support for File-Based Catalog to the subcommands [operator-sdk run bundle](https://sdk.operatorframework.io/docs/cli/operator-sdk_run_bundle/#m-docsclioperator-sdk_run_bundle) and [run bundle-upgrade](https://sdk.operatorframework.io/docs/cli/operator-sdk_run_bundle-upgrade/) so that new indexes created by these subcommands are using the new format. Users are able to pass in an index catalog with FBC format via the flag option `--index-image`. ([#5809](https://github.com/operator-framework/operator-sdk/pull/5809))
### Deprecations
- For Ansible/Helm based-operators (ansible/v1, helm/v1), deprecate the flag `crd-version` since `v1beta1` APIs is not longer offered from k8s 1.22 and this flag is deprecated for Golang. ([#5815](https://github.com/operator-framework/operator-sdk/pull/5815))
### Bug Fixes
- Enable `run bundle` command to handle large File-Based Catalog index images by generating the extra FBC with the bundle contents and mounting a ConfigMap with that extra FBC, without regenerating the entire index. ([#5868](https://github.com/operator-framework/operator-sdk/pull/5868))
- For `operator-sdk bundle validate` command and GoodPractices validator (`--select-optional name=good-practices`): fix channel naming validation [More info](https://github.com/operator-framework/api/pull/231). ([#5843](https://github.com/operator-framework/operator-sdk/pull/5843))
- For Golang-based language (go/v2), fix issue introduced by removing the GO111MODULE=on from Dockerfile. ([More info](https://github.com/kubernetes-sigs/kubebuilder/pull/2678))
**IMPORTANT NOTE**: If you are using `go/v2` we highly recommend to upgrade your project to latest `go/v3` plugin (default operator-sdk scaffold). Please be aware that `go/v2` is a plugin which was kept to ensure the backwards compatibility with old Kubebuilder layout produced using its CLI versions < `3.0.0`. ([More info](https://book.kubebuilder.io/plugins/go-v2-plugin.html)) Therefore, we are unable to upgrade this plugin continuously and solve tech-debts as it is very likely that it would soon be deprecated by the Kubebuilder community. Note that projects built with this plugin do not produce CRDs for example using v1 APIs so that cannot work on Kubernetes cluster >= `1.22`). Please, ensure that you follow our migration guide [Migrating from pre-v1.0.0 to latest](https://sdk.operatorframework.io/docs/building-operators/golang/migration/). ([#5814](https://github.com/operator-framework/operator-sdk/pull/5814))
================================================
FILE: changelog/generated/v1.23.0.md
================================================
## v1.23.0
### Additions
- (Alpha) New optional validator to help verify if a bundle matches criteria for multiple architecture support. More info: https://olm.operatorframework.io/docs/advanced-tasks/ship-operator-supporting-multiarch/. You can test it out by running `$ operator-sdk bundle validate ./bundle --select-optional name=multiarch`. ([#5908](https://github.com/operator-framework/operator-sdk/pull/5908))
- Add an option, `WatchAnnotationsChanges`, to trigger reconciliations on annotation changes on watched resources. ([#5611](https://github.com/operator-framework/operator-sdk/pull/5611))
- Add a plugin (deploy-image/v1-alpha) for Golang projects that scaffolds the code to deploy and manage an Operand(image). You can test it out by running `operator-sdk --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"` [More info](https://master.book.kubebuilder.io/plugins/deploy-image-plugin-v1-alpha.html). ([#5965](https://github.com/operator-framework/operator-sdk/pull/5965))
- Add a plugin (grafana/v1-alpha) valid for all languages to help you generate Grafana dashboards. You can test it out by running `operator-sdk edit --plugins=grafana.kubebuilder.io/v1-alpha` [More info](https://master.book.kubebuilder.io/plugins/grafana-v1-alpha.html). ([#5965](https://github.com/operator-framework/operator-sdk/pull/5965))
- Add new golang plugin `go/v4-alpha` which adds support for Apple Silicon(`darwin/arm64`). ([#5965](https://github.com/operator-framework/operator-sdk/pull/5965))
- Test containers defined by `config.yaml` can now read the environment variable `SCORECARD_STORAGE` to get a storage path defined in the `config.yaml`. ([#5829](https://github.com/operator-framework/operator-sdk/pull/5829))
- (deploy-image/v1alpha plugin) Add support to generate SDK bundle manifests. ([#5997](https://github.com/operator-framework/operator-sdk/pull/5997))
- (ansible/v1,helm/v1) Add support for Apple Silicon(`darwin/arm64`). [Release Notes](https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2Fv4.0.0). ([#5965](https://github.com/operator-framework/operator-sdk/pull/5965))
### Changes
- Upgrade kube rbac proxy image `gcr.io/kubebuilder/kube-rbac-proxy` from `v0.11.0` to `v0.12.0`. [More info](https://github.com/brancz/kube-rbac-proxy/releases/tag/v0.12.0). ([#5903](https://github.com/operator-framework/operator-sdk/pull/5903))
- (go/v3) Update `controller-tools` from `0.9.0` to `0.9.2`. [More info](https://github.com/kubernetes-sigs/controller-tools/releases/tag/v0.9.2). ([#5965](https://github.com/operator-framework/operator-sdk/pull/5965))
- (go/v3) Update `controller-runtime` from `v0.12.1` to `v0.12.2` and Kubernetes dependencies from `v0.24.0` to `v0.24.2`. [More info](https://github.com/kubernetes-sigs/controller-runtime/releases/tag/v0.12.2). ([#5965](https://github.com/operator-framework/operator-sdk/pull/5965))
- (go/v3,ansible/v1,helm/v1) Update `gcr.io/kubebuilder/kube-rbac-proxy` from `0.12.0` to `0.13.0`. [More info](https://github.com/brancz/kube-rbac-proxy/releases/tag/v0.13.0). ([#5965](https://github.com/operator-framework/operator-sdk/pull/5965))
- **Breaking change**: (ansible/v1,helm/v1) Upgraded `kustomize` version from `v3.8.7` to `v4.5.5`. [Release Notes](https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2Fv4.0.0). ([#5965](https://github.com/operator-framework/operator-sdk/pull/5965))
- Update the supported OLM versions to 0.20.0, 0.21.2, 0.22.0. ([#6000](https://github.com/operator-framework/operator-sdk/pull/6000))
- Moved bundle name validation check to the good-practices validator. You can test it out by running `$ operator-sdk bundle validate ./bundle --select-optional name=good-practices`. ([#5908](https://github.com/operator-framework/operator-sdk/pull/5908))
### Deprecations
- Legacy layout "Kubebuilder 2.x" provided via the go/v2 plugin is officially deprecated. Be aware that since `Apr 2021`, the default layout produced is done via the `go/v3`. ([More info](https://github.com/kubernetes-sigs/kubebuilder/discussions/2842)) Check your `PROJECT` file to make sure that your project layout is `go.kubebuilder.io/v3`, if not please follow the [migration guide](https://sdk.operatorframework.io/docs/building-operators/golang/migration/) to upgrade your project. ([#5965](https://github.com/operator-framework/operator-sdk/pull/5965))
- Dropped support for installing `olm` version `0.19.1`. ([#6000](https://github.com/operator-framework/operator-sdk/pull/6000))
### Bug Fixes
- For Hybrid Helm (hybrid.helm/v1-alpha) language based operators: Bump Dockerfile Go version to 1.18. ([#5772](https://github.com/operator-framework/operator-sdk/pull/5772))
- Fix Makefile targets to not download binaries when they are found already. ([#5965](https://github.com/operator-framework/operator-sdk/pull/5965))
- Remove the option to call `kustomize/v1` plugin alone. If you are looking to use this project as a base for you to generate other plugins, please use [Kubebuilder](https://github.com/kubernetes-sigs/kubebuilder) instead. ([#5965](https://github.com/operator-framework/operator-sdk/pull/5965))
- Fix operator-sdk run bundle and upgrade bundle subCommands to allow them to work against Kubernetes versions < 1.19 and vendors like Openshift. ([#5973](https://github.com/operator-framework/operator-sdk/pull/5973))
- Fixed scorecard testOutput tightly coupling with scorecard storage mountPath. ([#5714](https://github.com/operator-framework/operator-sdk/pull/5714))
- Fix operator-sdk generate kustomize manifests to respect changes made by users in the config/manifests. ([#5960](https://github.com/operator-framework/operator-sdk/pull/5960))
- For `operator-sdk run bundle-upgrade`: fix a bug that caused `InstallPlan`s occasionally not being approved when attempting to upgrade a bundle. ([#5901](https://github.com/operator-framework/operator-sdk/pull/5901))
- For run bundle-upgrade, generate just the extra FBC of the bundle instead of rendering the entire index and appending bundle contents to it. ([#5891](https://github.com/operator-framework/operator-sdk/pull/5891))
- Honor `--skip-tls-verify` and `--use-http` flags from run bundle(-upgrade). ([#5921](https://github.com/operator-framework/operator-sdk/pull/5921))
================================================
FILE: changelog/generated/v1.24.0.md
================================================
## v1.24.0
### Changes
- Bumping java-operator-plugins to v0.6.0. ([#6007](https://github.com/operator-framework/operator-sdk/pull/6007))
### Bug Fixes
- Support test selectors in scorecard-kuttl. This only works if you supply a test name in the config for the entrypoint in the scorecard test config.yaml
In the `stages.tests`section add an `entrypoint`, in this entrypoint you add the name of the test you want to associate with the selector.
If you have a kuttl test directory called `smoke` your entrypoint should have `- smoke` as an entry. That way scorecard can pass that into the image and kuttl will run the single test. ([#6015](https://github.com/operator-framework/operator-sdk/pull/6015))
- `operator-sdk run bundle(-upgrade)`: fixed bug that made it so bundles weren't properly upgraded if the channel used in the bundle wasn't in the same channel as the bundle installed via `operator-sdk run bundle`. Using `operator-sdk run bundle` will now use a default channel instead of the one in the bundle. ([#6042](https://github.com/operator-framework/operator-sdk/pull/6042))
- `operator-sdk run bundle(-upgrade)`: fixed bug causing `operator-sdk run bundle-upgrade` and `operator-sdk run bundle ... --index-image=...` to stall indefinitely. ([#6040](https://github.com/operator-framework/operator-sdk/pull/6040))
- For Ansible & Helm-based operators, the generated `Makefile` does not handle converting `aarch64` to `arm64`. This prevents it from downloading the appropriate binaries.
This change simply adds a call to `sed` to convert `aarch64` to `arm64`. ([#5480](https://github.com/operator-framework/operator-sdk/pull/5480))
================================================
FILE: changelog/generated/v1.25.0.md
================================================
## v1.25.0
### Changes
- (ansible/v1): Modified ansible scaffolding in order to incorporate changes with Kubebuilder on `--component-config` flag changes. Previously, the changes with `--component-config` flag were not considered by default.
The following are the modifications: 1. If the `--component-config` flag is passed then look for `- /manager` in `manager.yaml` in order to add leader election id. If the component config flag is not passed then check for `--leader-elect` flag. 2. In `manager_proxy_patch.yaml` file, look for `memory: 64Mi` if the component flag is passed flag is passed. If not then look for `--leader-elect`. 3. Repeat the same logic for replacing the port number from the file. 4. At the end, update the `manager.yaml` file to avoid lint errors. ([#6047](https://github.com/operator-framework/operator-sdk/pull/6047))
- (go/v3, hybrid.helm/v1-alpha, and quarkus/v1-alpha): Upgrade Kubernetes dependencies from `1.24` to `1.25`. ([#6044](https://github.com/operator-framework/operator-sdk/pull/6044))
- This PR bumped Kubebuilder to 3.7.1, with this version comes the addition of the `--component-config` flag.
This flag is passed through `operator-sdk init` command. If this flag is passed through the command line as an argument then only the `controller_manager_config.yaml` file will be scaffolded in the manifest. If it is not passed then it will not scaffold out this file. The command for passing the flag is: operator-sdk init --domain example.com --repo github.com/example/memcached-operator --component-config. ([#6047](https://github.com/operator-framework/operator-sdk/pull/6047))
- (ansible/v1): updates the base ansible base operator event api, api server, and proxy to now have a 5 second timeout when reading the request headers. This is to prevent the possibility of a [Slowloris attack](https://www.cloudflare.com/learning/ddos/ddos-attack-tools/slowloris/). ([#6088](https://github.com/operator-framework/operator-sdk/pull/6088))
- Modified go version to 1.19 and Kubebuilder to 3.7.1. The `config-gen` is completely removed from Kubebuilder. As part of this bump, the website content of SDK was updated where the doc is referring to `config-gen`. ([#6047](https://github.com/operator-framework/operator-sdk/pull/6047))
- Updated ginkgo to ginkgo/v2 in all of the files. ([#6047](https://github.com/operator-framework/operator-sdk/pull/6047))
- Updated: - ginko to `ginko/v2` - `io/ioutil` packages to either `io` or `os` since its not longer supported in go1.19. ([#6047](https://github.com/operator-framework/operator-sdk/pull/6047))
- (helm/v1): Modified helm scaffolding in order to incorporate changes with Kubebuilder on `--component-config` flag changes. Previously, the changes with `--component-config` flag were not considered by default.
The following are the modifications: 1. If the `--component-config` flag is passed then look for `- /manager` in `manager.yaml` in order to add leader election id. If the component config flag is not passed then check for `--leader-elect` flag. 2. In `manager_proxy_patch.yaml` file, look for `memory: 64Mi` if the component flag is passed flag is passed. If not then look for `--leader-elect`. 3. Repeat the same logic for replacing the port number from the file. 4. At the end, update the `manager.yaml` file to avoid lint errors. ([#6047](https://github.com/operator-framework/operator-sdk/pull/6047))
- (ansible/v1, helm/v1): Added support to build multi-arch images from the project Makefile. A docker-buildx target will build the images for the platforms specified by the PLATFORMS variable. ([#6093](https://github.com/operator-framework/operator-sdk/pull/6093))
### Bug Fixes
- (docs) Update the go version in the developer guide. The documentation wasn't updated when the go version was bumped to v1.18. ([#6101](https://github.com/operator-framework/operator-sdk/pull/6101))
- For operator-sdk run bundle and bundle-upgrade subcommands: Added --security-context-config flag to enable seccompprofile. It defaults to restricted to support k8s 1.25. You can disable it with --security-context-config=legacy. ([#6062](https://github.com/operator-framework/operator-sdk/pull/6062))
================================================
FILE: changelog/generated/v1.26.0.md
================================================
## v1.26.0
### Additions
- For `operator-sdk bundle validate`: When checking for Kubernetes APIs deprecated in Kubernetes v1.25.0 the ClusterServiceVersion's CustomResourceDefinitions, ClusterPermissions, and Permissions are now validated to ensure no references to deprecated APIs are being made. ([#6119](https://github.com/operator-framework/operator-sdk/pull/6119))
### Changes
- (images): Bumps all Operator SDK maintained images to now use ubi(-minimal) tag 8.7. ([#6175](https://github.com/operator-framework/operator-sdk/pull/6175))
### Bug Fixes
- ansible: fixed "make run" so it finds local roles. ([#6110](https://github.com/operator-framework/operator-sdk/pull/6110))
- For `operator-sdk run bundle(-upgrade)`: fix a bug in the logic that would attempt to create a `ConfigMap` that contained the entire contents of an FBC. Now if the FBC contents are to large to fit into a single `ConfigMap`, the FBC contents will be partitioned and split amongst multiple `ConfigMap` resources. ([#6182](https://github.com/operator-framework/operator-sdk/pull/6182))
================================================
FILE: changelog/generated/v1.27.0.md
================================================
## v1.27.0
### Changes
- `operator-sdk run bundle(-upgrade)`: Change default of the `--security-context-config` flag to be `legacy` instead of `restricted`. ([#6210](https://github.com/operator-framework/operator-sdk/pull/6210))
- `operator-sdk run bundle`: When creating the CatalogSource, we now set the `grpcPodConfig.SecurityContextConfig` to the value of the `--security-context-config` flag. ([#6210](https://github.com/operator-framework/operator-sdk/pull/6210))
- The `scorecard-test-kuttl` image always prints the kuttl logs in case there is an error processing the kuttl report. ([#6225](https://github.com/operator-framework/operator-sdk/pull/6225))
### Bug Fixes
- `operator-sdk bundle validate`: Fix a bug in the Kubernetes 1.25 validation logic that would warn that a Kubernetes resource was deprecated without checking the group that contains the resource. (i.e if apps/deployments was deprecated and you used other/deployments you would receive a warning)". The validation logic will now verify the group and resource before issuing a warning. ([#6227](https://github.com/operator-framework/operator-sdk/pull/6227))
- `operator-sdk run bundle(-upgrade)`: Fix a bug where SQLite bundle images were failing to be run properly due to a change in the default channel that is used by `run bundle(-upgrade)` when creating a subscription. ([#6210](https://github.com/operator-framework/operator-sdk/pull/6210))
- `operator-sdk run bundle(-upgrade)`: Update the logic used to set a Registry Pod's PSA configuration to fix a bug where a Pod's containers still had a restrictive SecurityContext even when setting `--security-context-config=legacy`. ([#6210](https://github.com/operator-framework/operator-sdk/pull/6210))
- For `operator-sdk bundle validate`: Fix a bug that would make the command exit with a 0 exit code even if there were validation failures. ([#6274](https://github.com/operator-framework/operator-sdk/pull/6274))
- (scorecard): Fixes a bug where an error would be thrown if a Custom Resource did not have a `.spec` field, which is a perfectly valid scenario. Instead of throwing an error scorecard will now issue a suggestion. ([#6245](https://github.com/operator-framework/operator-sdk/pull/6245))
================================================
FILE: changelog/generated/v1.28.0.md
================================================
## v1.28.0
### Changes
- (ansible): Revert the cryptography package unpinning and repin to v3.3.2. ([#6348](https://github.com/operator-framework/operator-sdk/pull/6348))
- - Upgrade Kubernetes dependencies from `1.25` to `1.26`. - Upgrade `sigs.k8s.io/controller-tools` from `v0.10.0` to `v0.11.3`. More info: https://github.com/kubernetes-sigs/controller-tools/releases - Upgrade `sigs.k8s.io/controller-runtime` dependency from `v0.13.0` to `v0.14.5`. More info: https://github.com/kubernetes-sigs/controller-runtime/releases - Upgrade `k8s.io/client-go` dependency from `v0.25.3` to `v0.26.2`. - Upgrade `controller-gen` dependency from `v0.10.0` to `v0.11.1`. - Upgrade `kube-rbac-proxy` from `v0.13.0` to `v0.13.1` - Modify gov4alpha plugin to use `go/v4-alpha` from Kubebuilder. ([#6352](https://github.com/operator-framework/operator-sdk/pull/6352))
### Bug Fixes
- For ansible operators: fix a JSON parsing bug by updating the kubernetes.core collection to v2.4.0. ([#6334](https://github.com/operator-framework/operator-sdk/pull/6334))
- (scorecard): update default storage and untar images to images that run as non-root users by default. This ensures full compliance with restricted PSA guidelines when using `--pod-security=restricted`. ([#6335](https://github.com/operator-framework/operator-sdk/pull/6335))
================================================
FILE: changelog/generated/v1.29.0.md
================================================
## v1.29.0
### Changes
- (scorecard): Update kuttl to v0.15.0 in the scorecard-test-kuttl image. ([#6401](https://github.com/operator-framework/operator-sdk/pull/6401))
- (ansible/v1): Bump the golang base image version in the ansible-operator Dockerfiles from 1.18 to 1.19. ([#6398](https://github.com/operator-framework/operator-sdk/pull/6398))
- (operator-sdk run bundle): Compress the bundle content, to avoid the configMap exceed max length error. The error will look like this:
`... ConfigMap ... is invalid: []: Too long: must have at most 1048576 bytes`.
Fixes issue [#6323](https://github.com/operator-framework/operator-sdk/issues/6323). ([#6408](https://github.com/operator-framework/operator-sdk/pull/6408))
### Bug Fixes
- (docs): Update the go version in the developer guide. The documentation wasn't updated when the go version was bumped to v1.19. ([#6101](https://github.com/operator-framework/operator-sdk/pull/6101))
================================================
FILE: changelog/generated/v1.3.0.md
================================================
## v1.3.0
### Additions
- Added OLM bindata for the 0.17.0 release version. ([#4242](https://github.com/operator-framework/operator-sdk/pull/4242))
- Added [`order=<int>`](https://sdk.operatorframework.io/docs/building-operators/golang/references/markers/#usage) marker fields to CSV markers. ([#4254](https://github.com/operator-framework/operator-sdk/pull/4254))
- In Ansible-based operators, added the `ansible_operator_build_info` metric to instrument commit and version information. ([#4220](https://github.com/operator-framework/operator-sdk/pull/4220))
- In Helm-based operators, added the `helm_operator_build_info` metric to instrument commit and version information. ([#4220](https://github.com/operator-framework/operator-sdk/pull/4220))
- Added the `--package <name>` flag to all `generate` subcommands. This flag is required by `generate <bundle|packagemanifests>` when run outside of a project. ([#4074](https://github.com/operator-framework/operator-sdk/pull/4074))
- Added the `run bundle-upgrade` subcommand to automate testing upgrades of an operator from one version to another using OLM. ([#4271](https://github.com/operator-framework/operator-sdk/pull/4271))
- (go/v2) Added the command `òperator-sdk edit` which allows users edit the project layout to support [multi-group](https://book.kubebuilder.io/migration/multi-group.html). ([#4156](https://github.com/operator-framework/operator-sdk/pull/4156))
### Changes
- (go/v2) Bumped controller-runtime from v0.6.3 to v0.6.4. ([#4282](https://github.com/operator-framework/operator-sdk/pull/4282))
- Go CLI plugin go/v3 is now the default. ([#4307](https://github.com/operator-framework/operator-sdk/pull/4307))
- Bumped `operator-sdk` binary dependencies to their k8s v1.19 equivalents. ([#4294](https://github.com/operator-framework/operator-sdk/pull/4294))
- Updated helm-operator's Helm dependency to v3.4.1. ([#4259](https://github.com/operator-framework/operator-sdk/pull/4259))
### Bug Fixes
- Made the `cleanup` command's error handling more robust on deletion and "not found" events. ([#4303](https://github.com/operator-framework/operator-sdk/pull/4303))
- Fixed the documented `packagemanifests` make recipe. ([#4303](https://github.com/operator-framework/operator-sdk/pull/4303))
- `generate kustomize manifests` will now (re)generate a base `ClusterServiceVersion` manifest with a valid name. ([#4276](https://github.com/operator-framework/operator-sdk/pull/4276))
- (ansible/v1) Pinned all top level Python requirements. This fixes a bug that erroneously installed Ansible 2.10.z instead of Ansible 2.9.z. ([#4321](https://github.com/operator-framework/operator-sdk/pull/4321))
- Refactored the `generate bundle|packagemanifest` commands to generate bundles/package manifest data outside of projects. ([#4074](https://github.com/operator-framework/operator-sdk/pull/4074))
- (go/v2) Removed unused import for defaulting webhooks scaffolded by `create webhook` ([kubebuilder#1718](https://github.com/kubernetes-sigs/kubebuilder/pull/1718)). ([#4156](https://github.com/operator-framework/operator-sdk/pull/4156))
- (go/v2) Allow owner to not be specified in generated licenses ([kubebuilder#1749](https://github.com/kubernetes-sigs/kubebuilder/pull/1749)). ([#4156](https://github.com/operator-framework/operator-sdk/pull/4156))
- (go/v2) Fixed controller imports scaffolded by `create api` when `--resource=false` ([kubebuilder#1770](https://github.com/kubernetes-sigs/kubebuilder/pull/1770)). ([#4215](https://github.com/operator-framework/operator-sdk/pull/4215))
================================================
FILE: changelog/generated/v1.30.0.md
================================================
## v1.30.0
### Additions
- Add a Parameter to the Makefile to allow modifying the 'operator-sdk' binary before running any commands. If necessary, a specific version of the SDK can be downloaded for cases when the project has yet to upgrade to a later or latest version. ([#6443](https://github.com/operator-framework/operator-sdk/pull/6443))
- Currently, the operator SDK for the Ansible operator lacks options to customize the leader election resource lock behavior. This limits the flexibility of the operator and prevents users from adjusting lease duration and renew deadline according to their specific needs.
Changes: Implemented enhancements to the operator SDK to include additional flags for configuring leader election resource lock options. These changes provide users with the ability to specify the type of resource object used for locking during leader election and customize the lease duration and renew deadline.
Introduced --leader-elect-lease-duration flag to allow users to define the duration that non-leader candidates will wait to force acquire leadership. The default duration is set to 15 seconds.
Introduced --leader-elect-renew-deadline flag, enabling users to set the renew deadline, which determines the duration that the acting control plane will retry refreshing leadership before giving up. The default duration is set to 10 seconds.
Introduced --leader-elect-resource-lock flag to allow users to define the type of resource object that is used for locking during leader election. Supported options are 'leases', 'endpointsleases', and 'configmapsleases'. The default option is 'leases'.
These changes provide more flexibility and control over leader election behavior, allowing operators to adapt to various deployment scenarios and specific requirements. ([#6426](https://github.com/operator-framework/operator-sdk/pull/6426))
### Changes
- Currently, when setting `overrideValues` in your `watches.yaml`, every entry is logged with its key and its value. When working with confidential information such as credentials, logging those information would not be optimal nor desirable. Therefore, there should be a way to silence/suppress these values.
This feature introduces the `--suppress-override-values` boolean-flag for the `helm-operator`. When set to true, the value of the overrideValues entry is sanitized with this value "****".
This is a simple example of `overrideValues` of the `watches.yaml` ```yaml overrideValues:
x: y
```
The default-value of `--suppress-override-values` is `false` so therefore we would get this warning logged: `Chart value x overridden to y by operator's watches.yaml`
When setting `--suppress-override-values` `true` the warning will be logged in the following manner: `Chart value x overridden to **** by operator's watches.yaml`. ([#6469](https://github.com/operator-framework/operator-sdk/pull/6469))
- (images): Bumps all Operator SDK maintained images to now use ubi(-minimal) tag 8.8. ([#6466](https://github.com/operator-framework/operator-sdk/pull/6466))
### Bug Fixes
- In `run bundle-upgrade`, hash the cache directory name to avoid error of too long file name. ([#6477](https://github.com/operator-framework/operator-sdk/pull/6477))
================================================
FILE: changelog/generated/v1.31.0.md
================================================
## v1.31.0
### Changes
- (ansible): Update the `quay.io/operator-framework/ansible-operator` base image to now use Ansible 2.15.0. Removes pre-installed Python modules that are not required to build and run the `testdata/ansible/memcached-operator` sample. Updates Python to 3.9 to work with Ansible 2.15.0. ([#6483](https://github.com/operator-framework/operator-sdk/pull/6483))
- (ansible/v1): Updates the `ansible/v1` plugin scaffolding to: - Remove the `community.kubernetes` collection - Update the `operator_sdk.util` collection from `v0.4.0` --> `v0.5.0` - Update the `molecule.yaml` files to work with `molecule v5.1.0`. ([#6483](https://github.com/operator-framework/operator-sdk/pull/6483))
- (helm): Use informer to list helm secrets to improve performance. ([#6354](https://github.com/operator-framework/operator-sdk/pull/6354))
- Updated Reference from "to_be_owned.namespace" to "to_be_owned.metadata.namespace " in the ansible reference documentation. ([#6409](https://github.com/operator-framework/operator-sdk/pull/6409))
### Removals
- (ansible): Remove the `quay.io/operator-framework/ansible-operator-2.11-preview` image. This image will no longer be built after Operator-SDK v1.30.0. ([#6483](https://github.com/operator-framework/operator-sdk/pull/6483))
### Bug Fixes
- Fix a bug where `olm install` command is failed for "no-match" error.
The output in this case is something like:
```$ operator-sdk olm install --verbose ... FATA[0001] Failed to install OLM version "latest": failed to create CRDs and resources: no matches for kind "OLMConfig" in version "operators.coreos.com/v1"```. Now, in this case, operator-sdk tries to create the resource again, until it succeeds (or until the timeout exceeded). ([#6490](https://github.com/operator-framework/operator-sdk/pull/6490))
- Fix a bug where `run bundle` command does not copy all FBC manifests into the new catalog image if custom index-image is passed. ([#6512](https://github.com/operator-framework/operator-sdk/pull/6512))
- `markUnsafe` now correctly marks as unsafe the all variables passed in `spec`. ([#6376](https://github.com/operator-framework/operator-sdk/pull/6376))
================================================
FILE: changelog/generated/v1.32.0.md
================================================
## v1.32.0
### Additions
- For Helm-based operators, whenever the operator encounters an error during reconcilliation, it would attempt to rollback the changes with the `--force` option. This behavior could have undesired side effects in some scenario.
This change allows the users to change this behavior by adding the annotation, `helm.sdk.operatorframework.io/rollback-force: false`
to the custom resource. ([#6546](https://github.com/operator-framework/operator-sdk/pull/6546))
### Bug Fixes
- (helm): Use informer cache label selectors to reduce memory consumption. ([#6377](https://github.com/operator-framework/operator-sdk/pull/6377))
- (helm): Fix bug with detection of owner reference support when setting up dynamic watches. ([#6377](https://github.com/operator-framework/operator-sdk/pull/6377))
================================================
FILE: changelog/generated/v1.33.0.md
================================================
## v1.33.0
### Changes
- Bump supported Kubernetes version to 1.27. ([#6613](https://github.com/operator-framework/operator-sdk/pull/6613))
- **Breaking change**: (go/v4-alpha): go/v4 is now stable and is the default version used when scaffolding a Go based operator. ([#6613](https://github.com/operator-framework/operator-sdk/pull/6613))
- **Breaking change**: (kustomize/v2-alpha): kustomize/v2 is now stable and is the default version used in the plugin chain when using go/v4, ansible/v1, helm/v1, and hybrid/v1-alpha plugins. ([#6613](https://github.com/operator-framework/operator-sdk/pull/6613))
- Updated the supported OLM versions to 0.24.0, 0.25.0, and 0.26.0. ([#6613](https://github.com/operator-framework/operator-sdk/pull/6613))
### Deprecations
- (helm/v1): Deprecate the `--config` flag due to the controller-runtime ComponentConfig package being deprecated with the planned removal of support for loading manager options from a file. ([#6613](https://github.com/operator-framework/operator-sdk/pull/6613))
### Bug Fixes
- `operator-sdk olm install`: fix a bug where the retry logic would not retry until the command's timeout was reached, resulting in early exiting of the command before the specified timeout was reached. ([#6613](https://github.com/operator-framework/operator-sdk/pull/6613))
================================================
FILE: changelog/generated/v1.34.0.md
================================================
## v1.34.0
### Bug Fixes
- (helm/v1) Fix an issue that multi-arch images cannot be built from the project Makefile. ([#6661](https://github.com/operator-framework/operator-sdk/pull/6661))
================================================
FILE: changelog/generated/v1.35.0.md
================================================
## v1.35.0
### Changes
- For Ansible-based operators, upgrade the version of the Ansible Operator Plugin used in operator-sdk to v1.34.2. ([#6749](https://github.com/operator-framework/operator-sdk/pull/6749))
### Bug Fixes
- (helm/v1) Fix broken helm-operator role scaffolding which causes reconciler to hang due to lack of permissions. ([#6769](https://github.com/operator-framework/operator-sdk/pull/6769))
================================================
FILE: changelog/generated/v1.36.0.md
================================================
## v1.36.0
### Changes
- - Upgrade Kubernetes dependencies from `1.28` to `1.29`. ([#6736](https://github.com/operator-framework/operator-sdk/pull/6736))
================================================
FILE: changelog/generated/v1.37.0.md
================================================
## v1.37.0
### Removals
- **Breaking change**: Remove the Quarkus plugin (java-operator-plugins integration). ([#6824](https://github.com/operator-framework/operator-sdk/pull/6824))
- **Breaking change**: (hybrid.helm/v1-alpha) Remove hybrid-helm v1-alpha support, due to low adoption, in favor of maintenance simplicity. ([#6833](https://github.com/operator-framework/operator-sdk/pull/6833))
================================================
FILE: changelog/generated/v1.38.0.md
================================================
## v1.38.0
### Changes
- For Go-based, Helm-based and Ansible-based operators this release moves to Kubernetes 1.30 API's and Kubebuilder v4 Scaffolding, specifically utilizing the v4.1.1 version. The update to Kubebuiler results in some scaffolding changes which more information can be found below: - Discontinue usage of [kube-rbac-proxy](https://github.com/brancz/kube-rbac-proxy) in the default scaffolding of new projects. For further information, see: [Action Required: Ensure that you no longer use gcr.io/kubebuilder images](https://github.com/kubernetes-sigs/kubebuilder/discussions/3907) - The `go/v2` or `go/v3` layouts have been removed, you must upgrade to `go/v4` to be compatible with this release and future updates. To know how to upgrade,check the [migration documentation](https://book.kubebuilder.io/migration/v3vsv4). - Re-introduces authn/authz protection for the metrics endpoint using [`WithAuthenticationAndAuthorization`](https://github.com/kubernetes-sigs/controller-runtime/blob/v0.18.4/pkg/metrics/filters/filters.go#L35) provided by controller-runtime instead of kube-rbac-proxy; which usage was [discontinued in the project](https://github.com/kubernetes-sigs/kubebuilder/discussions/3907). Please, ensure that you no longer use the image `gcr.io/kubebuilder/kube-rbac-proxy`. Images provided under `gcr.io/kubebuilder/` will be unavailable from **March 18, 2025**. To learn more about any of the metrics changes please look at the Kubebuilder book [metrics](https://book.kubebuilder.io/reference/metrics) page.
For `Helm-based` and `Ansible-based` operators, a new flag called `metrics-require-rbac` was introduced into the runtime/binary, to control adding [`WithAuthenticationAndAuthorization`](https://github.com/kubernetes-sigs/controller-runtime/blob/v0.18.4/pkg/metrics/filters/filters.go#L35) to `Metrics.FilterProvider` of controller-runtime. This was done to ensure forwards and backwards compatibility of the binary and images with any scaffolded content. ([#6862](https://github.com/operator-framework/operator-sdk/pull/6862))
### Bug Fixes
- An additional condition is included for matching `apiVersion` of example CRs with CRD `version` when searching for the CRD in the CSV. Previously, The `olm-spec-descriptors` scorecard test failed when multiple versions of CRD is included in the CSV. The CR specified in `alm-examples` annotations are validated only against the first matched CRD (by name), which is incorrect. This ensures the correct CRD version is selected for validations. ([#6784](https://github.com/operator-framework/operator-sdk/pull/6784))
- Fix naive YAML split in `run bundle` command. ([#6829](https://github.com/operator-framework/operator-sdk/pull/6829))
================================================
FILE: changelog/generated/v1.39.0.md
================================================
## v1.39.0
### Changes
- For Go-based, Helm-based and Ansible-based operators this release moves to Kubernetes 1.31 API's and Kubebuilder v4 Scaffolding, specifically utilizing the v4.2.0 version. The update to Kubebuiler results in some scaffolding changes which more information can be found below: - Add support to protect project with [network policies](https://kubernetes.io/docs/concepts/services-networking/network-policies/) ([#3853](https://github.com/kubernetes-sigs/kubebuilder/pull/3853)). ([#6878](https://github.com/operator-framework/operator-sdk/pull/6878))
================================================
FILE: changelog/generated/v1.39.1.md
================================================
## v1.39.1
No changes for this release!
================================================
FILE: changelog/generated/v1.39.2.md
================================================
## v1.39.2
No changes for this release!
================================================
FILE: changelog/generated/v1.4.0.md
================================================
## v1.4.0
### Additions
- For Helm-based operators, added Liveness and Readiness probe by default using [`healthz.Ping`](https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/healthz#CheckHandler). ([#4326](https://github.com/operator-framework/operator-sdk/pull/4326))
- For Ansible-based operators, added Liveness and Readiness probe by default using [`healthz.Ping`](https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/healthz#CheckHandler). ([#4326](https://github.com/operator-framework/operator-sdk/pull/4326))
- For Ansible/Helm-based operators, added new flag `--health-probe-bind-address` to set the health probe address. ([#4326](https://github.com/operator-framework/operator-sdk/pull/4326))
- (ansible/v1, helm/v1) Added plugin objects for the `manifests` and `scorecard` phase 2 plugins. ([#4419](https://github.com/operator-framework/operator-sdk/pull/4419))
- For Ansible-based and Helm-based operators, as well as for the Operator SDK and the (custom) scorecard tests, the Docker base images are pinned to improve the reproducibility of builds using Docker. ([#4417](https://github.com/operator-framework/operator-sdk/pull/4417))
### Changes
- Changed the suggested finalizer format to `<qualified-group>/<finalizer-name>`. ([#4472](https://github.com/operator-framework/operator-sdk/pull/4472))
- Upgraded the `kudobuilder/kuttl` base image version in the `scorecard-test-kuttl` image to v0.8.0. ([#4391](https://github.com/operator-framework/operator-sdk/pull/4391))
- (go/v2) Changed `go` PROJECT plugin object to `manifests` and `scorecard` objects (`.sdk.operatorframework.io` suffix). ([#4419](https://github.com/operator-framework/operator-sdk/pull/4419))
- (ansible/v1, helm/v1) Post-fixed positional directory argument `.` in `docker-build` make target to align with `podman`. ([#4466](https://github.com/operator-framework/operator-sdk/pull/4466))
- For Ansible-based operators, the Python version has been updated to a newer version, from 3.6 to 3.8 to take advantage of performance improvements, language additions, security updates and generally better availability for local development. ([#4413](https://github.com/operator-framework/operator-sdk/pull/4413))
### Deprecations
- For Ansible-based operators, the `/ping` endpoint is deprecated. Use `/healthz` instead. ([#4326](https://github.com/operator-framework/operator-sdk/pull/4326))
### Bug Fixes
- Project version now determines how package name is retrieved for a project. ([#4431](https://github.com/operator-framework/operator-sdk/pull/4431))
- `run bundle-upgrade` now handles error gracefully when a previous operator version doesn't exist. ([#4451](https://github.com/operator-framework/operator-sdk/pull/4451))
- `run bundle` and `run bundle-upgrade` now validate the value passed to the hidden flag `--mode` before running a bundle. ([#4462](https://github.com/operator-framework/operator-sdk/pull/4462))
- For Go-based projects, `generate <bundle|packagemanifests>` subcommands now consider package and type names when parsing Go API types files to generate a CSV's `owned.customresourcedefinitions`, such that types in different packages and files will not overwrite each other. ([#4445](https://github.com/operator-framework/operator-sdk/pull/4445))
- Bumped operator-framework/api to prevent `operator-sdk bundle validate` from exiting non-0 when validation emits only warnings. ([#4458](https://github.com/operator-framework/operator-sdk/pull/4458))
- Fixed panic when "operator-sdk bundle validate" fails. ([#4386](https://github.com/operator-framework/operator-sdk/pull/4386))
- Update containerd dependency to correctly handle running the Operator SDK CLI on Apple Silicon. ([#4359](https://github.com/operator-framework/operator-sdk/pull/4359))
- Fixed invalid object names generated for long package names passed to `run packagemanifests` & `run bundle`. ([#4471](https://github.com/operator-framework/operator-sdk/pull/4471))
- Corrected the download URL for helm-operator and ansible-operator in their respective project types. ([#4407](https://github.com/operator-framework/operator-sdk/pull/4407))
- Fixed the order of helm-operator, ansible-operator, and kustomize binary checks in the Makefile. ([#4407](https://github.com/operator-framework/operator-sdk/pull/4407))
- Fixed a bug that caused the Helm operator to remove the finalizer without doing a helm uninstall. ([#3431](https://github.com/operator-framework/operator-sdk/pull/3431))
- For Helm-based operators, do not add owner references to resources that contain the Helm annotation: 'helm.sh/resource-policy: keep'. ([#4389](https://github.com/operator-framework/operator-sdk/pull/4389))
================================================
FILE: changelog/generated/v1.40.0.md
================================================
## v1.40.0
### Additions
- (go/v4) For Go-based operators, a devcontainer is now available to allow users to develop and test the operator in a local environment and leverage on solutions such as VS Code Remote Containers and GitHub Codespaces to have a consistent development environment. ([#6928](https://github.com/operator-framework/operator-sdk/pull/6928))
- (go/v4) For Go-based operators, new GitHub Actions are available to ensure better quality of their code. ([#6928](https://github.com/operator-framework/operator-sdk/pull/6928))
- (go/v4) For Go-based operators, controllers now use `.Named("<Kind>")` in `SetupWithManager` to prevent naming conflicts in multi-group projects. ([More info](https://github.com/kubernetes-sigs/kubebuilder/pull/4162)). ([#6928](https://github.com/operator-framework/operator-sdk/pull/6928))
- (go/v4) For Go-based operators, a new Makefile target named `lint-config` has been added to verify that your `.golangci.yaml` configuration file is valid. This helps catch issues early when customizing lint rules.
([More info](https://github.com/kubernetes-sigs/kubebuilder/pull/4462)). ([#6928](https://github.com/operator-framework/operator-sdk/pull/6928))
- For ALL-based operators, scaffolded resources now include the `app.kubernetes.io/name` label to support Kubernetes best practices for app identification. ([More info](https://github.com/kubernetes-sigs/kubebuilder/pull/4437/files)). ([#6928](https://github.com/operator-framework/operator-sdk/pull/6928))
- For ALL-based operators, new role manifests are now scaffolded under the `config/rbac/` directory to assist cluster administrators. For each API defined in the project, three role files are generated: `<kind>_admin_role.yaml`, `<kind>_editor_role.yaml`, and `<kind>_viewer_role.yaml`.
These roles are not applied by default. Instead, they are provided as helpers, allowing cluster administrators to customize and apply appropriate permissions as needed.
The primary motivation for scaffolding these roles is to simplify integration with Kubernetes' aggregated roles mechanism. By including annotations such as `rbac.authorization.k8s.io/aggregate-to-admin: "true"`, `rbac.authorization.k8s.io/aggregate-to-edit: "true"`, and `rbac.authorization.k8s.io/aggregate-to-view: "true"`, these role definitions can automatically contribute permissions to the default admin, edit, and view roles in a cluster when applied.
For more information on Kubernetes RBAC and aggregated roles, see: https://kubernetes.io/docs/reference/access-authn-authz/rbac/. ([#6928](https://github.com/operator-framework/operator-sdk/pull/6928))
- For ALL-based operators, new role manifests are now scaffolded under the `config/rbac/` directory to assist cluster administrators. For each API defined in the project, three role files are generated: `<kind>_admin_role.yaml`, `<kind>_editor_role.yaml`, and `<kind>_viewer_role.yaml`.
These roles are not applied by default. Instead, they are provided as helpers, allowing cluster administrators to customize and apply appropriate permissions as needed.
The primary motivation for scaffolding these roles is to simplify integration with Kubernetes' aggregated roles mechanism. By including annotations such as `rbac.authorization.k8s.io/aggregate-to-admin: "true"`, `rbac.authorization.k8s.io/aggregate-to-edit: "true"`, and `rbac.authorization.k8s.io/aggregate-to-view: "true"`, these role definitions can automatically contribute permissions to the default admin, edit, and view roles in a cluster when applied.
For more information on Kubernetes RBAC and aggregated roles, see: https://kubernetes.io/docs/reference/access-authn-authz/rbac/. ([#6928](https://github.com/operator-framework/operator-sdk/pull/6928))
### Changes
- The bundle build target now respects the CONTAINER_TOOL variable, allowing users to use alternative container tools like podman instead of docker. ([#6932](https://github.com/operator-framework/operator-sdk/pull/6932))
- For All-based Operators, upgrade OPM to version from `v1.23.0` to `v1.55.0`, which includes several bug fixes and improvements. For further information, see: https://github.com/operator-framework/operator-registry/releases. ([#6953](https://github.com/operator-framework/operator-sdk/pull/6953))
- (go/v4) For Go-based Operators, the `main.go` file has been enhanced to support real TLS certificates for both webhooks and the metrics server, with automated certificate rotation via cert-manager. This change improves security and aligns with production-grade best practices.
Previously, setups relied on kube-rbac-proxy (deprecated in Operator SDK and Kubebuilder, see: [kubebuilder/discussions/3907](https://github.com/kubernetes-sigs/kubebuilder/discussions/3907)), which generated TLS certificates dynamically — a method no longer recommended for secure environments. The updated approach adopts static certificates managed by cert-manager.
Additionally, integrations with Prometheus now support scraping metrics using the cert-manager generated certificates. A related fix was introduced to ensure that CA injection patches are only applied to CRDs with a conversion webhook, avoiding unnecessary annotations.
To support these improvements, changes to `config/default/kustomization.yaml` are required. These include: configuring webhook and metrics server certificates, enabling Prometheus scraping with TLS, and correcting CA injection behavior.
These updates also introduce flexible opt-in mechanisms, allowing users to selectively enable or disable: - TLS for the metrics server via cert-manager - TLS for webhooks via cert-manager - TLS configuration for Prometheus scraping
Together, these changes are part of a broader effort to elevate the default security posture and configurability of Go-based operators. ([#6928](https://github.com/operator-framework/operator-sdk/pull/6928))
- (go/v4) For Go-based operators, a fix has been implemented to ensure that the Prometheus configuration can properly scrape metrics from the operator's metrics server when TLS is enabled. ([#6928](https://github.com/operator-framework/operator-sdk/pull/6928))
- (go/v4) For Go-based operators, a fix has been implemented to ensure that CA injection patches are applied only to CRDs that define a conversion webhook.
Previously, the CA injection patch logic was overly broad — applying injection annotations to all CRDs whenever a webhook was scaffolded with the `--conversion` flag. This behavior was introduced in Kubebuilder release `v3.5.0` when replacements were introduced in place of legacy vars and the `kustomize/v2-alpha` plugin was adopted.
The incorrect behavior likely went unnoticed due to incomplete support for conversion webhooks in earlier versions. This release addresses that gap, enabling proper scaffolding and CA injection behavior specifically for CRDs with conversion webhooks.
To support this improvement, a new marker has been introduced: `+kubebuilder:scaffold:crdkustomizecainjectionns`. This marker ensures that the correct replacements are generated in `config/default/kustomization.yaml` for CA injection. Additionally, the `kubebuilder:scaffold:crdkustomizewebhookpatch` marker was created to ensure that the webhook patch is only applied to CRDs that have a conversion webhook in the `config/crd/kustomization.yaml` file.
For more information on this and other scaffolding markers, refer to the official Kubebuilder documentation: https://book.kubebuilder.io/reference/markers/scaffold. ([#6928](https://github.com/operator-framework/operator-sdk/pull/6928))
- (go/v4) For Go-based operators, ENVTEST version management is now automated by deriving values from `go.mod`, and controller tests now locate binaries dynamically. ([More info](https://github.com/kubernetes-sigs/kubebuilder/pull/4401))
These updates improve the developer experience by: - Reducing manual configuration for ENVTEST. - Ensuring IDEs or test runners can locate the binaries reliably. - Making controller test scaffolding more robust and portable. ([#6928](https://github.com/operator-framework/operator-sdk/pull/6928))
- (go/v4) For Go-based operators, updated GolangCI-Lint configuration to replace the deprecated `exportloopref` linter with the `copyloopvar` linter. ([#6928](https://github.com/operator-framework/operator-sdk/pull/6928))
- (go/v4) For Go-based operators, upgraded project scaffolding to Go 1.23, Kubernetes v0.32.1, and controller-runtime v0.20.4.
The default project scaffolding for Go-based operators has been updated to use:
- **Go 1.23**
- **Kubernetes modules v0.32.1**
- **controller-runtime v0.20.4**
- **Ginkgo v2.22.0** and **Gomega v1.36.1**. ([#6928](https://github.com/operator-framework/operator-sdk/pull/6928))
- **Breaking change**: (go/v4) For Go-based operators, upgraded controller-runtime from `v0.19.4` to `v0.20.0` and added support for Kubernetes 1.32. Removed deprecated `webhook.Validator` and `webhook.Defaulter` interfaces from the runtime. Webhooks should no longer reside under the `api/` directory—this has been the default behavior since Kubebuilder rlease [v4.3.0)(https://github.com/kubernetes-sigs/kubebuilder/releases/tag/v4.3.0).
A `--legacy=true` flag was added to support scaffolding webhooks in the old layout when needed. ([More info](https://github.com/kubernetes-sigs/kubebuilder/pull/4492) · [Migration guide](https://github.com/kubernetes-sigs/kubebuilder/releases/tag/v4.3.0)). ([#6928](https://github.com/operator-framework/operator-sdk/pull/6928))
================================================
FILE: changelog/generated/v1.41.0.md
================================================
## v1.41.0
### Additions
- For Go-based operators, add new target to setup/teardown Kind cluster for E2E tests and remove Kind setup from CI workflows. ([#6954](https://github.com/operator-framework/operator-sdk/pull/6954))
### Changes
- **Breaking change**: For Go-based operators, upgrade the Go version from `1.23` to `1.24`. ([#6954](https://github.com/operator-framework/operator-sdk/pull/6954))
- For Go-based operators, upgrade golangci-lint to `v2.1.0` and update `.golangci.yml` to the v2 config format with enhanced structure and controls. ([#6954](https://github.com/operator-framework/operator-sdk/pull/6954))
- For Go-based operators, upgrade controller-gen from `v0.17.2` to `v0.18.0`. ([#6954](https://github.com/operator-framework/operator-sdk/pull/6954))
- For Go-based operators, upgrade controller-runtime from `v0.20.4` to `v0.21.0` and kubernetes dependencies to `v0.33`. ([#6954](https://github.com/operator-framework/operator-sdk/pull/6954))
================================================
FILE: changelog/generated/v1.42.0.md
================================================
## v1.42.0
No changes for this release!
================================================
FILE: changelog/generated/v1.42.1.md
================================================
## v1.42.1
No changes for this release!
================================================
FILE: changelog/generated/v1.42.2.md
================================================
## v1.42.2
No changes for this release!
================================================
FILE: changelog/generated/v1.5.0.md
================================================
## v1.5.0
### Additions
- Added support for markers for files with the `yml` extension. More info: [kubernetes-sigs/kubebuilder#1907](https://github.com/kubernetes-sigs/kubebuilder/pull/1907). ([#4402](https://github.com/operator-framework/operator-sdk/pull/4402))
- (go/v3) Added the `--force` option to the `create webhook` command. More info: [kubernetes-sigs/kubebuilder#1903](https://github.com/kubernetes-sigs/kubebuilder/pull/1903). ([#4402](https://github.com/operator-framework/operator-sdk/pull/4402))
- (go/v3) Added `ErrorIfCRDPathMissing` config by default to controller's `suite_tests.go`. More info: [kubernetes-sigs/kubebuilder#1910](https://github.com/kubernetes-sigs/kubebuilder/pull/1910). ([#4402](https://github.com/operator-framework/operator-sdk/pull/4402))
- For Ansible-based operators, allow passing a `--graceful-shutdown-timeout` to configure the duration the manager should wait before stopping. ([#4571](https://github.com/operator-framework/operator-sdk/pull/4571))
- (go/v3) Create and bind to a non-default service account ([kubernetes-sigs/kubebuilder#2070](https://github.com/kubernetes-sigs/kubebuilder/pull/2070)). ([#4626](https://github.com/operator-framework/operator-sdk/pull/4626))
### Changes
- (go/v3) Upgraded the `sigs.k8s.io/kubebuilder-declarative-pattern` dependency used by `create api --pattern=addon`. More info: [kubernetes-sigs/kubebuilder#1946](https://github.com/kubernetes-sigs/kubebuilder/pull/1946). ([#4402](https://github.com/operator-framework/operator-sdk/pull/4402))
- (go/v2, go/v3) Added Makefile help. ([#4402](https://github.com/operator-framework/operator-sdk/pull/4402))
- (go/v3) Changed the manager pod template's security context `runAsUser: 65532` to `runAsNonRoot: true`. More info: [kubernetes-sigs/kubebuilder#1978](https://github.com/kubernetes-sigs/kubebuilder/pull/1978). ([#4402](https://github.com/operator-framework/operator-sdk/pull/4402))
- **Breaking change**: PROJECT config version 3-alpha has been upgraded to version 3. ([#4613](https://github.com/operator-framework/operator-sdk/pull/4613))
- Improved `generate bundle` and `generate packagemanifests` handling and help text for use outside of a project. ([#4514](https://github.com/operator-framework/operator-sdk/pull/4514))
- (go/v3) Pinned controller-runtime to v0.7.2. ([#4626](https://github.com/operator-framework/operator-sdk/pull/4626))
- For Ansible-based operators, change the level of the proxy skipping cache logs to debug level. ([#4511](https://github.com/operator-framework/operator-sdk/pull/4511))
### Bug Fixes
- For Go-based operators, fixed `create api --force` such that it actually overwrites all files. More info: [kubernetes-sigs/kubebuilder#1903](https://github.com/kubernetes-sigs/kubebuilder/pull/1903). ([#4402](https://github.com/operator-framework/operator-sdk/pull/4402))
- Upgraded the `gcr.io/kubebuilder/kube-rbac-proxy` image version from `0.5.0` to `0.8.0` to support rootless run mode. More info [kubernetes-sigs/kubebuilder#1955](https://github.com/kubernetes-sigs/kubebuilder/pull/1955). ([#4402](https://github.com/operator-framework/operator-sdk/pull/4402))
- (go/v3) Correctly named health/readiness endpoints as `healthz` and `readyz`, respectively. More info [kubernetes-sigs/kubebuilder#1910](https://github.com/kubernetes-sigs/kubebuilder/pull/1910). ([#4402](https://github.com/operator-framework/operator-sdk/pull/4402))
- (go/v3) Tolerate `.` directories when checking if dir is empty in `init`. More info: [kubernetes-sigs/kubebuilder#1944](https://github.com/kubernetes-sigs/kubebuilder/pull/1944). ([#4402](https://github.com/operator-framework/operator-sdk/pull/4402))
- Properly consider all Go files when generating a CSV's `spec.customresourcedefinitions.owned`. ([#4507](https://github.com/operator-framework/operator-sdk/pull/4507))
- Fixed samples kustomization.yaml generation on `operator-sdk init --plugins=helm --helm-chart=<chart>`, caused by out-of-order operations in plugin code. ([#4584](https://github.com/operator-framework/operator-sdk/pull/4584))
- Skip CSV definitions parsing in `generate kustomize manifests` if the APIs dir does not exist, as projects may use only required APIs. ([#4624](https://github.com/operator-framework/operator-sdk/pull/4624))
- Bump cryptography dependency in ansible-operator to `3.3.2`. This will fix a potential security bug related to update() calls. Ref: https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst#332---2021-02-07. ([#4539](https://github.com/operator-framework/operator-sdk/pull/4539))
- Fixed ambiguous `--input-dir` and `--deploy-dir` flag semantics for `generate bundle`. ([#4514](https://github.com/operator-framework/operator-sdk/pull/4514))
- (ansible/v1, helm/v1) Upgraded the `gcr.io/kubebuilder/kube-rbac-proxy` image version from `0.5.0` to `0.8.0` to support rootless run mode. ([#4498](https://github.com/operator-framework/operator-sdk/pull/4498))
- For Ansible/Helm-based operators, fix swapped readinessProbe/livenessProbe in manager. ([#4546](https://github.com/operator-framework/operator-sdk/pull/4546))
================================================
FILE: changelog/generated/v1.6.0.md
================================================
## v1.6.0
### Additions
- For Golang-based operators, added the `declarative.go/v1` plugin which customizes initialized projects with patterns from [kubernetes-sigs/kubebuilder-declarative-pattern](https://github.com/kubernetes-sigs/kubebuilder-declarative-pattern). (e.g `operator-sdk create api --plugins=go/v3,declarative`). ([#4731](https://github.com/operator-framework/operator-sdk/pull/4731))
- Added `kustomize.common/v1` plugin which scaffolds the a commonly used project base that leverages `kustomize`. ([#4730](https://github.com/operator-framework/operator-sdk/pull/4730))
- (ansible/v1, helm/v1) Added the option to configure `ansible-operator` and `helm-operator` with a [component config](https://master.book.kubebuilder.io/component-config-tutorial/tutorial.html). ([#4701](https://github.com/operator-framework/operator-sdk/pull/4701))
- (ansible/v1, helm/v1) Add rules for leader election. ([#4701](https://github.com/operator-framework/operator-sdk/pull/4701))
- Added [`alpha config-gen`](https://github.com/kubernetes-sigs/kubebuilder/tree/master/pkg/cli/alpha/config-gen), a kustomize plugin to specialize configuration for kubebuilder-style projects. This feature is *alpha* and subject to breaking changes. ([#4670](https://github.com/operator-framework/operator-sdk/pull/4670))
- (helm/v1, ansible/v1) Added Makefile `help` target. ([#4660](https://github.com/operator-framework/operator-sdk/pull/4660))
- (ansible/v1, helm/v1) Added `securityContext`'s to the manager's Deployment to disallow running as root user. ([#4655](https://github.com/operator-framework/operator-sdk/pull/4655))
- Added `--ca-secret-name` to `run bundle` and `run bundle-upgrade` to configure the registry Pod with an in-cluster certificate Secret to use TLS with a private registry. ([#4703](https://github.com/operator-framework/operator-sdk/pull/4703))
- For Helm based-operators, added annotation `helm.sdk.operatorframework.io/uninstall-wait: "true"` to allow all resources to be deleted before removing the custom resource's finalizer. ([#4487](https://github.com/operator-framework/operator-sdk/pull/4487))
- (go/v2, go/v3, ansible/v1, helm/v1) Added the `opm` and `catalog-build` Makefile targets to download [`opm`](https://github.com/operator-framework/operator-registry/blob/v1.15.1/docs/design/opm-tooling.md) and build operator catalogs either from scratch or an existing catalog. ([#4406](https://github.com/operator-framework/operator-sdk/pull/4406))
- Added new optional flags `--delete-all`, `--delete-crds` and `--delete-operator-groups` to the cleanup command. ([#4619](https://github.com/operator-framework/operator-sdk/pull/4619))
- Added `--service-account` to `run bundle` and `run bundle-upgrade` to bind registry objects to a non-default service account. ([#4694](https://github.com/operator-framework/operator-sdk/pull/4694))
- Added `--pull-secret-name` to `run bundle` and `run bundle-upgrade` to configure the registry Pod with an in-cluster docker config Secret to pull bundle images from private registries. ([#4694](https://github.com/operator-framework/operator-sdk/pull/4694))
- (ansible/v1, helm/v1) Create and bind controller-manager to a non-default service account ([kubebuilder#2070](https://github.com/kubernetes-sigs/kubebuilder/pull/2070)). ([#4653](https://github.com/operator-framework/operator-sdk/pull/4653))
### Changes
- For Ansible-based Operators: Update Python dependencies.
- openshift (0.11.2 -> 0.12.0)
- kubernetes (11.0.0 -> 12.0.1)
- ansible-runner (1.4.6 -> 1.4.7)
- ansible (2.9.15 -> 2.9.19). ([#4734](https://github.com/operator-framework/operator-sdk/pull/4734))
- (ansible/v1) Update scaffolded requirements.yml to pull in newer versions of the Ansible collections.
- community.kubernetes (1.1.1 -> 1.2.1)
- operator_sdk.util (0.1.0 -> 0.2.0). ([#4734](https://github.com/operator-framework/operator-sdk/pull/4734))
- (helm/v1) Explicitly set `--health-probe-bind-address` in the manager's auth proxy patch. ([#4654](https://github.com/operator-framework/operator-sdk/pull/4654))
- (ansible/v1) Explicitly set `--health-probe-bind-address` in the manager's auth proxy patch. ([#4654](https://github.com/operator-framework/operator-sdk/pull/4654))
- (go/v2, go/v3, ansible/v1, helm/v1) Changed `BUNDLE_IMG` and added `IMAGE_TAG_BASE` Makefile variables to allow one line bundle and catalog image builds. ([#4406](https://github.com/operator-framework/operator-sdk/pull/4406))
- For Ansible-based operators, collections as main dependencies for the operator installed with ansible-galaxy are pinned to specific versions to prevent hard to track bugs. ([#4529](https://github.com/operator-framework/operator-sdk/pull/4529))
- Update community Kubernetes Ansible collection to version 1.1.1. ([#4594](https://github.com/operator-framework/operator-sdk/pull/4594))
- Bumped urllib3 in ansible-operator-base and ansible-operator images to 1.26.4 for a security fix. ([#4723](https://github.com/operator-framework/operator-sdk/pull/4723))
- For Ansible-based operators, Python package installation in the Docker image is delegated to a pipenv managed Pipfile and Pipfile.lock, pinning both the main installed packages and their subdependencies. This prevents installing conflicting (sub)dependencies. ([#4543](https://github.com/operator-framework/operator-sdk/pull/4543))
- For Ansible-based operators, Python package installation in the Docker image is delegated to a pipenv managed Pipfile and Pipfile.lock, pinning both the main installed packages and their subdependencies. This prevents installing conflicting (sub)dependencies. ([#4543](https://github.com/operator-framework/operator-sdk/pull/4543))
### Deprecations
- (ansible/v1, helm/v1) The flags `--enable-leader-election` and `--metrics-addr` were deprecated in favor of `--leader-elect` and `--metrics-bind-address`, respectively, to follow upstream conventions. ([#4654](https://github.com/operator-framework/operator-sdk/pull/4654))
### Bug Fixes
- (go/v3) Create webhook manifests in `config/` on running `create webhook`, not `init`. ([#4701](https://github.com/operator-framework/operator-sdk/pull/4701))
- (manifests/v2) Added a `config/manifests` kustomize patch to remove the cert-manager volume and volumeMount from manifests destined for `generate <bundle|packagemanifests>`. ([#4623](https://github.com/operator-framework/operator-sdk/pull/4623))
- For Helm-based operators, fixed handling of `kind: List` whereby the operator fails when trying to set watch on the object. Watches are created for objects in the list instead. ([#4682](https://github.com/operator-framework/operator-sdk/pull/4682))
- (go/v2, go/v3, ansible/v1, helm/v1) Fixed the Prometheus `ServiceMonitor` metrics endpoint, which was not configured to be scraped correctly. ([#4680](https://github.com/operator-framework/operator-sdk/pull/4680))
- In Ansible-based operators, mark the input variables from custom resources as unsafe by default. ([#4566](https://github.com/operator-framework/operator-sdk/pull/4566))
================================================
FILE: changelog/generated/v1.6.1.md
================================================
## v1.6.1
### Additions
- For Golang-based operators, added the `declarative.go/v1` plugin which customizes initialized projects with patterns from [kubernetes-sigs/kubebuilder-declarative-pattern](https://github.com/kubernetes-sigs/kubebuilder-declarative-pattern). (e.g `operator-sdk create api --plugins=go/v3,declarative`). ([#4731](https://github.com/operator-framework/operator-sdk/pull/4731))
- Added `kustomize.common/v1` plugin which scaffolds the a commonly used project base that leverages `kustomize`. ([#4730](https://github.com/operator-framework/operator-sdk/pull/4730))
- (ansible/v1, helm/v1) Added the option to configure `ansible-operator` and `helm-operator` with a [component config](https://master.book.kubebuilder.io/component-config-tutorial/tutorial.html). ([#4701](https://github.com/operator-framework/operator-sdk/pull/4701))
- (ansible/v1, helm/v1) Add rules for leader election. ([#4701](https://github.com/operator-framework/operator-sdk/pull/4701))
- Added [`alpha config-gen`](https://github.com/kubernetes-sigs/kubebuilder/tree/master/pkg/cli/alpha/config-gen), a kustomize plugin to specialize configuration for kubebuilder-style projects. This feature is *alpha* and subject to breaking changes. ([#4670](https://github.com/operator-framework/operator-sdk/pull/4670))
- (helm/v1, ansible/v1) Added Makefile `help` target. ([#4660](https://github.com/operator-framework/operator-sdk/pull/4660))
- (ansible/v1, helm/v1) Added `securityContext`'s to the manager's Deployment to disallow running as root user. ([#4655](https://github.com/operator-framework/operator-sdk/pull/4655))
- Added `--ca-secret-name` to `run bundle` and `run bundle-upgrade` to configure the registry Pod with an in-cluster certificate Secret to use TLS with a private registry. ([#4703](https://github.com/operator-framework/operator-sdk/pull/4703))
- For Helm based-operators, added annotation `helm.sdk.operatorframework.io/uninstall-wait: "true"` to allow all resources to be deleted before removing the custom resource's finalizer. ([#4487](https://github.com/operator-framework/operator-sdk/pull/4487))
- (go/v2, go/v3, ansible/v1, helm/v1) Added the `opm` and `catalog-build` Makefile targets to download [`opm`](https://github.com/operator-framework/operator-registry/blob/v1.15.1/docs/design/opm-tooling.md) and build operator catalogs either from scratch or an existing catalog. ([#4406](https://github.com/operator-framework/operator-sdk/pull/4406))
- Added new optional flags `--delete-all`, `--delete-crds` and `--delete-operator-groups` to the cleanup command. ([#4619](https://github.com/operator-framework/operator-sdk/pull/4619))
- Added `--service-account` to `run bundle` and `run bundle-upgrade` to bind registry objects to a non-default service account. ([#4694](https://github.com/operator-framework/operator-sdk/pull/4694))
- Added `--pull-secret-name` to `run bundle` and `run bundle-upgrade` to configure the registry Pod with an in-cluster docker config Secret to pull bundle images from private registries. ([#4694](https://github.com/operator-framework/operator-sdk/pull/4694))
- (ansible/v1, helm/v1) Create and bind controller-manager to a non-default service account ([kubebuilder#2070](https://github.com/kubernetes-sigs/kubebuilder/pull/2070)). ([#4653](https://github.com/operator-framework/operator-sdk/pull/4653))
### Changes
- For Ansible-based Operators: Update Python dependencies.
- openshift (0.11.2 -> 0.12.0)
- kubernetes (11.0.0 -> 12.0.1)
- ansible-runner (1.4.6 -> 1.4.7)
- ansible (2.9.15 -> 2.9.19). ([#4734](https://github.com/operator-framework/operator-sdk/pull/4734))
- (ansible/v1) Update scaffolded requirements.yml to pull in newer versions of the Ansible collections.
- community.kubernetes (1.1.1 -> 1.2.1)
- operator_sdk.util (0.1.0 -> 0.2.0). ([#4734](https://github.com/operator-framework/operator-sdk/pull/4734))
- (helm/v1) Explicitly set `--health-probe-bind-address` in the manager's auth proxy patch. ([#4654](https://github.com/operator-framework/operator-sdk/pull/4654))
- (ansible/v1) Explicitly set `--health-probe-bind-address` in the manager's auth proxy patch. ([#4654](https://github.com/operator-framework/operator-sdk/pull/4654))
- (go/v2, go/v3, ansible/v1, helm/v1) Changed `BUNDLE_IMG` and added `IMAGE_TAG_BASE` Makefile variables to allow one line bundle and catalog image builds. ([#4406](https://github.com/operator-framework/operator-sdk/pull/4406))
- For Ansible-based operators, collections as main dependencies for the operator installed with ansible-galaxy are pinned to specific versions to prevent hard to track bugs. ([#4529](https://github.com/operator-framework/operator-sdk/pull/4529))
- Update community Kubernetes Ansible collection to version 1.1.1. ([#4594](https://github.com/operator-framework/operator-sdk/pull/4594))
- Bumped urllib3 in ansible-operator-base and ansible-operator images to 1.26.4 for a security fix. ([#4723](https://github.com/operator-framework/operator-sdk/pull/4723))
- For Ansible-based operators, Python package installation in the Docker image is delegated to a pipenv managed Pipfile and Pipfile.lock, pinning both the main installed packages and their subdependencies. This prevents installing conflicting (sub)dependencies. ([#4543](https://github.com/operator-framework/operator-sdk/pull/4543))
- For Ansible-based operators, Python package installation in the Docker image is delegated to a pipenv managed Pipfile and Pipfile.lock, pinning both the main installed packages and their subdependencies. This prevents installing conflicting (sub)dependencies. ([#4543](https://github.com/operator-framework/operator-sdk/pull/4543))
### Deprecations
- (ansible/v1, helm/v1) The flags `--enable-leader-election` and `--metrics-addr` were deprecated in favor of `--leader-elect` and `--metrics-bind-address`, respectively, to follow upstream conventions. ([#4654](https://github.com/operator-framework/operator-sdk/pull/4654))
### Bug Fixes
- (go/v3) Create webhook manifests in `config/` on running `create webhook`, not `init`. ([#4701](https://github.com/operator-framework/operator-sdk/pull/4701))
- (manifests/v2) Added a `config/manifests` kustomize patch to remove the cert-manager volume and volumeMount from manifests destined for `generate <bundle|packagemanifests>`. ([#4623](https://github.com/operator-framework/operator-sdk/pull/4623))
- For Helm-based operators, fixed handling of `kind: List` whereby the operator fails when trying to set watch on the object. Watches are created for objects in the list instead. ([#4682](https://github.com/operator-framework/operator-sdk/pull/4682))
- (go/v2, go/v3, ansible/v1, helm/v1) Fixed the Prometheus `ServiceMonitor` metrics endpoint, which was not configured to be scraped correctly. ([#4680](https://github.com/operator-framework/operator-sdk/pull/4680))
- In Ansible-based operators, mark the input variables from custom resources as unsafe by default. ([#4566](https://github.com/operator-framework/operator-sdk/pull/4566))
================================================
FILE: changelog/generated/v1.7.0.md
================================================
## v1.7.0
### Additions
- Added `operator-sdk pkgman-to-bundle` command to support migration of packagemanifests to bundle format. Refer https://github.com/operator-framework/enhancements/blob/master/enhancements/sdk-migrate-bundle.md for more details. ([#4718](https://github.com/operator-framework/operator-sdk/pull/4718))
- For Ansible-based operators, added log messages for each event that is received. This will make debugging excessive reconciliations much more straightforward. ([#4779](https://github.com/operator-framework/operator-sdk/pull/4779))
- Added new optional flag `--optional-values` to the command `operator-sdk bundle validate`. This option allows to inform a list of key and values to the validators. (e.g. `operator-sdk bundle validate ./bundle --optional-values=k8s-version=1.22 --select-optional suite=operatorframework`). ([#4693](https://github.com/operator-framework/operator-sdk/pull/4693))
### Deprecations
- Deprecated `operator-sdk generate packagemanifests` and `operator-sdk run packagemanifests` commands, packagemanifests support in general in favour of operator bundles. ([#4838](https://github.com/operator-framework/operator-sdk/pull/4838))
### Bug Fixes
- For Ansible- and Helm-based operators, added the `--config` flag, which was mistakenly not added to either ansible-/helm-operator binary when file support was originally added. ([#4776](https://github.com/operator-framework/operator-sdk/pull/4776))
- Format ansible-operator and helm-operator `run` command logs correctly. ([#4844](https://github.com/operator-framework/operator-sdk/pull/4844))
- (go/v3, ansible/v1, helm/v1) Moved `leases.coordination.k8s.io` to its own proxy-role rule. ([#4835](https://github.com/operator-framework/operator-sdk/pull/4835))
- (go/v3) Set the Makefile's `SHELL` variable to the system's `bash` binary with shell opts. ([#4835](https://github.com/operator-framework/operator-sdk/pull/4835))
- The `generate kustomize manifests` command no longer adds non-served CRD versions to a CSV's `.spec.customresourcedefinitions.owned`. ([#4842](https://github.com/operator-framework/operator-sdk/pull/4842))
================================================
FILE: changelog/generated/v1.7.1.md
================================================
## v1.7.1
### Additions
- Added `operator-sdk pkgman-to-bundle` command to support migration of packagemanifests to bundle format. Refer https://github.com/operator-framework/enhancements/blob/master/enhancements/sdk-migrate-bundle.md for more details. ([#4718](https://github.com/operator-framework/operator-sdk/pull/4718))
- For Ansible-based operators, added log messages for each event that is received. This will make debugging excessive reconciliations much more straightforward. ([#4779](https://github.com/operator-framework/operator-sdk/pull/4779))
- Added new optional flag `--optional-values` to the command `operator-sdk bundle validate`. This option allows to inform a list of key and values to the validators. (e.g. `operator-sdk bundle validate ./bundle --optional-values=k8s-version=1.22 --select-optional suite=operatorframework`). ([#4693](https://github.com/operator-framework/operator-sdk/pull/4693))
### Changes
- (go/v3, ansible/v1, helm/v1) Bumped controller-runtime to v0.8.3 (kubernetes 1.20). ([#4863](https://github.com/operator-framework/operator-sdk/pull/4863))
### Deprecations
- Deprecated `operator-sdk generate packagemanifests` and `operator-sdk run packagemanifests` commands, packagemanifests support in general in favour of operator bundles. ([#4838](https://github.com/operator-framework/operator-sdk/pull/4838))
### Bug Fixes
- For Ansible- and Helm-based operators, added the `--config` flag, which was mistakenly not added to either ansible-/helm-operator binary when file support was originally added. ([#4776](https://github.com/operator-framework/operator-sdk/pull/4776))
- Format ansible-operator and helm-operator `run` command logs correctly. ([#4844](https://github.com/operator-framework/operator-sdk/pull/4844))
- (go/v3, ansible/v1, helm/v1) Moved `leases.coordination.k8s.io` to its own proxy-role rule. ([#4835](https://github.com/operator-framework/operator-sdk/pull/4835))
- (go/v3) Set the Makefile's `SHELL` variable to the system's `bash` binary with shell opts. ([#4835](https://github.com/operator-framework/operator-sdk/pull/4835))
- The `generate kustomize manifests` command no longer adds non-served CRD versions to a CSV's `.spec.customresourcedefinitions.owned`. ([#4842](https://github.com/operator-framework/operator-sdk/pull/4842))
- For Anible-based operators, fixed a bug that prevented owner reference annotations from being added to cluster-scoped and multi-namespace resources, which had to be applied manually to correctly reconcile them. ([#4850](https://github.com/operator-framework/operator-sdk/pull/4850))
================================================
FILE: changelog/generated/v1.8.0.md
================================================
## v1.8.0
### Additions
- Added new bundle validator to check the bundle against the Community Operator criteria. For further information run `operator-sdk bundle validate --list-optional` and `operator-sdk bundle validate --help`. This validator is in alpha and subject to breaking changes. ([#4939](https://github.com/operator-framework/operator-sdk/pull/4939))
- Added --extra-service-accounts flag to `generate bundle` to consider roles bound to service accounts not specified in the operator's Deployment. ([#4826](https://github.com/operator-framework/operator-sdk/pull/4826))
- Added the `quarkus/v1-alpha` Java plugin, which supports `init` and `create api` commands. This plugin is alpha and subject to breaking changes. ([#4871](https://github.com/operator-framework/operator-sdk/pull/4871))
- Add new optional flag `--skip-tls` to the commands `operator-sdk run bundle` and `operator-sdk run bundle-upgrade`. This option allows to install the operator from a bundle image stored at an insecure docker registry. (e.g. `operator-sdk run bundle localhost:5000/my-operator-bundle:latest --skip-tls`). ([#4816](https://github.com/operator-framework/operator-sdk/pull/4816))
### Changes
- `generate bundle` adds ClusterRoles bound by RoleBindings to a CSV's `.spec.permissions`, since these become namespace-scoped at runtime. They will also be added to `.spec.clusterPermissions` if bound by a ClusterRoleBinding. ([#4826](https://github.com/operator-framework/operator-sdk/pull/4826))
- Images built from the operator-sdk repository for the latest two minor version's latest patch version will now be rebuilt whenever a constituent base image has a new patch version published. For example, running `docker pull quay.io/operator-framework/ansible-operator:v1.7.2` after a rebuild will result in a fully compatible, patched image. ([#4917](https://github.com/operator-framework/operator-sdk/pull/4917))
- (go/v3) Upgraded Go version to 1.16. ([#4927](https://github.com/operator-framework/operator-sdk/pull/4927))
### Bug Fixes
- Bumped operator-framework/api to v0.8.1, which properly defaults a CRD conversion's service port to 443. ([#4903](https://github.com/operator-framework/operator-sdk/pull/4903))
- Detect and report ansible-runner binary failures early and prevent symliking to artifacts. ([#4944](https://github.com/operator-framework/operator-sdk/pull/4944))
- For Helm-based operators, fixed a bug where deployed and candidate release comparison was always false when an RNG was used to derive some manifest value, resulting in the chart release constantly upgrading. ([#4937](https://github.com/operator-framework/operator-sdk/pull/4937))
- Bumped operator-lib to v0.4.1 for several bugfixes in ansible-operator and helm-operator binaries. ([#4888](https://github.com/operator-framework/operator-sdk/pull/4888))
- Pinned pip3 to 21.1 in the ansible-operator image to fix https://github.com/pypa/pip/pull/9827. ([#4877](https://github.com/operator-framework/operator-sdk/pull/4877))
- Pinned base images of ansible-operator to ubi:8.3-297.1618432833, and helm-operator and scorecard to ubi-minimal:8.3-298.1618432845. ([#4873](https://github.com/operator-framework/operator-sdk/pull/4873))
================================================
FILE: changelog/generated/v1.9.0.md
================================================
## v1.9.0
### Changes
- **Breaking change**: For Ansible operators, if an API endpoint has path component in it then the ansible-operator binary will terminate early with an error, due to a bug in the proxy that would cause the operator to target the wrong cluster. ([#4987](https://github.com/operator-framework/operator-sdk/pull/4987))
### Bug Fixes
- For helm-based operators, empty patch requests generated from the 3-way merge are filtered to avoid unnecessary requests to the kube apiserver. ([#4957](https://github.com/operator-framework/operator-sdk/pull/4957))
================================================
FILE: cmd/helm-operator/main.go
================================================
// Copyright 2020 The Operator-SDK Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package main
import (
"log"
"github.com/spf13/cobra"
_ "k8s.io/client-go/plugin/pkg/client/auth"
"github.com/operator-framework/operator-sdk/internal/cmd/helm-operator/run"
"github.com/operator-framework/operator-sdk/internal/cmd/helm-operator/version"
)
func main() {
root := cobra.Command{
Short: "Reconcile an Helm operator project using helm",
Long: `This binary runs a Helm operator that reconciles Kubernetes resources
managed by the helm program. It can be run either directly or from a Helm operator
project's image entrypoint
`,
Use: "helm-operator",
}
root.AddCommand(run.NewCmd())
root.AddCommand(version.NewCmd())
if err := root.Execute(); err != nil {
log.Fatal(err)
}
}
================================================
FILE: cmd/operator-sdk/main.go
================================================
// Copyright 2019 The Operator-SDK Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package main
import (
// Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.)
// to ensure that `exec-entrypoint` and `run` can make use of them.
_ "k8s.io/client-go/plugin/pkg/client/auth"
log "github.com/sirupsen/logrus"
"github.com/operator-framework/operator-sdk/internal/cmd/operator-sdk/cli"
)
func main() {
if err := cli.Run(); err != nil {
log.Fatal(err)
}
}
gitextract_zj60_vqy/
├── .ci/
│ └── gpg/
│ ├── README.md
│ ├── create-keyring.sh
│ ├── pubring.auto
│ └── secring.auto.gpg
├── .cncf-maintainers
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-report.md
│ │ ├── doc-report.md
│ │ ├── feature-request.md
│ │ └── support-question.md
│ ├── ISSUE_TEMPLATE.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── check-docs-only.sh
│ ├── clean-unused-disk-space.sh
│ ├── deploy.yml
│ ├── freshen-images/
│ │ ├── build.sh
│ │ ├── lib.sh
│ │ └── tags.sh
│ ├── freshen-images.yml
│ ├── get_image_tags.sh
│ ├── integration.yml
│ ├── markdown-link-check-config.json
│ ├── olm-check.yml
│ ├── rerun.yml
│ ├── test-go.yml
│ ├── test-helm.yml
│ ├── test-sample-go.yml
│ └── test-sanity.yml
├── .gitignore
├── .gitmodules
├── .golangci.yml
├── .goreleaser.yml
├── CONTRIBUTING.MD
├── LICENSE
├── Makefile
├── OWNERS
├── OWNERS_ALIASES
├── README.md
├── SECURITY.md
├── changelog/
│ ├── fragments/
│ │ └── 00-template.yaml
│ └── generated/
│ ├── v1.10.0.md
│ ├── v1.11.0.md
│ ├── v1.12.0.md
│ ├── v1.13.0.md
│ ├── v1.14.0.md
│ ├── v1.15.0.md
│ ├── v1.16.0.md
│ ├── v1.17.0.md
│ ├── v1.18.0.md
│ ├── v1.19.0.md
│ ├── v1.20.0.md
│ ├── v1.21.0.md
│ ├── v1.22.0.md
│ ├── v1.23.0.md
│ ├── v1.24.0.md
│ ├── v1.25.0.md
│ ├── v1.26.0.md
│ ├── v1.27.0.md
│ ├── v1.28.0.md
│ ├── v1.29.0.md
│ ├── v1.3.0.md
│ ├── v1.30.0.md
│ ├── v1.31.0.md
│ ├── v1.32.0.md
│ ├── v1.33.0.md
│ ├── v1.34.0.md
│ ├── v1.35.0.md
│ ├── v1.36.0.md
│ ├── v1.37.0.md
│ ├── v1.38.0.md
│ ├── v1.39.0.md
│ ├── v1.39.1.md
│ ├── v1.39.2.md
│ ├── v1.4.0.md
│ ├── v1.40.0.md
│ ├── v1.41.0.md
│ ├── v1.42.0.md
│ ├── v1.42.1.md
│ ├── v1.42.2.md
│ ├── v1.5.0.md
│ ├── v1.6.0.md
│ ├── v1.6.1.md
│ ├── v1.7.0.md
│ ├── v1.7.1.md
│ ├── v1.8.0.md
│ └── v1.9.0.md
├── cmd/
│ ├── helm-operator/
│ │ └── main.go
│ └── operator-sdk/
│ └── main.go
├── code-of-conduct.md
├── config/
│ └── crd/
│ └── bases/
│ └── _.yaml
├── go.mod
├── go.sum
├── hack/
│ ├── check-error-log-msg-format.sh
│ ├── check-license.sh
│ ├── check-links.sh
│ ├── check-olm.sh
│ ├── generate/
│ │ ├── cli-doc/
│ │ │ └── gen-cli-doc.go
│ │ ├── cncf-maintainers/
│ │ │ └── main.go
│ │ ├── migrate-markers.sh
│ │ ├── olm_bindata.sh
│ │ └── samples/
│ │ ├── generate_testdata.go
│ │ └── internal/
│ │ ├── go/
│ │ │ ├── generate.go
│ │ │ └── memcached-with-customization/
│ │ │ ├── e2e_test_code.go
│ │ │ └── memcached_with_customization.go
│ │ ├── helm/
│ │ │ ├── generate.go
│ │ │ ├── memcached.go
│ │ │ └── testdata/
│ │ │ └── memcached-0.0.2.tgz
│ │ └── pkg/
│ │ ├── context.go
│ │ └── utils.go
│ ├── lib/
│ │ └── common.sh
│ └── tests/
│ └── subcommand-olm-install.sh
├── images/
│ ├── custom-scorecard-tests/
│ │ ├── Dockerfile
│ │ └── main.go
│ ├── helm-operator/
│ │ └── Dockerfile
│ ├── operator-sdk/
│ │ └── Dockerfile
│ ├── scorecard-storage/
│ │ └── Dockerfile
│ ├── scorecard-test/
│ │ ├── Dockerfile
│ │ └── main.go
│ ├── scorecard-test-kuttl/
│ │ ├── Dockerfile
│ │ ├── entrypoint
│ │ └── main.go
│ └── scorecard-untar/
│ └── Dockerfile
├── internal/
│ ├── annotations/
│ │ ├── metrics/
│ │ │ ├── metrics.go
│ │ │ ├── metrics_suite_test.go
│ │ │ └── metrics_test.go
│ │ └── scorecard/
│ │ └── scorecard.go
│ ├── bindata/
│ │ └── olm/
│ │ ├── manifests.go
│ │ └── versions.go
│ ├── cmd/
│ │ ├── helm-operator/
│ │ │ ├── run/
│ │ │ │ └── cmd.go
│ │ │ └── version/
│ │ │ ├── cmd.go
│ │ │ ├── cmd_test.go
│ │ │ └── version_suite_test.go
│ │ └── operator-sdk/
│ │ ├── alpha/
│ │ │ └── config3alphato3/
│ │ │ ├── cmd.go
│ │ │ ├── convert_config_3-alpha_to_3.go
│ │ │ ├── convert_config_3-alpha_to_3_test.go
│ │ │ └── suite_test.go
│ │ ├── bundle/
│ │ │ ├── bundle_suite_test.go
│ │ │ ├── cmd.go
│ │ │ ├── cmd_test.go
│ │ │ └── validate/
│ │ │ ├── cmd.go
│ │ │ ├── cmd_suite_test.go
│ │ │ ├── internal/
│ │ │ │ └── logger.go
│ │ │ ├── optional.go
│ │ │ ├── optional_test.go
│ │ │ ├── validate.go
│ │ │ └── validate_test.go
│ │ ├── cleanup/
│ │ │ └── cmd.go
│ │ ├── cli/
│ │ │ ├── cli.go
│ │ │ ├── cli_suite_test.go
│ │ │ ├── version.go
│ │ │ └── version_test.go
│ │ ├── generate/
│ │ │ ├── bundle/
│ │ │ │ ├── bundle.go
│ │ │ │ └── cmd.go
│ │ │ ├── cmd.go
│ │ │ ├── internal/
│ │ │ │ ├── genutil.go
│ │ │ │ ├── genutil_suite_test.go
│ │ │ │ ├── manifests.go
│ │ │ │ ├── manifests_test.go
│ │ │ │ ├── relatedimages.go
│ │ │ │ └── relatedimages_test.go
│ │ │ ├── kustomize/
│ │ │ │ ├── cmd.go
│ │ │ │ └── manifests.go
│ │ │ └── packagemanifests/
│ │ │ ├── cmd.go
│ │ │ ├── cmd_test.go
│ │ │ ├── packagemanifests.go
│ │ │ ├── packagemanifests_suite_test.go
│ │ │ ├── packagemanifests_test.go
│ │ │ └── testdata/
│ │ │ └── PROJECT
│ │ ├── olm/
│ │ │ ├── cmd.go
│ │ │ ├── cmd_test.go
│ │ │ ├── install.go
│ │ │ ├── install_test.go
│ │ │ ├── olm_suite_test.go
│ │ │ ├── status.go
│ │ │ ├── status_test.go
│ │ │ ├── uninstall.go
│ │ │ └── uninstall_test.go
│ │ ├── pkgmantobundle/
│ │ │ ├── cmd.go
│ │ │ ├── cmd_test.go
│ │ │ ├── pkgmantobundle_suite_test.go
│ │ │ ├── pkgmantobundle_test.go
│ │ │ └── testdata/
│ │ │ └── packagemanifests/
│ │ │ ├── 0.0.1/
│ │ │ │ ├── cache.example.com_memcacheds.yaml
│ │ │ │ ├── memcached-operator-controller-manager-metrics-service_v1_service.yaml
│ │ │ │ ├── memcached-operator-controller-manager_v1_serviceaccount.yaml
│ │ │ │ ├── memcached-operator-manager-config_v1_configmap.yaml
│ │ │ │ ├── memcached-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ │ ├── memcached-operator.clusterserviceversion.yaml
│ │ │ │ └── scorecard-config.yaml
│ │ │ ├── 0.0.2/
│ │ │ │ ├── cache.example.com_memcacheds.yaml
│ │ │ │ ├── memcached-operator-controller-manager-metrics-service_v1_service.yaml
│ │ │ │ ├── memcached-operator-controller-manager_v1_serviceaccount.yaml
│ │ │ │ ├── memcached-operator-manager-config_v1_configmap.yaml
│ │ │ │ ├── memcached-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ │ └── memcached-operator.clusterserviceversion.yaml
│ │ │ └── memcached-operator.package.yaml
│ │ ├── run/
│ │ │ ├── bundle/
│ │ │ │ └── cmd.go
│ │ │ ├── bundleupgrade/
│ │ │ │ └── cmd.go
│ │ │ ├── cmd.go
│ │ │ ├── cmd_test.go
│ │ │ ├── packagemanifests/
│ │ │ │ ├── packagemanifests.go
│ │ │ │ ├── packagemanifests_suite_test.go
│ │ │ │ └── packagemanifests_test.go
│ │ │ └── run_suite_test.go
│ │ └── scorecard/
│ │ ├── cmd.go
│ │ ├── cmd_test.go
│ │ ├── scorecard_suite_test.go
│ │ └── xunit/
│ │ └── xunit.go
│ ├── flags/
│ │ └── flags.go
│ ├── generate/
│ │ ├── clusterserviceversion/
│ │ │ ├── bases/
│ │ │ │ ├── clusterserviceversion.go
│ │ │ │ ├── definitions/
│ │ │ │ │ ├── ast.go
│ │ │ │ │ ├── crd.go
│ │ │ │ │ ├── crd_test.go
│ │ │ │ │ ├── definitions.go
│ │ │ │ │ ├── definitions_suite_test.go
│ │ │ │ │ ├── definitions_test.go
│ │ │ │ │ ├── markers.go
│ │ │ │ │ ├── markers_test.go
│ │ │ │ │ └── zz_generated.markerhelp.go
│ │ │ │ ├── metadata.go
│ │ │ │ └── metadata_test.go
│ │ │ ├── clusterserviceversion.go
│ │ │ ├── clusterserviceversion_suite_test.go
│ │ │ ├── clusterserviceversion_test.go
│ │ │ ├── clusterserviceversion_updaters.go
│ │ │ └── clusterserviceversion_updaters_test.go
│ │ ├── collector/
│ │ │ ├── clusterserviceversion.go
│ │ │ ├── clusterserviceversion_test.go
│ │ │ ├── collector_suite_test.go
│ │ │ ├── filter.go
│ │ │ └── manifests.go
│ │ ├── internal/
│ │ │ └── genutil.go
│ │ ├── packagemanifest/
│ │ │ ├── packagemanifest.go
│ │ │ ├── packagemanifest_suite_test.go
│ │ │ ├── packagemanifest_test.go
│ │ │ └── packagemanifestfakes/
│ │ │ └── fake_generator.go
│ │ └── testdata/
│ │ ├── clusterserviceversions/
│ │ │ ├── bases/
│ │ │ │ ├── memcached-operator-multiVersion.yaml
│ │ │ │ ├── memcached-operator.clusterserviceversion.yaml
│ │ │ │ └── with-ui-metadata.clusterserviceversion.yaml
│ │ │ └── output/
│ │ │ ├── memcached-operator-multiVersion.yaml
│ │ │ ├── memcached-operator.clusterserviceversion.yaml
│ │ │ └── with-ui-metadata.clusterserviceversion.yaml
│ │ ├── go/
│ │ │ ├── PROJECT
│ │ │ ├── api/
│ │ │ │ ├── shared/
│ │ │ │ │ ├── doc.go
│ │ │ │ │ └── memcached_types.go
│ │ │ │ ├── v1alpha1/
│ │ │ │ │ ├── doc.go
│ │ │ │ │ └── memcached_types.go
│ │ │ │ └── v1alpha2/
│ │ │ │ ├── doc.go
│ │ │ │ ├── dummy_types.go
│ │ │ │ ├── memcached_types.go
│ │ │ │ ├── memcachedrs_types.go
│ │ │ │ └── motorcycle_types.go
│ │ │ └── static/
│ │ │ ├── basic.multiversion.operator.yaml
│ │ │ └── basic.operator.yaml
│ │ └── memcached-operator.package.yaml
│ ├── helm/
│ │ ├── client/
│ │ │ ├── actionconfig.go
│ │ │ ├── client.go
│ │ │ ├── client_test.go
│ │ │ ├── doc.go
│ │ │ ├── restclientgetter.go
│ │ │ └── secrets_watch.go
│ │ ├── controller/
│ │ │ ├── controller.go
│ │ │ ├── doc.go
│ │ │ ├── reconcile.go
│ │ │ └── reconcile_test.go
│ │ ├── flags/
│ │ │ ├── flag.go
│ │ │ ├── flag_test.go
│ │ │ └── suite_test.go
│ │ ├── internal/
│ │ │ ├── diff/
│ │ │ │ └── diff.go
│ │ │ └── types/
│ │ │ ├── doc.go
│ │ │ ├── types.go
│ │ │ └── types_test.go
│ │ ├── manifestutil/
│ │ │ └── resource_policy.go
│ │ ├── metrics/
│ │ │ └── metrics.go
│ │ ├── release/
│ │ │ ├── doc.go
│ │ │ ├── manager.go
│ │ │ ├── manager_factory.go
│ │ │ └── manager_test.go
│ │ └── watches/
│ │ ├── watches.go
│ │ └── watches_test.go
│ ├── markers/
│ │ └── markers.go
│ ├── olm/
│ │ ├── client/
│ │ │ ├── client.go
│ │ │ ├── client_suite_test.go
│ │ │ ├── client_test.go
│ │ │ └── status.go
│ │ ├── fbcutil/
│ │ │ ├── util.go
│ │ │ └── util_test.go
│ │ ├── installer/
│ │ │ ├── client.go
│ │ │ ├── client_test.go
│ │ │ ├── installer_suite_test.go
│ │ │ └── manager.go
│ │ └── operator/
│ │ ├── bundle/
│ │ │ └── install.go
│ │ ├── bundleupgrade/
│ │ │ └── upgrade.go
│ │ ├── config.go
│ │ ├── helpers.go
│ │ ├── install_mode.go
│ │ ├── install_mode_test.go
│ │ ├── operator_suite_test.go
│ │ ├── packagemanifests/
│ │ │ └── install.go
│ │ ├── registry/
│ │ │ ├── catalog.go
│ │ │ ├── configmap/
│ │ │ │ ├── configmap.go
│ │ │ │ ├── configmap_suite_test.go
│ │ │ │ ├── configmap_test.go
│ │ │ │ ├── deployment.go
│ │ │ │ ├── deployment_test.go
│ │ │ │ ├── registry.go
│ │ │ │ ├── registry_test.go
│ │ │ │ ├── service.go
│ │ │ │ └── service_test.go
│ │ │ ├── configmap.go
│ │ │ ├── configmap_test.go
│ │ │ ├── fbcindex/
│ │ │ │ ├── configMapWriter.go
│ │ │ │ ├── fbc_registry_pod.go
│ │ │ │ └── fbc_registry_pod_test.go
│ │ │ ├── index/
│ │ │ │ ├── bundle_add_mode.go
│ │ │ │ ├── registry_pod.go
│ │ │ │ └── registry_pod_test.go
│ │ │ ├── index_image.go
│ │ │ ├── index_image_test.go
│ │ │ ├── olm_resources.go
│ │ │ ├── olm_resources_test.go
│ │ │ ├── operator_installer.go
│ │ │ ├── operator_installer_test.go
│ │ │ └── registry_suite_test.go
│ │ └── uninstall.go
│ ├── plugins/
│ │ ├── helm/
│ │ │ └── v1/
│ │ │ ├── api.go
│ │ │ ├── chartutil/
│ │ │ │ ├── chart.go
│ │ │ │ ├── chart_test.go
│ │ │ │ └── testdata/
│ │ │ │ ├── test-chart/
│ │ │ │ │ ├── .helmignore
│ │ │ │ │ ├── Chart.yaml
│ │ │ │ │ ├── templates/
│ │ │ │ │ │ ├── NOTES.txt
│ │ │ │ │ │ ├── _helpers.tpl
│ │ │ │ │ │ ├── deployment.yaml
│ │ │ │ │ │ ├── ingress.yaml
│ │ │ │ │ │ ├── service.yaml
│ │ │ │ │ │ ├── serviceaccount.yaml
│ │ │ │ │ │ └── tests/
│ │ │ │ │ │ └── test-connection.yaml
│ │ │ │ │ └── values.yaml
│ │ │ │ ├── test-chart-1.2.0.tgz
│ │ │ │ └── test-chart-1.2.3.tgz
│ │ │ ├── init.go
│ │ │ ├── plugin.go
│ │ │ └── scaffolds/
│ │ │ ├── api.go
│ │ │ ├── doc.go
│ │ │ ├── init.go
│ │ │ └── internal/
│ │ │ └── templates/
│ │ │ ├── config/
│ │ │ │ ├── crd/
│ │ │ │ │ ├── crd.go
│ │ │ │ │ └── kustomization.go
│ │ │ │ ├── rbac/
│ │ │ │ │ ├── manager_role.go
│ │ │ │ │ └── manager_role_test.go
│ │ │ │ └── samples/
│ │ │ │ └── custom_resource.go
│ │ │ ├── dockerfile.go
│ │ │ ├── gitignore.go
│ │ │ ├── makefile.go
│ │ │ └── watches.go
│ │ ├── manifests/
│ │ │ └── v2/
│ │ │ ├── api.go
│ │ │ ├── init.go
│ │ │ ├── plugin.go
│ │ │ ├── templates/
│ │ │ │ └── config/
│ │ │ │ ├── manifests/
│ │ │ │ │ └── kustomization.go
│ │ │ │ └── samples/
│ │ │ │ └── kustomization.go
│ │ │ └── utils.go
│ │ ├── plugins.go
│ │ ├── scorecard/
│ │ │ └── v2/
│ │ │ ├── init.go
│ │ │ └── plugin.go
│ │ └── util/
│ │ ├── cleanup.go
│ │ ├── legacy_keys.go
│ │ └── message.go
│ ├── registry/
│ │ ├── image.go
│ │ ├── labels.go
│ │ ├── labels_test.go
│ │ ├── logger.go
│ │ ├── registry_suite_test.go
│ │ └── validate.go
│ ├── scorecard/
│ │ ├── bundle.go
│ │ ├── bundle_test.go
│ │ ├── config.go
│ │ ├── config_test.go
│ │ ├── formatting.go
│ │ ├── formatting_test.go
│ │ ├── kubeclient.go
│ │ ├── kubeclient_test.go
│ │ ├── labels_test.go
│ │ ├── run_test.go
│ │ ├── scorecard.go
│ │ ├── scorecard_suite_test.go
│ │ ├── storage.go
│ │ ├── tar.go
│ │ ├── testconfigmap.go
│ │ ├── testdata/
│ │ │ ├── bundle/
│ │ │ │ ├── manifests/
│ │ │ │ │ ├── cache.example.com_memcacheds_crd.yaml
│ │ │ │ │ └── memcached-operator.clusterserviceversion.yaml
│ │ │ │ ├── metadata/
│ │ │ │ │ └── annotations.yaml
│ │ │ │ └── tests/
│ │ │ │ └── scorecard/
│ │ │ │ ├── config.yaml
│ │ │ │ └── kuttl/
│ │ │ │ ├── kuttl-test.yaml
│ │ │ │ └── list-pods/
│ │ │ │ ├── 00-assert.yaml
│ │ │ │ └── 00-pod.yaml
│ │ │ ├── generate-bundle-tarball.sh
│ │ │ └── pod.yaml
│ │ ├── testpod.go
│ │ └── tests/
│ │ ├── basic.go
│ │ ├── bundle_test.go
│ │ ├── crhelper.go
│ │ └── olm.go
│ ├── testutils/
│ │ ├── olm.go
│ │ ├── scorecard.go
│ │ └── utils.go
│ ├── util/
│ │ ├── bundleutil/
│ │ │ ├── bundleutil.go
│ │ │ └── template.go
│ │ ├── k8sutil/
│ │ │ ├── api.go
│ │ │ ├── api_test.go
│ │ │ ├── constants.go
│ │ │ ├── k8sutil.go
│ │ │ ├── k8sutil_test.go
│ │ │ ├── object.go
│ │ │ └── scan.go
│ │ └── projutil/
│ │ ├── interactive_promt_util.go
│ │ ├── interactive_promt_util_test.go
│ │ ├── project_util.go
│ │ └── projutil_test.go
│ ├── validate/
│ │ ├── external.go
│ │ ├── external_test.go
│ │ ├── result.go
│ │ ├── result_test.go
│ │ ├── suite_test.go
│ │ └── testdata/
│ │ ├── errors.sh
│ │ ├── fails.sh
│ │ └── passes.sh
│ └── version/
│ └── version.go
├── netlify.toml
├── proposals/
│ ├── README.md
│ ├── TEMPLATE.md
│ ├── ansible-helm-addapi.md
│ ├── ansible-operator-devex.md
│ ├── ansible-operator-status.md
│ ├── ansible-operator-testing.md
│ ├── ansible-operator.md
│ ├── automating-releases.md
│ ├── cli-ux-phase1.md
│ ├── helm-operator.md
│ ├── hugo-doc-build.md
│ ├── improve-csv-cli.md
│ ├── improved-scorecard-config.md
│ ├── kubebuilder-integration.md
│ ├── kubernetes-1.17.md
│ ├── leader-for-life.md
│ ├── metering-operator-metrics.md
│ ├── operator-testing-tool.md
│ ├── qa-samples-proposal.md
│ ├── scorecard-custom-tests-2.md
│ ├── scorecard-plugin-system.md
│ ├── sdk-code-annotations.md
│ ├── sdk-integration-with-olm.md
│ ├── tech-debt.md
│ ├── tls-utilities.md
│ └── upstream-osdk-features-into-controller-runtime.md
├── release/
│ ├── Makefile
│ └── changelog/
│ ├── gen-changelog.go
│ └── internal/
│ ├── changelog.go
│ ├── changelog_test.go
│ ├── fragment.go
│ ├── fragment_test.go
│ ├── migration_guide.go
│ ├── migration_guide_test.go
│ └── testdata/
│ ├── ignore/
│ │ ├── 00-template.yaml
│ │ ├── more-fragments/
│ │ │ └── ignored.yaml
│ │ └── non-yaml.txt
│ ├── invalid_entry/
│ │ └── fragment1.yaml
│ ├── invalid_yaml/
│ │ └── fragment1.yaml
│ └── valid/
│ ├── fragment1.yaml
│ └── fragment2.yml
├── test/
│ ├── common/
│ │ ├── sa_secret.go
│ │ └── scorecard.go
│ ├── e2e/
│ │ ├── go/
│ │ │ ├── cluster_test.go
│ │ │ ├── local_test.go
│ │ │ ├── scorecard_test.go
│ │ │ └── suite_test.go
│ │ └── helm/
│ │ ├── cluster_test.go
│ │ ├── local_test.go
│ │ ├── olm_test.go
│ │ ├── scorecard_test.go
│ │ └── suite_test.go
│ └── integration/
│ ├── packagemanifests_test.go
│ └── suite_test.go
├── testdata/
│ ├── go/
│ │ └── v4/
│ │ ├── memcached-operator/
│ │ │ ├── .devcontainer/
│ │ │ │ ├── devcontainer.json
│ │ │ │ └── post-install.sh
│ │ │ ├── .dockerignore
│ │ │ ├── .github/
│ │ │ │ └── workflows/
│ │ │ │ ├── lint.yml
│ │ │ │ ├── test-e2e.yml
│ │ │ │ └── test.yml
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── Dockerfile
│ │ │ ├── Makefile
│ │ │ ├── PROJECT
│ │ │ ├── README.md
│ │ │ ├── api/
│ │ │ │ └── v1alpha1/
│ │ │ │ ├── groupversion_info.go
│ │ │ │ ├── memcached_types.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ ├── bundle/
│ │ │ │ ├── manifests/
│ │ │ │ │ ├── cache.example.com_memcacheds.yaml
│ │ │ │ │ ├── memcached-operator-controller-manager-metrics-monitor_monitoring.coreos.com_v1_servicemonitor.yaml
│ │ │ │ │ ├── memcached-operator-controller-manager-metrics-service_v1_service.yaml
│ │ │ │ │ ├── memcached-operator-memcached-admin-role_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ │ │ ├── memcached-operator-memcached-editor-role_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ │ │ ├── memcached-operator-memcached-viewer-role_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ │ │ ├── memcached-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ │ │ ├── memcached-operator-webhook-service_v1_service.yaml
│ │ │ │ │ └── memcached-operator.clusterserviceversion.yaml
│ │ │ │ ├── metadata/
│ │ │ │ │ └── annotations.yaml
│ │ │ │ └── tests/
│ │ │ │ └── scorecard/
│ │ │ │ └── config.yaml
│ │ │ ├── bundle.Dockerfile
│ │ │ ├── cmd/
│ │ │ │ └── main.go
│ │ │ ├── config/
│ │ │ │ ├── certmanager/
│ │ │ │ │ ├── certificate-metrics.yaml
│ │ │ │ │ ├── certificate-webhook.yaml
│ │ │ │ │ ├── issuer.yaml
│ │ │ │ │ ├── kustomization.yaml
│ │ │ │ │ └── kustomizeconfig.yaml
│ │ │ │ ├── crd/
│ │ │ │ │ ├── bases/
│ │ │ │ │ │ └── cache.example.com_memcacheds.yaml
│ │ │ │ │ ├── kustomization.yaml
│ │ │ │ │ └── kustomizeconfig.yaml
│ │ │ │ ├── default/
│ │ │ │ │ ├── cert_metrics_manager_patch.yaml
│ │ │ │ │ ├── kustomization.yaml
│ │ │ │ │ ├── manager_metrics_patch.yaml
│ │ │ │ │ ├── manager_webhook_patch.yaml
│ │ │ │ │ └── metrics_service.yaml
│ │ │ │ ├── manager/
│ │ │ │ │ ├── kustomization.yaml
│ │ │ │ │ └── manager.yaml
│ │ │ │ ├── manifests/
│ │ │ │ │ ├── bases/
│ │ │ │ │ │ └── memcached-operator.clusterserviceversion.yaml
│ │ │ │ │ └── kustomization.yaml
│ │ │ │ ├── network-policy/
│ │ │ │ │ ├── allow-metrics-traffic.yaml
│ │ │ │ │ ├── allow-webhook-traffic.yaml
│ │ │ │ │ └── kustomization.yaml
│ │ │ │ ├── prometheus/
│ │ │ │ │ ├── kustomization.yaml
│ │ │ │ │ ├── monitor.yaml
│ │ │ │ │ └── monitor_tls_patch.yaml
│ │ │ │ ├── rbac/
│ │ │ │ │ ├── kustomization.yaml
│ │ │ │ │ ├── leader_election_role.yaml
│ │ │ │ │ ├── leader_election_role_binding.yaml
│ │ │ │ │ ├── memcached_admin_role.yaml
│ │ │ │ │ ├── memcached_editor_role.yaml
│ │ │ │ │ ├── memcached_viewer_role.yaml
│ │ │ │ │ ├── metrics_auth_role.yaml
│ │ │ │ │ ├── metrics_auth_role_binding.yaml
│ │ │ │ │ ├── metrics_reader_role.yaml
│ │ │ │ │ ├── role.yaml
│ │ │ │ │ ├── role_binding.yaml
│ │ │ │ │ └── service_account.yaml
│ │ │ │ ├── samples/
│ │ │ │ │ ├── cache_v1alpha1_memcached.yaml
│ │ │ │ │ └── kustomization.yaml
│ │ │ │ ├── scorecard/
│ │ │ │ │ ├── bases/
│ │ │ │ │ │ └── config.yaml
│ │ │ │ │ ├── kustomization.yaml
│ │ │ │ │ └── patches/
│ │ │ │ │ ├── basic.config.yaml
│ │ │ │ │ └── olm.config.yaml
│ │ │ │ └── webhook/
│ │ │ │ ├── kustomization.yaml
│ │ │ │ ├── kustomizeconfig.yaml
│ │ │ │ ├── manifests.yaml
│ │ │ │ └── service.yaml
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── hack/
│ │ │ │ └── boilerplate.go.txt
│ │ │ ├── internal/
│ │ │ │ ├── controller/
│ │ │ │ │ ├── memcached_controller.go
│ │ │ │ │ ├── memcached_controller_test.go
│ │ │ │ │ └── suite_test.go
│ │ │ │ └── webhook/
│ │ │ │ └── v1alpha1/
│ │ │ │ ├── memcached_webhook.go
│ │ │ │ ├── memcached_webhook_test.go
│ │ │ │ └── webhook_suite_test.go
│ │ │ └── test/
│ │ │ ├── e2e/
│ │ │ │ ├── e2e_suite_test.go
│ │ │ │ └── e2e_test.go
│ │ │ └── utils/
│ │ │ └── utils.go
│ │ └── monitoring/
│ │ └── memcached-operator/
│ │ ├── .devcontainer/
│ │ │ ├── devcontainer.json
│ │ │ └── post-install.sh
│ │ ├── .dockerignore
│ │ ├── .github/
│ │ │ └── workflows/
│ │ │ ├── lint.yml
│ │ │ ├── test-e2e.yml
│ │ │ └── test.yml
│ │ ├── .gitignore
│ │ ├── .golangci.yml
│ │ ├── Dockerfile
│ │ ├── Makefile
│ │ ├── PROJECT
│ │ ├── README.md
│ │ ├── api/
│ │ │ └── v1alpha1/
│ │ │ ├── groupversion_info.go
│ │ │ ├── memcached_types.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── bundle/
│ │ │ ├── manifests/
│ │ │ │ ├── cache.example.com_memcacheds.yaml
│ │ │ │ ├── memcached-operator-controller-manager-metrics-monitor_monitoring.coreos.com_v1_servicemonitor.yaml
│ │ │ │ ├── memcached-operator-controller-manager-metrics-service_v1_service.yaml
│ │ │ │ ├── memcached-operator-memcached-admin-role_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ │ ├── memcached-operator-memcached-editor-role_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ │ ├── memcached-operator-memcached-viewer-role_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ │ ├── memcached-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ │ ├── memcached-operator-prometheus-role-binding_rbac.authorization.k8s.io_v1_rolebinding.yaml
│ │ │ │ ├── memcached-operator-prometheus-role_rbac.authorization.k8s.io_v1_role.yaml
│ │ │ │ ├── memcached-operator-webhook-service_v1_service.yaml
│ │ │ │ └── memcached-operator.clusterserviceversion.yaml
│ │ │ ├── metadata/
│ │ │ │ └── annotations.yaml
│ │ │ └── tests/
│ │ │ └── scorecard/
│ │ │ └── config.yaml
│ │ ├── bundle.Dockerfile
│ │ ├── cmd/
│ │ │ └── main.go
│ │ ├── config/
│ │ │ ├── certmanager/
│ │ │ │ ├── certificate-metrics.yaml
│ │ │ │ ├── certificate-webhook.yaml
│ │ │ │ ├── issuer.yaml
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── kustomizeconfig.yaml
│ │ │ ├── crd/
│ │ │ │ ├── bases/
│ │ │ │ │ └── cache.example.com_memcacheds.yaml
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── kustomizeconfig.yaml
│ │ │ ├── default/
│ │ │ │ ├── cert_metrics_manager_patch.yaml
│ │ │ │ ├── kustomization.yaml
│ │ │ │ ├── manager_metrics_patch.yaml
│ │ │ │ ├── manager_webhook_patch.yaml
│ │ │ │ └── metrics_service.yaml
│ │ │ ├── manager/
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── manager.yaml
│ │ │ ├── manifests/
│ │ │ │ ├── bases/
│ │ │ │ │ └── memcached-operator.clusterserviceversion.yaml
│ │ │ │ └── kustomization.yaml
│ │ │ ├── network-policy/
│ │ │ │ ├── allow-metrics-traffic.yaml
│ │ │ │ ├── allow-webhook-traffic.yaml
│ │ │ │ └── kustomization.yaml
│ │ │ ├── prometheus/
│ │ │ │ ├── kustomization.yaml
│ │ │ │ ├── monitor.yaml
│ │ │ │ └── monitor_tls_patch.yaml
│ │ │ ├── rbac/
│ │ │ │ ├── kustomization.yaml
│ │ │ │ ├── leader_election_role.yaml
│ │ │ │ ├── leader_election_role_binding.yaml
│ │ │ │ ├── memcached_admin_role.yaml
│ │ │ │ ├── memcached_editor_role.yaml
│ │ │ │ ├── memcached_viewer_role.yaml
│ │ │ │ ├── metrics_auth_role.yaml
│ │ │ │ ├── metrics_auth_role_binding.yaml
│ │ │ │ ├── metrics_reader_role.yaml
│ │ │ │ ├── prometheus_role.yaml
│ │ │ │ ├── prometheus_role_binding.yaml
│ │ │ │ ├── role.yaml
│ │ │ │ ├── role_binding.yaml
│ │ │ │ └── service_account.yaml
│ │ │ ├── samples/
│ │ │ │ ├── cache_v1alpha1_memcached.yaml
│ │ │ │ └── kustomization.yaml
│ │ │ ├── scorecard/
│ │ │ │ ├── bases/
│ │ │ │ │ └── config.yaml
│ │ │ │ ├── kustomization.yaml
│ │ │ │ └── patches/
│ │ │ │ ├── basic.config.yaml
│ │ │ │ └── olm.config.yaml
│ │ │ └── webhook/
│ │ │ ├── kustomization.yaml
│ │ │ ├── kustomizeconfig.yaml
│ │ │ ├── manifests.yaml
│ │ │ └── service.yaml
│ │ ├── docs/
│ │ │ └── monitoring/
│ │ │ ├── metrics.md
│ │ │ └── runbooks/
│ │ │ ├── memcachedDeploymentSizeUndesired.md
│ │ │ └── memcachedOperatorDown.md
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── hack/
│ │ │ └── boilerplate.go.txt
│ │ ├── internal/
│ │ │ ├── controller/
│ │ │ │ ├── memcached_controller.go
│ │ │ │ ├── memcached_controller_test.go
│ │ │ │ └── suite_test.go
│ │ │ └── webhook/
│ │ │ └── v1alpha1/
│ │ │ ├── memcached_webhook.go
│ │ │ ├── memcached_webhook_test.go
│ │ │ └── webhook_suite_test.go
│ │ ├── monitoring/
│ │ │ ├── alerts.go
│ │ │ ├── metrics.go
│ │ │ ├── metricsdocs/
│ │ │ │ └── metricsdocs.go
│ │ │ └── prom-rule-ci/
│ │ │ ├── prom-rules-tests.yaml
│ │ │ ├── rule-spec-dumper.go
│ │ │ └── verify-rules.sh
│ │ └── test/
│ │ ├── e2e/
│ │ │ ├── e2e_suite_test.go
│ │ │ └── e2e_test.go
│ │ └── utils/
│ │ └── utils.go
│ └── helm/
│ └── memcached-operator/
│ ├── .gitignore
│ ├── Dockerfile
│ ├── Makefile
│ ├── PROJECT
│ ├── bundle/
│ │ ├── manifests/
│ │ │ ├── cache.example.com_memcacheds.yaml
│ │ │ ├── memcached-operator-controller-manager-metrics-monitor_monitoring.coreos.com_v1_servicemonitor.yaml
│ │ │ ├── memcached-operator-controller-manager-metrics-service_v1_service.yaml
│ │ │ ├── memcached-operator-memcached-admin-role_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ ├── memcached-operator-memcached-editor-role_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ ├── memcached-operator-memcached-viewer-role_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ ├── memcached-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ │ └── memcached-operator.clusterserviceversion.yaml
│ │ ├── metadata/
│ │ │ └── annotations.yaml
│ │ └── tests/
│ │ └── scorecard/
│ │ └── config.yaml
│ ├── bundle.Dockerfile
│ ├── config/
│ │ ├── crd/
│ │ │ ├── bases/
│ │ │ │ └── cache.example.com_memcacheds.yaml
│ │ │ └── kustomization.yaml
│ │ ├── default/
│ │ │ ├── kustomization.yaml
│ │ │ ├── manager_metrics_patch.yaml
│ │ │ └── metrics_service.yaml
│ │ ├── manager/
│ │ │ ├── kustomization.yaml
│ │ │ └── manager.yaml
│ │ ├── manifests/
│ │ │ ├── bases/
│ │ │ │ └── memcached-operator.clusterserviceversion.yaml
│ │ │ └── kustomization.yaml
│ │ ├── network-policy/
│ │ │ ├── allow-metrics-traffic.yaml
│ │ │ └── kustomization.yaml
│ │ ├── prometheus/
│ │ │ ├── kustomization.yaml
│ │ │ └── monitor.yaml
│ │ ├── rbac/
│ │ │ ├── kustomization.yaml
│ │ │ ├── leader_election_role.yaml
│ │ │ ├── leader_election_role_binding.yaml
│ │ │ ├── memcached_admin_role.yaml
│ │ │ ├── memcached_editor_role.yaml
│ │ │ ├── memcached_viewer_role.yaml
│ │ │ ├── metrics_auth_role.yaml
│ │ │ ├── metrics_auth_role_binding.yaml
│ │ │ ├── metrics_reader_role.yaml
│ │ │ ├── role.yaml
│ │ │ ├── role_binding.yaml
│ │ │ └── service_account.yaml
│ │ ├── samples/
│ │ │ ├── cache_v1alpha1_memcached.yaml
│ │ │ └── kustomization.yaml
│ │ └── scorecard/
│ │ ├── bases/
│ │ │ └── config.yaml
│ │ ├── kustomization.yaml
│ │ └── patches/
│ │ ├── basic.config.yaml
│ │ └── olm.config.yaml
│ ├── helm-charts/
│ │ └── memcached/
│ │ ├── .helmignore
│ │ ├── Chart.yaml
│ │ ├── README.md
│ │ ├── templates/
│ │ │ ├── NOTES.txt
│ │ │ ├── _helpers.tpl
│ │ │ ├── pdb.yaml
│ │ │ ├── statefulset.yaml
│ │ │ └── svc.yaml
│ │ └── values.yaml
│ └── watches.yaml
├── tools/
│ ├── scripts/
│ │ └── fetch
│ └── tools.go
└── website/
├── assets/
│ └── scss/
│ ├── _breadcrumb.scss
│ ├── _docs.scss
│ ├── _footer.scss
│ ├── _functions.scss
│ ├── _global.scss
│ ├── _header.scss
│ ├── _homepage.scss
│ ├── _reset.scss
│ ├── _sidebar-tree.scss
│ ├── _styles_project.scss
│ ├── _type.scss
│ └── _variables.scss
├── config.toml
├── content/
│ └── en/
│ ├── _index.html
│ ├── build/
│ │ └── _index.html
│ ├── community/
│ │ └── _index.md
│ ├── docs/
│ │ ├── _index.md
│ │ ├── advanced-topics/
│ │ │ ├── _index.md
│ │ │ ├── custom-bundle-validation.md
│ │ │ ├── multi-arch.md
│ │ │ └── multi-sa.md
│ │ ├── best-practices/
│ │ │ ├── _index.md
│ │ │ ├── best-practices.md
│ │ │ ├── common-recommendation.md
│ │ │ ├── designing-lean-operators.md
│ │ │ ├── managing-resources.md
│ │ │ ├── multi-tenancy.md
│ │ │ ├── observability-best-practices.md
│ │ │ ├── pod-security-standards.md
│ │ │ └── resource-pruning.md
│ │ ├── building-operators/
│ │ │ ├── _index.md
│ │ │ ├── ansible/
│ │ │ │ ├── OWNERS
│ │ │ │ ├── _index.md
│ │ │ │ ├── development-tips.md
│ │ │ │ ├── installation.md
│ │ │ │ ├── migration.md
│ │ │ │ ├── quickstart.md
│ │ │ │ ├── reference/
│ │ │ │ │ ├── _index.md
│ │ │ │ │ ├── advanced_options.md
│ │ │ │ │ ├── ansible-base-images.md
│ │ │ │ │ ├── dependent-watches.md
│ │ │ │ │ ├── finalizers.md
│ │ │ │ │ ├── information-flow-ansible-operator.md
│ │ │ │ │ ├── internal_metrics.md
│ │ │ │ │ ├── proxy-vars.md
│ │ │ │ │ ├── retroactively-owned-resources.md
│ │ │ │ │ ├── scaffolding.md
│ │ │ │ │ ├── watches.md
│ │ │ │ │ └── webhooks.md
│ │ │ │ ├── testing-guide.md
│ │ │ │ └── tutorial.md
│ │ │ ├── golang/
│ │ │ │ ├── _index.md
│ │ │ │ ├── advanced-topics.md
│ │ │ │ ├── crds-scope.md
│ │ │ │ ├── installation.md
│ │ │ │ ├── migration.md
│ │ │ │ ├── operator-scope.md
│ │ │ │ ├── quickstart.md
│ │ │ │ ├── references/
│ │ │ │ │ ├── _index.md
│ │ │ │ │ ├── client.md
│ │ │ │ │ ├── event-filtering.md
│ │ │ │ │ ├── logging.md
│ │ │ │ │ ├── markers.md
│ │ │ │ │ ├── openapi-validation.md
│ │ │ │ │ └── proxy-vars.md
│ │ │ │ ├── testing.md
│ │ │ │ ├── tutorial.md
│ │ │ │ └── webhook.md
│ │ │ └── helm/
│ │ │ ├── _index.md
│ │ │ ├── installation.md
│ │ │ ├── migration.md
│ │ │ ├── quickstart.md
│ │ │ ├── reference/
│ │ │ │ ├── _index.md
│ │ │ │ ├── advanced_features/
│ │ │ │ │ ├── _index.md
│ │ │ │ │ ├── annotations.md
│ │ │ │ │ ├── max_concurrent_reconciles.md
│ │ │ │ │ └── override_values.md
│ │ │ │ ├── proxy-vars.md
│ │ │ │ └── watches.md
│ │ │ └── tutorial.md
│ │ ├── cli/
│ │ │ ├── _index.md
│ │ │ ├── operator-sdk.md
│ │ │ ├── operator-sdk_alpha.md
│ │ │ ├── operator-sdk_alpha_config-3alpha-to-3.md
│ │ │ ├── operator-sdk_alpha_generate.md
│ │ │ ├── operator-sdk_bundle.md
│ │ │ ├── operator-sdk_bundle_validate.md
│ │ │ ├── operator-sdk_cleanup.md
│ │ │ ├── operator-sdk_completion.md
│ │ │ ├── operator-sdk_completion_bash.md
│ │ │ ├── operator-sdk_completion_fish.md
│ │ │ ├── operator-sdk_completion_powershell.md
│ │ │ ├── operator-sdk_completion_zsh.md
│ │ │ ├── operator-sdk_create.md
│ │ │ ├── operator-sdk_create_api.md
│ │ │ ├── operator-sdk_create_webhook.md
│ │ │ ├── operator-sdk_edit.md
│ │ │ ├── operator-sdk_generate.md
│ │ │ ├── operator-sdk_generate_bundle.md
│ │ │ ├── operator-sdk_generate_kustomize.md
│ │ │ ├── operator-sdk_generate_kustomize_manifests.md
│ │ │ ├── operator-sdk_init.md
│ │ │ ├── operator-sdk_olm.md
│ │ │ ├── operator-sdk_olm_install.md
│ │ │ ├── operator-sdk_olm_status.md
│ │ │ ├── operator-sdk_olm_uninstall.md
│ │ │ ├── operator-sdk_pkgman-to-bundle.md
│ │ │ ├── operator-sdk_run.md
│ │ │ ├── operator-sdk_run_bundle-upgrade.md
│ │ │ ├── operator-sdk_run_bundle.md
│ │ │ ├── operator-sdk_scorecard.md
│ │ │ └── operator-sdk_version.md
│ │ ├── contribution-guidelines/
│ │ │ ├── _index.md
│ │ │ ├── changelog.md
│ │ │ ├── developer-guide.md
│ │ │ ├── documentation.md
│ │ │ ├── faq.md
│ │ │ ├── issue-lifecycle.md
│ │ │ ├── opening-pull-requests.md
│ │ │ ├── plugins.md
│ │ │ ├── releasing.md
│ │ │ ├── reporting-issues.md
│ │ │ └── testing.md
│ │ ├── faqs/
│ │ │ └── _index.md
│ │ ├── installation/
│ │ │ └── _index.md
│ │ ├── olm-integration/
│ │ │ ├── _index.md
│ │ │ ├── cli-overview.md
│ │ │ ├── generation.md
│ │ │ ├── quickstart-bundle.md
│ │ │ ├── testing-deployment.md
│ │ │ ├── tutorial-bundle.md
│ │ │ └── tutorial-package-manifests.md
│ │ ├── overview/
│ │ │ ├── _index.md
│ │ │ ├── cheat-sheet.md
│ │ │ ├── operator-capabilities.md
│ │ │ └── project-layout.md
│ │ ├── testing-operators/
│ │ │ ├── _index.md
│ │ │ └── scorecard/
│ │ │ ├── _index.md
│ │ │ ├── custom-tests.md
│ │ │ └── kuttl-tests.md
│ │ └── upgrading-sdk-version/
│ │ ├── _index.md
│ │ ├── backport-policy.md
│ │ ├── v0.1.0-migration-guide.md
│ │ ├── v0.18.0.md
│ │ ├── v0.19.0.md
│ │ ├── v1.0.0.md
│ │ ├── v1.1.0.md
│ │ ├── v1.10.0.md
│ │ ├── v1.11.0.md
│ │ ├── v1.12.0.md
│ │ ├── v1.13.0.md
│ │ ├── v1.14.0.md
│ │ ├── v1.15.0.md
│ │ ├── v1.16.0.md
│ │ ├── v1.17.0.md
│ │ ├── v1.18.0.md
│ │ ├── v1.19.0.md
│ │ ├── v1.2.0.md
│ │ ├── v1.20.0.md
│ │ ├── v1.21.0.md
│ │ ├── v1.22.0.md
│ │ ├── v1.23.0.md
│ │ ├── v1.24.0.md
│ │ ├── v1.25.0.md
│ │ ├── v1.26.0.md
│ │ ├── v1.27.0.md
│ │ ├── v1.28.0.md
│ │ ├── v1.29.0.md
│ │ ├── v1.3.0.md
│ │ ├── v1.30.0.md
│ │ ├── v1.31.0.md
│ │ ├── v1.32.0.md
│ │ ├── v1.33.0.md
│ │ ├── v1.34.0.md
│ │ ├── v1.35.0.md
│ │ ├── v1.36.0.md
│ │ ├── v1.37.0.md
│ │ ├── v1.38.0.md
│ │ ├── v1.39.0.md
│ │ ├── v1.39.1.md
│ │ ├── v1.39.2.md
│ │ ├── v1.4.0.md
│ │ ├── v1.40.0.md
│ │ ├── v1.41.0.md
│ │ ├── v1.42.0.md
│ │ ├── v1.42.1.md
│ │ ├── v1.42.2.md
│ │ ├── v1.5.0.md
│ │ ├── v1.6.0.md
│ │ ├── v1.6.1.md
│ │ ├── v1.7.0.md
│ │ ├── v1.7.1.md
│ │ ├── v1.8.0.md
│ │ ├── v1.9.0.md
│ │ └── version-upgrade-guide.md
│ └── search.md
├── layouts/
│ ├── 404.html
│ ├── _default/
│ │ ├── baseof.html
│ │ └── single.html
│ ├── build/
│ │ └── single.html
│ ├── docs/
│ │ ├── baseof.html
│ │ ├── list.html
│ │ └── single.html
│ ├── faq/
│ │ └── baseof.html
│ ├── index.html
│ ├── partials/
│ │ ├── footer.html
│ │ ├── head.html
│ │ ├── hooks/
│ │ │ ├── body-end.html
│ │ │ └── head-end.html
│ │ ├── navbar-version-selector.html
│ │ ├── navbar.html
│ │ ├── scripts.html
│ │ └── section-index.html
│ └── shortcodes/
│ ├── client-go-version.html
│ ├── kube-version.html
│ └── table.html
└── scripts/
├── set_menu_version.sh
├── update_branch_mappings.sh
├── update_download_url.sh
└── update_latest_release_compat.sh
SYMBOL INDEX (1631 symbols across 266 files)
FILE: cmd/helm-operator/main.go
function main (line 27) | func main() {
FILE: cmd/operator-sdk/main.go
function main (line 27) | func main() {
FILE: hack/generate/cli-doc/gen-cli-doc.go
constant fmTemplate (line 31) | fmTemplate = `---
function main (line 36) | func main() {
function htmlFormatter (line 50) | func htmlFormatter(rootCmd *cobra.Command) {
function recreateDocDir (line 66) | func recreateDocDir(rootCmd *cobra.Command, docPath string) {
FILE: hack/generate/cncf-maintainers/main.go
type ownersMap (line 11) | type ownersMap
type aliasesMap (line 12) | type aliasesMap struct
function main (line 16) | func main() {
FILE: hack/generate/samples/generate_testdata.go
function main (line 30) | func main() {
FILE: hack/generate/samples/internal/go/generate.go
function GenerateMemcachedSamples (line 23) | func GenerateMemcachedSamples(binaryPath, rootPath string) {
FILE: hack/generate/samples/internal/go/memcached-with-customization/e2e_test_code.go
method implementingE2ETests (line 15) | func (mh *Memcached) implementingE2ETests() {
method addTestE2eMakefileTarget (line 36) | func (mh *Memcached) addTestE2eMakefileTarget() {
method addContent (line 45) | func (mh *Memcached) addContent(testE2eDir string, testUtilsDir string) {
method createGoFiles (line 74) | func (mh *Memcached) createGoFiles(testE2eDir string, testUtilsDir strin...
method createDirs (line 85) | func (mh *Memcached) createDirs(testDir string, testE2eDir string, testU...
constant e2eSuiteTemplate (line 100) | e2eSuiteTemplate = `/*
constant e2eTemplate (line 134) | e2eTemplate = `/*
constant e2eWithMonitoringTemplate (line 331) | e2eWithMonitoringTemplate = `/*
constant utilsTemplate (line 709) | utilsTemplate = `/*
FILE: hack/generate/samples/internal/go/memcached-with-customization/memcached_with_customization.go
constant monitoringString (line 31) | monitoringString = " and monitoring"
type Memcached (line 34) | type Memcached struct
method Prepare (line 67) | func (mh *Memcached) Prepare() {
method Run (line 89) | func (mh *Memcached) Run() {
method uncommentDefaultKustomizationV4 (line 189) | func (mh *Memcached) uncommentDefaultKustomizationV4() {
method uncommentManifestsKustomizationv4 (line 341) | func (mh *Memcached) uncommentManifestsKustomizationv4() {
method implementingWebhooks (line 368) | func (mh *Memcached) implementingWebhooks() {
method implementingController (line 380) | func (mh *Memcached) implementingController() {
method implementingMonitoring (line 394) | func (mh *Memcached) implementingMonitoring() {
method implementingAPIMarkers (line 432) | func (mh *Memcached) implementingAPIMarkers() {
method implementingMetrics (line 490) | func (mh *Memcached) implementingMetrics() {
method implementingAlerts (line 538) | func (mh *Memcached) implementingAlerts() {
method implementingPromRuleCi (line 557) | func (mh *Memcached) implementingPromRuleCi() {
method implementingRunbooks (line 605) | func (mh *Memcached) implementingRunbooks() {
method implementingPrometheusRBAC (line 635) | func (mh *Memcached) implementingPrometheusRBAC() {
method customizingController (line 670) | func (mh *Memcached) customizingController() {
method customizingMain (line 719) | func (mh *Memcached) customizingMain() {
method customizingMainMonitoring (line 729) | func (mh *Memcached) customizingMainMonitoring() {
method customizingDockerfile (line 752) | func (mh *Memcached) customizingDockerfile() {
method customizingMakefile (line 766) | func (mh *Memcached) customizingMakefile() {
function GenerateSample (line 44) | func GenerateSample(binaryPath, samplesPath string) {
constant createdAt (line 763) | createdAt = `createdAt: "2022-11-08T17:26:37Z"`
constant metricsFragment (line 783) | metricsFragment = `
constant metricsdocsFragment (line 838) | metricsdocsFragment = `
constant alertsFragment (line 885) | alertsFragment = `
constant promRuleTestsFragment (line 973) | promRuleTestsFragment = `---
constant ruleSpecDumperFragment (line 1046) | ruleSpecDumperFragment = `
constant verifyRulesFragment (line 1088) | verifyRulesFragment = `#!/bin/bash -e
constant memcachedDeploymentSizeUndesiredRunbookFragment (line 1132) | memcachedDeploymentSizeUndesiredRunbookFragment = `# MemcachedDeployment...
constant memcachedOperatorDownRunbookFragment (line 1162) | memcachedOperatorDownRunbookFragment = `# MemcachedOperatorDown
constant prometheusRoleFragment (line 1188) | prometheusRoleFragment = `---
constant prometheusRoleBindingFragment (line 1202) | prometheusRoleBindingFragment = `---
constant controllerMemcachedInstanceFragment (line 1218) | controllerMemcachedInstanceFragment = `
constant controllerPrometheusRuleFragment (line 1225) | controllerPrometheusRuleFragment = `
constant mainRecorderFragment (line 1256) | mainRecorderFragment = `
constant monitoringv1ImportFragment (line 1260) | monitoringv1ImportFragment = `
constant monitoringImportFragment (line 1265) | monitoringImportFragment = `
constant mainMonitoringFragment (line 1269) | mainMonitoringFragment = `
constant makefileFragment (line 1275) | makefileFragment = `
constant metricsdocsMakefileFragment (line 1292) | metricsdocsMakefileFragment = `
constant userIDWarningFragment (line 1301) | userIDWarningFragment = `
constant runAsUserCommentFragment (line 1308) | runAsUserCommentFragment = `
FILE: hack/generate/samples/internal/helm/generate.go
function GenerateMemcachedSamples (line 21) | func GenerateMemcachedSamples(binaryPath, rootPath string) {
FILE: hack/generate/samples/internal/helm/memcached.go
type Memcached (line 29) | type Memcached struct
method Prepare (line 50) | func (mh *Memcached) Prepare() {
method Run (line 66) | func (mh *Memcached) Run() {
function GenerateMemcachedSample (line 37) | func GenerateMemcachedSample(binaryPath, samplesPath string) {
constant createdAt (line 123) | createdAt = `createdAt: "2022-11-08T17:26:37Z"`
constant policyRolesFragment (line 125) | policyRolesFragment = `
FILE: hack/generate/samples/internal/pkg/context.go
type SampleContext (line 22) | type SampleContext struct
function NewSampleContext (line 27) | func NewSampleContext(binary string, path string, env ...string) (s Samp...
FILE: hack/generate/samples/internal/pkg/utils.go
function CheckError (line 29) | func CheckError(msg string, err error) {
method StripBundleAnnotations (line 40) | func (ctx SampleContext) StripBundleAnnotations() (err error) {
function removeAllAnnotationLines (line 62) | func removeAllAnnotationLines(annotations map[string]string, filePaths [...
FILE: images/custom-scorecard-tests/main.go
constant PodBundleRoot (line 36) | PodBundleRoot = "/bundle"
function main (line 38) | func main() {
function printValidTests (line 73) | func printValidTests() scapiv1alpha3.TestStatus {
constant CustomTest1Name (line 89) | CustomTest1Name = "customtest1"
constant CustomTest2Name (line 90) | CustomTest2Name = "customtest2"
function CustomTest1 (line 97) | func CustomTest1(bundle *apimanifests.Bundle) scapiv1alpha3.TestStatus {
function CustomTest2 (line 111) | func CustomTest2(bundle *apimanifests.Bundle) scapiv1alpha3.TestStatus {
function wrapResult (line 124) | func wrapResult(r scapiv1alpha3.TestResult) scapiv1alpha3.TestStatus {
FILE: images/scorecard-test-kuttl/main.go
function main (line 35) | func main() {
function getTestStatus (line 76) | func getTestStatus(tc []*Testcase) (s v1alpha3.TestStatus) {
function printErrorStatus (line 101) | func printErrorStatus(err error) {
type Property (line 121) | type Property struct
type Properties (line 127) | type Properties struct
type Failure (line 132) | type Failure struct
type Testcase (line 141) | type Testcase struct
type Testsuite (line 155) | type Testsuite struct
type Testsuites (line 172) | type Testsuites struct
function getKuttlLogs (line 190) | func getKuttlLogs() string {
FILE: images/scorecard-test/main.go
function main (line 40) | func main() {
function printValidTests (line 85) | func printValidTests() scapiv1alpha3.TestStatus {
FILE: internal/annotations/metrics/metrics.go
constant mediaTypeV1 (line 26) | mediaTypeV1 = "metrics+v1"
constant mediaTypeBundleAnnotation (line 31) | mediaTypeBundleAnnotation = "operators.operatorframework.io.metrics.medi...
constant builderBundleAnnotation (line 32) | builderBundleAnnotation = "operators.operatorframework.io.metrics.buil...
constant layoutBundleAnnotation (line 33) | layoutBundleAnnotation = "operators.operatorframework.io.metrics.proj...
constant BuilderObjectAnnotation (line 38) | BuilderObjectAnnotation = "operators.operatorframework.io/builder"
constant LayoutObjectAnnotation (line 39) | LayoutObjectAnnotation = "operators.operatorframework.io/project_layout"
function MakeBundleMetadataLabels (line 44) | func MakeBundleMetadataLabels(layout string) map[string]string {
function MakeBundleObjectAnnotations (line 54) | func MakeBundleObjectAnnotations(layout string) map[string]string {
function getSDKBuilder (line 61) | func getSDKBuilder(rawSDKVersion string) string {
function parseVersion (line 65) | func parseVersion(input string) string {
function isUnreleased (line 79) | func isUnreleased(input string) bool {
FILE: internal/annotations/metrics/metrics_suite_test.go
function TestMetrics (line 24) | func TestMetrics(t *testing.T) {
FILE: internal/annotations/scorecard/scorecard.go
constant mediaTypeV1 (line 23) | mediaTypeV1 = "scorecard+v1"
constant mediaTypeBundleKey (line 30) | mediaTypeBundleKey = "operators.operatorframework.io.test.mediatype.v1"
constant configBundleKey (line 31) | configBundleKey = "operators.operatorframework.io.test.config.v1"
function MakeBundleMetadataLabels (line 34) | func MakeBundleMetadataLabels(configDir string) map[string]string {
function GetConfigDir (line 41) | func GetConfigDir(labels map[string]string) (value string, hasKey bool) {
function configKeyForMediaType (line 48) | func configKeyForMediaType(labels map[string]string) (string, bool) {
FILE: internal/bindata/olm/manifests.go
function bindataRead (line 23) | func bindataRead(data []byte, name string) ([]byte, error) {
type asset (line 43) | type asset struct
type bindataFileInfo (line 48) | type bindataFileInfo struct
method Name (line 56) | func (fi bindataFileInfo) Name() string {
method Size (line 61) | func (fi bindataFileInfo) Size() int64 {
method Mode (line 66) | func (fi bindataFileInfo) Mode() os.FileMode {
method ModTime (line 71) | func (fi bindataFileInfo) ModTime() time.Time {
method IsDir (line 76) | func (fi bindataFileInfo) IsDir() bool {
method Sys (line 81) | func (fi bindataFileInfo) Sys() any {
function olmManifests0260CrdsYamlBytes (line 87) | func olmManifests0260CrdsYamlBytes() ([]byte, error) {
function olmManifests0260CrdsYaml (line 94) | func olmManifests0260CrdsYaml() (*asset, error) {
function olmManifests0260OlmYamlBytes (line 107) | func olmManifests0260OlmYamlBytes() ([]byte, error) {
function olmManifests0260OlmYaml (line 114) | func olmManifests0260OlmYaml() (*asset, error) {
function olmManifests0270CrdsYamlBytes (line 127) | func olmManifests0270CrdsYamlBytes() ([]byte, error) {
function olmManifests0270CrdsYaml (line 134) | func olmManifests0270CrdsYaml() (*asset, error) {
function olmManifests0270OlmYamlBytes (line 147) | func olmManifests0270OlmYamlBytes() ([]byte, error) {
function olmManifests0270OlmYaml (line 154) | func olmManifests0270OlmYaml() (*asset, error) {
function olmManifests0280CrdsYamlBytes (line 167) | func olmManifests0280CrdsYamlBytes() ([]byte, error) {
function olmManifests0280CrdsYaml (line 174) | func olmManifests0280CrdsYaml() (*asset, error) {
function olmManifests0280OlmYamlBytes (line 187) | func olmManifests0280OlmYamlBytes() ([]byte, error) {
function olmManifests0280OlmYaml (line 194) | func olmManifests0280OlmYaml() (*asset, error) {
function Asset (line 208) | func Asset(name string) ([]byte, error) {
function MustAsset (line 222) | func MustAsset(name string) []byte {
function AssetInfo (line 234) | func AssetInfo(name string) (os.FileInfo, error) {
function AssetNames (line 247) | func AssetNames() []string {
function AssetDir (line 280) | func AssetDir(name string) ([]string, error) {
type bintree (line 302) | type bintree struct
function RestoreAsset (line 319) | func RestoreAsset(dir, name string) error {
function RestoreAssets (line 344) | func RestoreAssets(dir, name string) error {
function _filePath (line 360) | func _filePath(dir, name string) string {
FILE: internal/bindata/olm/versions.go
function HasVersion (line 24) | func HasVersion(version string) bool {
FILE: internal/cmd/helm-operator/run/cmd.go
function printVersion (line 56) | func printVersion() {
function NewCmd (line 69) | func NewCmd() *cobra.Command {
function run (line 95) | func run(cmd *cobra.Command, f *flags.Flags) {
function exitIfUnsupported (line 216) | func exitIfUnsupported(options manager.Options) {
function configureWatchNamespaces (line 224) | func configureWatchNamespaces(options *manager.Options, log logr.Logger) {
function splitNamespaces (line 251) | func splitNamespaces(namespaces string) []string {
function configureSelectors (line 263) | func configureSelectors(opts *manager.Options, ws []watches.Watch, sch *...
FILE: internal/cmd/helm-operator/version/cmd.go
function NewCmd (line 26) | func NewCmd() *cobra.Command {
function run (line 37) | func run() {
FILE: internal/cmd/helm-operator/version/version_suite_test.go
function TestVersion (line 24) | func TestVersion(t *testing.T) {
FILE: internal/cmd/operator-sdk/alpha/config3alphato3/cmd.go
function NewCmd (line 26) | func NewCmd() *cobra.Command {
function getConfigVersion (line 77) | func getConfigVersion(b []byte) (string, error) {
FILE: internal/cmd/operator-sdk/alpha/config3alphato3/convert_config_3-alpha_to_3.go
type templObj (line 37) | type templObj struct
function convertConfig3AlphaTo3 (line 43) | func convertConfig3AlphaTo3(cfgBytes []byte) (_ []byte, err error) {
constant tmpl (line 168) | tmpl = `resources:
FILE: internal/cmd/operator-sdk/alpha/config3alphato3/convert_config_3-alpha_to_3_test.go
constant basicConfig (line 43) | basicConfig = `domain: example.com
constant basicConfigExp (line 53) | basicConfigExp = `domain: example.com
constant noDomainConfig (line 72) | noDomainConfig = `layout: ansible.sdk.operatorframework.io/v1
constant noDomainConfigExp (line 80) | noDomainConfigExp = `layout: ansible.sdk.operatorframework.io/v1
constant noResourcesConfig (line 96) | noResourcesConfig = `domain: example.com
constant noResourcesConfigExp (line 101) | noResourcesConfigExp = `domain: example.com
constant complexConfig (line 109) | complexConfig = `domain: example.com
constant complexConfigExp (line 136) | complexConfigExp = `domain: example.com
FILE: internal/cmd/operator-sdk/alpha/config3alphato3/suite_test.go
function TestInternal (line 24) | func TestInternal(t *testing.T) {
FILE: internal/cmd/operator-sdk/bundle/bundle_suite_test.go
function TestBundle (line 24) | func TestBundle(t *testing.T) {
FILE: internal/cmd/operator-sdk/bundle/cmd.go
function NewCmd (line 23) | func NewCmd() *cobra.Command {
FILE: internal/cmd/operator-sdk/bundle/validate/cmd.go
constant longHelp (line 31) | longHelp = `The 'operator-sdk bundle validate' command can validate both...
constant examples (line 46) | examples = `This example assumes you either have a *pullable* bundle image,
function NewCmd (line 117) | func NewCmd() *cobra.Command {
function createLogger (line 177) | func createLogger(verbose bool) *log.Entry {
FILE: internal/cmd/operator-sdk/bundle/validate/cmd_suite_test.go
function TestValidate (line 24) | func TestValidate(t *testing.T) {
FILE: internal/cmd/operator-sdk/bundle/validate/internal/logger.go
function NewLoggerTo (line 24) | func NewLoggerTo(w io.Writer) *log.Logger {
FILE: internal/cmd/operator-sdk/bundle/validate/optional.go
constant nameKey (line 32) | nameKey = "name"
constant suiteKey (line 33) | suiteKey = "suite"
function runOptionalValidators (line 110) | func runOptionalValidators(bundle *apimanifests.Bundle, sel labels.Selec...
function listOptionalValidators (line 115) | func listOptionalValidators(w io.Writer) error {
type validator (line 121) | type validator struct
type validators (line 128) | type validators
method String (line 130) | func (vals validators) String() string {
method checkMatches (line 154) | func (vals validators) checkMatches(sel labels.Selector) error {
method run (line 164) | func (vals validators) run(bundle *apimanifests.Bundle, sel labels.Sel...
FILE: internal/cmd/operator-sdk/bundle/validate/validate.go
type bundleValidateCmd (line 38) | type bundleValidateCmd struct
method validate (line 50) | func (c bundleValidateCmd) validate(args []string) error {
method addToFlagSet (line 74) | func (c *bundleValidateCmd) addToFlagSet(fs *pflag.FlagSet) {
method run (line 113) | func (c bundleValidateCmd) run(logger *log.Entry, bundleRaw string) (r...
method list (line 195) | func (c bundleValidateCmd) list() error {
method unpackImageIntoDir (line 245) | func (c bundleValidateCmd) unpackImageIntoDir(reg registryimage.Regist...
function getBundleDataFromDir (line 200) | func getBundleDataFromDir(dir string) (*apimanifests.Bundle, string, err...
function newImageRegistryForTool (line 226) | func newImageRegistryForTool(logger *log.Entry, toolStr string) (reg reg...
function relWd (line 256) | func relWd(dir string) (out string, err error) {
function isExist (line 268) | func isExist(path string) bool {
FILE: internal/cmd/operator-sdk/cleanup/cmd.go
function NewCmd (line 27) | func NewCmd() *cobra.Command {
FILE: internal/cmd/operator-sdk/cli/cli.go
function Run (line 64) | func Run() error {
function GetPluginsCLIAndRoot (line 72) | func GetPluginsCLIAndRoot() (*cli.CLI, *cobra.Command) {
function rootPersistentPreRun (line 149) | func rootPersistentPreRun(cmd *cobra.Command, args []string) {
FILE: internal/cmd/operator-sdk/cli/cli_suite_test.go
function TestVersion (line 24) | func TestVersion(t *testing.T) {
FILE: internal/cmd/operator-sdk/cli/version.go
function makeVersionString (line 24) | func makeVersionString() string {
FILE: internal/cmd/operator-sdk/generate/bundle/bundle.go
constant longHelp (line 41) | longHelp = `
constant examples (line 70) | examples = `
constant defaultRootDir (line 113) | defaultRootDir = "bundle"
method setDefaults (line 116) | func (c *bundleCmd) setDefaults() (err error) {
method validateManifests (line 124) | func (c bundleCmd) validateManifests() (err error) {
method runManifests (line 156) | func (c bundleCmd) runManifests() (err error) {
function writeScorecardConfig (line 250) | func writeScorecardConfig(dir string, cfg v1alpha3.Configuration) error {
method runMetadata (line 270) | func (c bundleCmd) runMetadata() error {
method pinImages (line 309) | func (c bundleCmd) pinImages(manifestPath string) error {
FILE: internal/cmd/operator-sdk/generate/bundle/cmd.go
type bundleCmd (line 27) | type bundleCmd struct
method addFlagsTo (line 115) | func (c *bundleCmd) addFlagsTo(fs *pflag.FlagSet) {
method println (line 149) | func (c bundleCmd) println(a ...any) {
function NewCmd (line 58) | func NewCmd() *cobra.Command {
FILE: internal/cmd/operator-sdk/generate/cmd.go
function NewCmd (line 26) | func NewCmd() *cobra.Command {
FILE: internal/cmd/operator-sdk/generate/internal/genutil.go
function ValidateVersion (line 35) | func ValidateVersion(version string) error {
function IsPipeReader (line 50) | func IsPipeReader() bool {
function WriteObjects (line 59) | func WriteObjects(w io.Writer, objs ...client.Object) error {
function WriteObjectsToFiles (line 69) | func WriteObjectsToFiles(dir string, objs ...client.Object) error {
function makeCRDFileName (line 108) | func makeCRDFileName(group, resource string) string {
function makeObjectFileName (line 112) | func makeObjectFileName(obj client.Object) string {
function writeObjectToFile (line 121) | func writeObjectToFile(dir string, obj any, fileName string) error {
function writeObject (line 131) | func writeObject(w io.Writer, obj any) error {
type multiManifestWriter (line 142) | type multiManifestWriter struct
method Write (line 146) | func (w *multiManifestWriter) Write(b []byte) (int, error) {
function NewMultiManifestWriter (line 152) | func NewMultiManifestWriter(w io.Writer) io.Writer {
function IsNotExist (line 157) | func IsNotExist(path string) bool {
function IsExist (line 166) | func IsExist(path string) bool {
function GetPackageNameAndLayout (line 176) | func GetPackageNameAndLayout(defaultPackageName string) (packageName str...
FILE: internal/cmd/operator-sdk/generate/internal/genutil_suite_test.go
function TestGenutil (line 24) | func TestGenutil(t *testing.T) {
FILE: internal/cmd/operator-sdk/generate/internal/manifests.go
function GetManifestObjects (line 25) | func GetManifestObjects(c *collector.Manifests, extraSAs []string) (objs...
function removeNamespace (line 62) | func removeNamespace(objs []client.Object) {
FILE: internal/cmd/operator-sdk/generate/internal/relatedimages.go
function FindRelatedImages (line 29) | func FindRelatedImages(manifestCol *collector.Manifests) ([]operatorsv1a...
constant relatedImagePrefix (line 56) | relatedImagePrefix = "RELATED_IMAGE_"
type relatedImage (line 58) | type relatedImage struct
type relatedImageCollector (line 64) | type relatedImageCollector struct
method collectFromEnvironment (line 71) | func (c *relatedImageCollector) collectFromEnvironment(containerRef st...
method collect (line 86) | func (c *relatedImageCollector) collect(name, imageRef, containerRef s...
method collectedRelatedImages (line 114) | func (c *relatedImageCollector) collectedRelatedImages() []operatorsv1...
method formatName (line 149) | func (c *relatedImageCollector) formatName(name string) string {
FILE: internal/cmd/operator-sdk/generate/internal/relatedimages_test.go
function relatedImage (line 164) | func relatedImage(name, image string) operatorsv1alpha1.RelatedImage {
function relatedImageEnvVar (line 168) | func relatedImageEnvVar(name, image string) string {
function deployment (line 172) | func deployment(name string, containers ...corev1.Container) appsv1.Depl...
function container (line 179) | func container(name string, envVars ...string) corev1.Container {
FILE: internal/cmd/operator-sdk/generate/kustomize/cmd.go
function NewCmd (line 22) | func NewCmd() *cobra.Command {
FILE: internal/cmd/operator-sdk/generate/kustomize/manifests.go
constant longHelp (line 43) | longHelp = `
constant examples (line 50) | examples = `
type manifestsCmd (line 73) | type manifestsCmd struct
method addFlagsTo (line 131) | func (c *manifestsCmd) addFlagsTo(fs *pflag.FlagSet) {
method setDefaults (line 145) | func (c *manifestsCmd) setDefaults(cfg config.Config) error {
method run (line 164) | func (c manifestsCmd) run(cfg config.Config) error {
function newManifestsCmd (line 86) | func newManifestsCmd() *cobra.Command {
function requiresInteraction (line 248) | func requiresInteraction(basePath string, ilvl projutil.InteractiveLevel...
function getGVKs (line 252) | func getGVKs(cfg config.Config) ([]schema.GroupVersionKind, error) {
FILE: internal/cmd/operator-sdk/generate/packagemanifests/cmd.go
type packagemanifestsCmd (line 29) | type packagemanifestsCmd struct
method addFlagsTo (line 91) | func (c *packagemanifestsCmd) addFlagsTo(fs *pflag.FlagSet) {
method println (line 114) | func (c packagemanifestsCmd) println(a ...any) {
function NewCmd (line 54) | func NewCmd() *cobra.Command {
FILE: internal/cmd/operator-sdk/generate/packagemanifests/packagemanifests.go
constant longHelp (line 32) | longHelp = `
constant examples (line 56) | examples = `
constant defaultRootDir (line 96) | defaultRootDir = "packagemanifests"
method setDefaults (line 99) | func (c *packagemanifestsCmd) setDefaults() (err error) {
method validate (line 114) | func (c packagemanifestsCmd) validate() error {
method run (line 157) | func (c packagemanifestsCmd) run() error {
method generatePackageManifest (line 229) | func (c packagemanifestsCmd) generatePackageManifest() error {
FILE: internal/cmd/operator-sdk/generate/packagemanifests/packagemanifests_suite_test.go
function TestPackagemanifests (line 24) | func TestPackagemanifests(t *testing.T) {
FILE: internal/cmd/operator-sdk/olm/cmd.go
function NewCmd (line 21) | func NewCmd() *cobra.Command {
FILE: internal/cmd/operator-sdk/olm/install.go
function newInstallCmd (line 24) | func newInstallCmd() *cobra.Command {
FILE: internal/cmd/operator-sdk/olm/olm_suite_test.go
function TestOlm (line 24) | func TestOlm(t *testing.T) {
FILE: internal/cmd/operator-sdk/olm/status.go
function newStatusCmd (line 24) | func newStatusCmd() *cobra.Command {
FILE: internal/cmd/operator-sdk/olm/uninstall.go
function newUninstallCmd (line 24) | func newUninstallCmd() *cobra.Command {
FILE: internal/cmd/operator-sdk/pkgmantobundle/cmd.go
constant longHelp (line 35) | longHelp = `
constant examples (line 50) | examples = `
type pkgManToBundleCmd (line 111) | type pkgManToBundleCmd struct
method run (line 150) | func (p *pkgManToBundleCmd) run() (err error) {
method validate (line 352) | func (p *pkgManToBundleCmd) validate(args []string) error {
function NewCmd (line 122) | func NewCmd() *cobra.Command {
function getScorecardConfigPath (line 236) | func getScorecardConfigPath(inputDir string) (string, error) {
function getSDKStampsAndChannels (line 270) | func getSDKStampsAndChannels(path, defaultChannel string, channelsByCSV ...
function getSDKStamps (line 288) | func getSDKStamps(bundle *apimanifests.Bundle) (map[string]string, error) {
function getChannelsByCSV (line 312) | func getChannelsByCSV(bundle *apimanifests.Bundle, channelsByCSV map[str...
function getPackageMetadata (line 327) | func getPackageMetadata(pkg *apimanifests.PackageManifest) (packagename,...
FILE: internal/cmd/operator-sdk/pkgmantobundle/pkgmantobundle_suite_test.go
function TestPackagemanifestsToBundle (line 24) | func TestPackagemanifestsToBundle(t *testing.T) {
FILE: internal/cmd/operator-sdk/pkgmantobundle/pkgmantobundle_test.go
function getNumberOfDirectories (line 237) | func getNumberOfDirectories(inputDir string) int {
function fileExists (line 251) | func fileExists(path string) bool {
FILE: internal/cmd/operator-sdk/run/bundle/cmd.go
function NewCmd (line 27) | func NewCmd(cfg *operator.Configuration) *cobra.Command {
FILE: internal/cmd/operator-sdk/run/bundleupgrade/cmd.go
function NewCmd (line 27) | func NewCmd(cfg *operator.Configuration) *cobra.Command {
FILE: internal/cmd/operator-sdk/run/cmd.go
function NewCmd (line 26) | func NewCmd() *cobra.Command {
FILE: internal/cmd/operator-sdk/run/packagemanifests/packagemanifests.go
function NewCmd (line 27) | func NewCmd(cfg *operator.Configuration) *cobra.Command {
FILE: internal/cmd/operator-sdk/run/packagemanifests/packagemanifests_suite_test.go
function TestRun (line 24) | func TestRun(t *testing.T) {
FILE: internal/cmd/operator-sdk/run/run_suite_test.go
function TestRun (line 24) | func TestRun(t *testing.T) {
FILE: internal/cmd/operator-sdk/scorecard/cmd.go
type scorecardCmd (line 41) | type scorecardCmd struct
method printOutput (line 109) | func (c *scorecardCmd) printOutput(output v1alpha3.TestList) error {
method convertXunit (line 138) | func (c *scorecardCmd) convertXunit(output v1alpha3.TestList) xunit.Te...
method run (line 178) | func (c *scorecardCmd) run() (err error) {
method validate (line 288) | func (c *scorecardCmd) validate(args []string) error {
function NewCmd (line 58) | func NewCmd() *cobra.Command {
function hasFailingTest (line 277) | func hasFailingTest(list v1alpha3.TestList) bool {
function extractBundleImage (line 296) | func extractBundleImage(bundleImage string) (string, error) {
FILE: internal/cmd/operator-sdk/scorecard/scorecard_suite_test.go
function TestScorecard (line 24) | func TestScorecard(t *testing.T) {
FILE: internal/cmd/operator-sdk/scorecard/xunit/xunit.go
function NewTestSuites (line 23) | func NewTestSuites(name string, testSuites []TestSuite) TestSuites {
type TestSuites (line 31) | type TestSuites struct
type Property (line 38) | type Property struct
type TestSuite (line 44) | type TestSuite struct
method AddProperty (line 62) | func (ts *TestSuite) AddProperty(name, value string) {
method AddSuccess (line 67) | func (ts *TestSuite) AddSuccess(name string, time time.Time, logs stri...
method AddFailure (line 72) | func (ts *TestSuite) AddFailure(name string, time time.Time, logs, msg...
method AddError (line 82) | func (ts *TestSuite) AddError(name string, time time.Time, logs, msg s...
method addTest (line 91) | func (ts *TestSuite) addTest(name string, time time.Time, logs string,...
function NewSuite (line 57) | func NewSuite(name string) TestSuite {
type TestCase (line 102) | type TestCase struct
type Result (line 110) | type Result struct
FILE: internal/flags/flags.go
constant VerboseOpt (line 19) | VerboseOpt = "verbose"
FILE: internal/generate/clusterserviceversion/bases/clusterserviceversion.go
type ClusterServiceVersion (line 35) | type ClusterServiceVersion struct
method GetBase (line 64) | func (b ClusterServiceVersion) GetBase() (base *v1alpha1.ClusterServic...
method setDefaults (line 108) | func (b *ClusterServiceVersion) setDefaults() {
method newBase (line 152) | func (b ClusterServiceVersion) newBase() *v1alpha1.ClusterServiceVersi...
function New (line 101) | func New(operatorName string) *v1alpha1.ClusterServiceVersion {
function readClusterServiceVersionBase (line 187) | func readClusterServiceVersionBase(path string) (*v1alpha1.ClusterServic...
FILE: internal/generate/clusterserviceversion/bases/definitions/ast.go
type importIdents (line 32) | type importIdents
method findPackagePathForSelExpr (line 68) | func (im importIdents) findPackagePathForSelExpr(expr *ast.SelectorExp...
function newImportIdents (line 38) | func newImportIdents(pkg *loader.Package) (importIdents, error) {
method getMarkedChildrenOfField (line 96) | func (g generator) getMarkedChildrenOfField(rootPkg *loader.Package, roo...
FILE: internal/generate/clusterserviceversion/bases/definitions/crd.go
function MakeFullGroupFromName (line 39) | func MakeFullGroupFromName(name string) string {
function MakeGroupFromFullGroup (line 44) | func MakeGroupFromFullGroup(group string) string {
function getHalfBySep (line 50) | func getHalfBySep(s, sep string, half uint) string {
method buildCRDDescriptionFromType (line 59) | func (g generator) buildCRDDescriptionFromType(gvk schema.GroupVersionKi...
method getTypedDescriptors (line 120) | func (g generator) getTypedDescriptors(pkg *loader.Package, kindType *ma...
function getTypedDescriptors (line 136) | func getTypedDescriptors(markedFields map[crd.TypeIdent][]*fieldInfo, t ...
function findChildForDescType (line 168) | func findChildForDescType(info *markers.TypeInfo, descType string) (mark...
function sortDescriptors (line 183) | func sortDescriptors(values []reflect.Value) {
function sortResources (line 191) | func sortResources(rs []v1alpha1.APIResourceReference) {
FILE: internal/generate/clusterserviceversion/bases/definitions/crd_test.go
function intPtr (line 165) | func intPtr(i int) *int { return &i }
function makeMockMarkedFields (line 169) | func makeMockMarkedFields() (markedFields map[crd.TypeIdent][]*fieldInfo...
FILE: internal/generate/clusterserviceversion/bases/definitions/definitions.go
type descriptionValues (line 34) | type descriptionValues struct
function ApplyDefinitionsForKeysGo (line 43) | func ApplyDefinitionsForKeysGo(csv *v1alpha1.ClusterServiceVersion, apis...
function updateDefinitionsByKey (line 105) | func updateDefinitionsByKey(csv *v1alpha1.ClusterServiceVersion, defsByG...
function lessForCRDDescription (line 142) | func lessForCRDDescription(descs []v1alpha1.CRDDescription) func(i, j in...
function descToGVK (line 155) | func descToGVK(desc v1alpha1.CRDDescription) (gvk schema.GroupVersionKin...
type generator (line 163) | type generator struct
method contextForRoots (line 170) | func (g *generator) contextForRoots(dirs ...string) (ctx *genall.Gener...
method needTypes (line 191) | func (g *generator) needTypes(ctx *genall.GenerationContext) {
FILE: internal/generate/clusterserviceversion/bases/definitions/definitions_suite_test.go
function TestGenerator (line 24) | func TestGenerator(t *testing.T) {
FILE: internal/generate/clusterserviceversion/bases/definitions/definitions_test.go
function TestApplyDefinitionsForKeysGo (line 36) | func TestApplyDefinitionsForKeysGo(t *testing.T) {
FILE: internal/generate/clusterserviceversion/bases/definitions/markers.go
constant csvPrefix (line 35) | csvPrefix = sdkmarkers.Prefix + ":csv"
constant crdMarkerName (line 37) | crdMarkerName = csvPrefix + ":customresourcedefinitions"
function registerMarkers (line 48) | func registerMarkers(into *markers.Registry) error {
type Resource (line 67) | type Resource
type Resources (line 70) | type Resources
method toResourceReferences (line 107) | func (resources Resources) toResourceReferences() (rs []v1alpha1.APIRe...
type Description (line 75) | type Description struct
type Descriptor (line 91) | type Descriptor struct
type fieldInfo (line 125) | type fieldInfo struct
method setDescriptorFields (line 136) | func (fi fieldInfo) setDescriptorFields(v reflect.Value, descType stri...
constant spec (line 131) | spec = "spec"
constant status (line 132) | status = "status"
function makePath (line 182) | func makePath(rawSegments []string) (string, bool) {
constant inlinedTag (line 207) | inlinedTag = "##inline##"
constant ignoredTag (line 208) | ignoredTag = "##ignore##"
function getPathSegmentForField (line 212) | func getPathSegmentForField(finfo markers.FieldInfo) (string, error) {
function isExported (line 245) | func isExported(name string) bool {
function contains (line 249) | func contains(options []string, key string) bool {
FILE: internal/generate/clusterserviceversion/bases/definitions/markers_test.go
function TestParseResource (line 26) | func TestParseResource(t *testing.T) {
FILE: internal/generate/clusterserviceversion/bases/definitions/zz_generated.markerhelp.go
method Help (line 26) | func (Description) Help() *markers.DefinitionHelp {
method Help (line 50) | func (Descriptor) Help() *markers.DefinitionHelp {
FILE: internal/generate/clusterserviceversion/bases/metadata.go
type uiMetadata (line 27) | type uiMetadata struct
method runInteractivePrompt (line 45) | func (s *uiMetadata) runInteractivePrompt() {
method apply (line 56) | func (s uiMetadata) apply(csv *v1alpha1.ClusterServiceVersion) {
FILE: internal/generate/clusterserviceversion/bases/metadata_test.go
function TestMetadata (line 26) | func TestMetadata(t *testing.T) {
FILE: internal/generate/clusterserviceversion/clusterserviceversion.go
constant csvYamlFileExt (line 35) | csvYamlFileExt = ".clusterserviceversion.yaml"
type Generator (line 44) | type Generator struct
method Generate (line 103) | func (g *Generator) Generate(opts ...Option) (err error) {
method setAnnotations (line 130) | func (g Generator) setAnnotations(csv *operatorsv1alpha1.ClusterServic...
method generate (line 142) | func (g *Generator) generate() (base *operatorsv1alpha1.ClusterService...
type Option (line 66) | type Option
function WithWriter (line 69) | func WithWriter(w io.Writer) Option {
function WithBundleWriter (line 80) | func WithBundleWriter(dir string) Option {
function WithPackageWriter (line 92) | func WithPackageWriter(dir string) Option {
function makeCSVFileName (line 179) | func makeCSVFileName(name string) string {
function requiresInteraction (line 185) | func requiresInteraction(basePath string, ilvl projutil.InteractiveLevel...
FILE: internal/generate/clusterserviceversion/clusterserviceversion_suite_test.go
function TestGenerator (line 24) | func TestGenerator(t *testing.T) {
FILE: internal/generate/clusterserviceversion/clusterserviceversion_test.go
function collectManifestsFromFileHelper (line 382) | func collectManifestsFromFileHelper(col *collector.Manifests, path strin...
function initTestCSVsHelper (line 389) | func initTestCSVsHelper() {
function initTestMultiVersionCSVHelper (line 406) | func initTestMultiVersionCSVHelper() {
function readFileHelper (line 418) | func readFileHelper(path string) string {
function modifyCSVDepImageHelper (line 424) | func modifyCSVDepImageHelper(tag string) func(csv *v1alpha1.ClusterServi...
function modifyDepImageHelper (line 432) | func modifyDepImageHelper(depSpec *appsv1.DeploymentSpec, tag string) {
function getCSVFromFile (line 438) | func getCSVFromFile(path string) (*v1alpha1.ClusterServiceVersion, strin...
function updateCSV (line 463) | func updateCSV(csv *v1alpha1.ClusterServiceVersion,
function upgradeCSV (line 474) | func upgradeCSV(csv *v1alpha1.ClusterServiceVersion, name, version strin...
function containsConversionWebhookDefinition (line 485) | func containsConversionWebhookDefinition(whdef []v1alpha1.WebhookDescrip...
FILE: internal/generate/clusterserviceversion/clusterserviceversion_updaters.go
function ApplyTo (line 42) | func ApplyTo(c *collector.Manifests, csv *operatorsv1alpha1.ClusterServi...
function apply (line 55) | func apply(c *collector.Manifests, csv *operatorsv1alpha1.ClusterService...
function getCSVInstallStrategy (line 78) | func getCSVInstallStrategy(csv *operatorsv1alpha1.ClusterServiceVersion)...
constant defaultServiceAccountName (line 87) | defaultServiceAccountName = "default"
function applyRoles (line 91) | func applyRoles(c *collector.Manifests, objs []client.Object, strategy *...
function applyClusterRoles (line 150) | func applyClusterRoles(c *collector.Manifests, objs []client.Object, str...
function initPermissionSet (line 189) | func initPermissionSet(deps []appsv1.Deployment, extraSAs []string) map[...
function applyDeployments (line 206) | func applyDeployments(c *collector.Manifests, strategy *operatorsv1alpha...
constant WatchNamespaceEnv (line 220) | WatchNamespaceEnv = "WATCH_NAMESPACE"
constant TargetNamespacesRef (line 223) | TargetNamespacesRef = "metadata.annotations['olm.targetNamespaces']"
function setNamespacedFields (line 228) | func setNamespacedFields(csv *operatorsv1alpha1.ClusterServiceVersion) {
function setContainerEnvVarIfExists (line 237) | func setContainerEnvVarIfExists(spec *appsv1.DeploymentSpec, ev corev1.E...
function newFieldRefEnvVar (line 248) | func newFieldRefEnvVar(name, fieldPath string) corev1.EnvVar {
function applyCustomResourceDefinitions (line 263) | func applyCustomResourceDefinitions(c *collector.Manifests, csv *operato...
function applyWebhooks (line 301) | func applyWebhooks(c *collector.Manifests, csv *operatorsv1alpha1.Cluste...
function conversionToWebhookDescription (line 356) | func conversionToWebhookDescription(crdToConfig map[string]apiextv1.Webh...
type serviceportPath (line 420) | type serviceportPath struct
function crdGroups (line 427) | func crdGroups(crdToConfig map[string]apiextv1.WebhookConversion) map[se...
function getConvWebhookCRDNamesAndConfig (line 443) | func getConvWebhookCRDNamesAndConfig(c *collector.Manifests, serviceName...
function validatingToWebhookDescription (line 484) | func validatingToWebhookDescription(webhook admissionregv1.ValidatingWeb...
function mutatingToWebhookDescription (line 528) | func mutatingToWebhookDescription(webhook admissionregv1.MutatingWebhook...
function findMatchingDeploymentAndServiceForWebhook (line 574) | func findMatchingDeploymentAndServiceForWebhook(c *collector.Manifests, ...
function findMatchingDepNameFromService (line 610) | func findMatchingDepNameFromService(c *collector.Manifests, ws *corev1.S...
function applyCustomResources (line 635) | func applyCustomResources(c *collector.Manifests, csv *operatorsv1alpha1...
function validate (line 659) | func validate(csv *operatorsv1alpha1.ClusterServiceVersion) error {
function getGenerateName (line 685) | func getGenerateName(crds []string) string {
FILE: internal/generate/clusterserviceversion/clusterserviceversion_updaters_test.go
function newDeployment (line 439) | func newDeployment(name string, podLabels map[string]string) (dep appsv1...
function newService (line 446) | func newService(name string, labels map[string]string) (s corev1.Service) {
function newServiceAccount (line 454) | func newServiceAccount(name string) (s corev1.ServiceAccount) {
function newDeploymentWithServiceAccount (line 461) | func newDeploymentWithServiceAccount(name, saName string) (d appsv1.Depl...
function newDeploymentWithLabels (line 468) | func newDeploymentWithLabels(name string, labels labels.Set) appsv1.Depl...
function newRole (line 474) | func newRole(name string, rules ...rbacv1.PolicyRule) (r *rbacv1.Role) {
function newClusterRole (line 482) | func newClusterRole(name string, rules ...rbacv1.PolicyRule) (r *rbacv1....
function newRoleBinding (line 490) | func newRoleBinding(name string, ref rbacv1.RoleRef, subjects ...rbacv1....
function newClusterRoleBinding (line 498) | func newClusterRoleBinding(name string, ref rbacv1.RoleRef, subjects ......
function newRef (line 506) | func newRef(name, kind, apiGroup string) (s rbacv1.RoleRef) {
function newRoleRef (line 513) | func newRoleRef(name string) (s rbacv1.RoleRef) {
function newClusterRoleRef (line 517) | func newClusterRoleRef(name string) (s rbacv1.RoleRef) {
function newSubject (line 521) | func newSubject(name, kind string) (s rbacv1.Subject) {
function newServiceAccountSubject (line 528) | func newServiceAccountSubject(name string) rbacv1.Subject {
FILE: internal/generate/collector/clusterserviceversion.go
constant defaultServiceAccountName (line 27) | defaultServiceAccountName = "default"
constant serviceAccountKind (line 29) | serviceAccountKind = "ServiceAccount"
constant roleKind (line 30) | roleKind = "Role"
constant cRoleKind (line 31) | cRoleKind = "ClusterRole"
method SplitCSVPermissionsObjects (line 39) | func (c *Manifests) SplitCSVPermissionsObjects(extraSAs []string) (inPer...
type partialBinding (line 135) | type partialBinding struct
type partialBindings (line 141) | type partialBindings
method getRolesBoundToPartialBindings (line 145) | func (pBindings *partialBindings) getRolesBoundToPartialBindings(refKi...
function acceptRefGroup (line 176) | func acceptRefGroup(apiGroup string) bool {
FILE: internal/generate/collector/clusterserviceversion_test.go
function getRoleNames (line 227) | func getRoleNames(objs []client.Object) []string {
function getRoleBindingNames (line 231) | func getRoleBindingNames(objs []client.Object) []string {
function getClusterRoleNames (line 235) | func getClusterRoleNames(objs []client.Object) []string {
function getClusterRoleBindingNames (line 239) | func getClusterRoleBindingNames(objs []client.Object) []string {
function getServiceAccountNames (line 243) | func getServiceAccountNames(objs []client.Object) []string {
function getNamesForKind (line 247) | func getNamesForKind(kind string, objs []client.Object) (names []string) {
function newDeploymentWithServiceAccount (line 257) | func newDeploymentWithServiceAccount(name string) (d appsv1.Deployment) {
function newRole (line 262) | func newRole(name string) (r rbacv1.Role) {
function newClusterRole (line 268) | func newClusterRole(name string) (r rbacv1.ClusterRole) {
function newRoleBinding (line 274) | func newRoleBinding(name string, ref rbacv1.RoleRef, subjects ...rbacv1....
function newClusterRoleBinding (line 282) | func newClusterRoleBinding(name string, ref rbacv1.RoleRef, subjects ......
function newRef (line 290) | func newRef(name, kind, apiGroup string) (s rbacv1.RoleRef) {
function newRoleRef (line 297) | func newRoleRef(name string) (s rbacv1.RoleRef) {
function newClusterRoleRef (line 301) | func newClusterRoleRef(name string) (s rbacv1.RoleRef) {
function newSubject (line 305) | func newSubject(name, kind string) (s rbacv1.Subject) {
function newServiceAccountSubject (line 311) | func newServiceAccountSubject(name string) (s rbacv1.Subject) {
function newServiceAccount (line 315) | func newServiceAccount(name string) (sa corev1.ServiceAccount) {
FILE: internal/generate/collector/collector_suite_test.go
function TestCollector (line 24) | func TestCollector(t *testing.T) {
FILE: internal/generate/collector/filter.go
method filter (line 31) | func (c *Manifests) filter() {
method filterCustomResources (line 37) | func (c *Manifests) filterCustomResources() {
method deduplicate (line 56) | func (c *Manifests) deduplicate() error {
type marshaller (line 161) | type marshaller interface
function addToHashes (line 168) | func addToHashes(m marshaller, hashes map[string]struct{}) (bool, error) {
function hashContents (line 182) | func hashContents(b []byte) string {
FILE: internal/generate/collector/manifests.go
type Manifests (line 41) | type Manifests struct
method UpdateFromDirs (line 78) | func (c *Manifests) UpdateFromDirs(deployDir, crdsDir string) error {
method UpdateFromDir (line 116) | func (c *Manifests) UpdateFromDir(dir string) error {
method UpdateFromReader (line 123) | func (c *Manifests) UpdateFromReader(r io.Reader) error {
method updateFromReader (line 140) | func (c *Manifests) updateFromReader(r io.Reader) error {
method addClusterServiceVersions (line 192) | func (c *Manifests) addClusterServiceVersions(rawManifests ...[]byte) ...
method addRoles (line 205) | func (c *Manifests) addRoles(rawManifests ...[]byte) error {
method addClusterRoles (line 218) | func (c *Manifests) addClusterRoles(rawManifests ...[]byte) error {
method addRoleBindings (line 230) | func (c *Manifests) addRoleBindings(rawManifests ...[]byte) error {
method addClusterRoleBindings (line 242) | func (c *Manifests) addClusterRoleBindings(rawManifests ...[]byte) err...
method addServiceAccounts (line 254) | func (c *Manifests) addServiceAccounts(rawManifests ...[]byte) error {
method addServices (line 266) | func (c *Manifests) addServices(rawManifests ...[]byte) error {
method addDeployments (line 279) | func (c *Manifests) addDeployments(rawManifests ...[]byte) error {
method addCustomResourceDefinitions (line 293) | func (c *Manifests) addCustomResourceDefinitions(version string, rawMa...
method addValidatingWebhookConfigurations (line 317) | func (c *Manifests) addValidatingWebhookConfigurations(rawManifests .....
method addMutatingWebhookConfigurations (line 330) | func (c *Manifests) addMutatingWebhookConfigurations(rawManifests ...[...
method addScorecardConfig (line 343) | func (c *Manifests) addScorecardConfig(rawManifest []byte) error {
method addOthers (line 357) | func (c *Manifests) addOthers(rawManifests ...[]byte) error {
function isDirExist (line 369) | func isDirExist(dir string) bool {
FILE: internal/generate/internal/genutil.go
type InternalError (line 32) | type InternalError
method Error (line 34) | func (e InternalError) Error() string {
function MakeCSVName (line 39) | func MakeCSVName(name, version string) string {
type File (line 45) | type File struct
function Open (line 51) | func Open(dir, fileName string) (*File, error) {
function WriteObject (line 60) | func WriteObject(w io.Writer, obj any) error {
function WriteYAML (line 74) | func WriteYAML(w io.Writer, obj any) error {
function write (line 84) | func write(w io.Writer, b []byte) error {
function IsExist (line 98) | func IsExist(path string) bool {
function IsNotExist (line 107) | func IsNotExist(path string) bool {
FILE: internal/generate/packagemanifest/packagemanifest.go
constant packageManifestFileExt (line 34) | packageManifestFileExt = ".package.yaml"
type generator (line 38) | type generator struct
method Generate (line 88) | func (g generator) Generate(operatorName, version, outputDir string, o...
method generate (line 113) | func (g generator) generate(operatorName, version string, opts Options...
function NewGenerator (line 41) | func NewGenerator() Generator {
type Generator (line 49) | type Generator interface
type PackageManifest (line 54) | type PackageManifest struct
method GetBase (line 208) | func (b PackageManifest) GetBase() (base *apimanifests.PackageManifest...
method makeNewBase (line 221) | func (b PackageManifest) makeNewBase() *apimanifests.PackageManifest {
type Options (line 73) | type Options struct
function makePkgManFileName (line 149) | func makePkgManFileName(operatorName string) string {
function sortChannelsByName (line 154) | func sortChannelsByName(pkg *apimanifests.PackageManifest) {
function validatePackageManifest (line 162) | func validatePackageManifest(pkg *apimanifests.PackageManifest) error {
function setChannels (line 189) | func setChannels(pkg *apimanifests.PackageManifest, channelName, csvName...
function readPackageManifestBase (line 229) | func readPackageManifestBase(path string) (*apimanifests.PackageManifest...
FILE: internal/generate/packagemanifest/packagemanifest_suite_test.go
function TestGenerate (line 24) | func TestGenerate(t *testing.T) {
FILE: internal/generate/packagemanifest/packagemanifestfakes/fake_generator.go
type FakeGenerator (line 10) | type FakeGenerator struct
method Generate (line 29) | func (fake *FakeGenerator) Generate(arg1 string, arg2 string, arg3 str...
method GenerateCallCount (line 51) | func (fake *FakeGenerator) GenerateCallCount() int {
method GenerateCalls (line 57) | func (fake *FakeGenerator) GenerateCalls(stub func(string, string, str...
method GenerateArgsForCall (line 63) | func (fake *FakeGenerator) GenerateArgsForCall(i int) (string, string,...
method GenerateReturns (line 70) | func (fake *FakeGenerator) GenerateReturns(result1 error) {
method GenerateReturnsOnCall (line 79) | func (fake *FakeGenerator) GenerateReturnsOnCall(i int, result1 error) {
method Invocations (line 93) | func (fake *FakeGenerator) Invocations() map[string][][]interface{} {
method recordInvocation (line 103) | func (fake *FakeGenerator) recordInvocation(key string, args []interfa...
FILE: internal/generate/testdata/go/api/shared/memcached_types.go
type UsefulType (line 22) | type UsefulType struct
FILE: internal/generate/testdata/go/api/v1alpha1/memcached_types.go
type MemcachedSpec (line 24) | type MemcachedSpec struct
type Provider (line 38) | type Provider struct
type FooProvider (line 45) | type FooProvider struct
type SecretRef (line 53) | type SecretRef struct
type MemcachedStatus (line 68) | type MemcachedStatus struct
type Memcached (line 81) | type Memcached struct
type MemcachedList (line 92) | type MemcachedList struct
FILE: internal/generate/testdata/go/api/v1alpha2/dummy_types.go
type NoKindSpec (line 27) | type NoKindSpec struct
type NoKindStatus (line 38) | type NoKindStatus struct
type DummySpec (line 47) | type DummySpec struct
type DummyStatus (line 62) | type DummyStatus struct
type OtherDummyStatus (line 73) | type OtherDummyStatus struct
type Dummy (line 87) | type Dummy struct
type OtherDummy (line 100) | type OtherDummy struct
type DummyList (line 111) | type DummyList struct
FILE: internal/generate/testdata/go/api/v1alpha2/memcached_types.go
type MemcachedSpec (line 23) | type MemcachedSpec struct
type MemcachedStatus (line 30) | type MemcachedStatus struct
type Memcached (line 43) | type Memcached struct
type MemcachedList (line 54) | type MemcachedList struct
FILE: internal/generate/testdata/go/api/v1alpha2/memcachedrs_types.go
type MemcachedRSSpec (line 22) | type MemcachedRSSpec struct
type MemcachedRSStatus (line 28) | type MemcachedRSStatus struct
type MemcachedRS (line 40) | type MemcachedRS struct
type MemcachedRSList (line 51) | type MemcachedRSList struct
FILE: internal/generate/testdata/go/api/v1alpha2/motorcycle_types.go
type Hog (line 19) | type Hog struct
type notExported (line 43) | type notExported struct
type Engine (line 54) | type Engine struct
type Wheel (line 61) | type Wheel struct
type InlinedComponent (line 69) | type InlinedComponent struct
type IgnoredComponent (line 77) | type IgnoredComponent struct
FILE: internal/helm/client/actionconfig.go
type ActionConfigGetter (line 39) | type ActionConfigGetter interface
function NewActionConfigGetter (line 43) | func NewActionConfigGetter(cfg *rest.Config, rm meta.RESTMapper, log log...
type actionConfigGetter (line 72) | type actionConfigGetter struct
method getWatchedSecretsForNamespace (line 82) | func (acg *actionConfigGetter) getWatchedSecretsForNamespace(namespace...
method ActionConfigFor (line 92) | func (acg *actionConfigGetter) ActionConfigFor(obj client.Object) (*ac...
type ownerRefSecretClient (line 124) | type ownerRefSecretClient struct
method Create (line 129) | func (c *ownerRefSecretClient) Create(ctx context.Context, in *corev1....
method Update (line 134) | func (c *ownerRefSecretClient) Update(ctx context.Context, in *corev1....
FILE: internal/helm/client/client.go
function NewOwnerRefInjectingClient (line 35) | func NewOwnerRefInjectingClient(base kube.Interface, restMapper meta.RES...
type ownerRefInjectingClient (line 53) | type ownerRefInjectingClient struct
method Build (line 59) | func (c *ownerRefInjectingClient) Build(reader io.Reader, validate boo...
function containsResourcePolicyKeep (line 97) | func containsResourcePolicyKeep(annotations map[string]string) bool {
type labelInjectingClient (line 109) | type labelInjectingClient struct
method Build (line 121) | func (c *labelInjectingClient) Build(reader io.Reader, validate bool) ...
function NewLabelInjectingClient (line 114) | func NewLabelInjectingClient(base kube.Interface, labels map[string]stri...
FILE: internal/helm/client/client_test.go
function TestContainsResourcePolicyKeep (line 25) | func TestContainsResourcePolicyKeep(t *testing.T) {
FILE: internal/helm/client/restclientgetter.go
function newRESTClientGetter (line 31) | func newRESTClientGetter(cfg *rest.Config, rm meta.RESTMapper, ns string...
type restClientGetter (line 41) | type restClientGetter struct
method ToRESTConfig (line 49) | func (c *restClientGetter) ToRESTConfig() (*rest.Config, error) {
method ToDiscoveryClient (line 53) | func (c *restClientGetter) ToDiscoveryClient() (discovery.CachedDiscov...
method ToRESTMapper (line 71) | func (c *restClientGetter) ToRESTMapper() (meta.RESTMapper, error) {
method ForNamespace (line 75) | func (c *restClientGetter) ForNamespace(ns string) genericclioptions.R...
type namespacedRCG (line 84) | type namespacedRCG struct
method ToRawKubeConfigLoader (line 89) | func (c *namespacedRCG) ToRawKubeConfigLoader() clientcmd.ClientConfig {
type namespaceClientConfig (line 95) | type namespaceClientConfig struct
method RawConfig (line 99) | func (c namespaceClientConfig) RawConfig() (clientcmdapi.Config, error) {
method ClientConfig (line 103) | func (c namespaceClientConfig) ClientConfig() (*rest.Config, error) {
method Namespace (line 107) | func (c namespaceClientConfig) Namespace() (string, bool, error) {
method ConfigAccess (line 111) | func (c namespaceClientConfig) ConfigAccess() clientcmd.ConfigAccess {
FILE: internal/helm/client/secrets_watch.go
constant helmSecretsLabelKey (line 41) | helmSecretsLabelKey = "owner"
constant helmSecretsLabelValue (line 42) | helmSecretsLabelValue = "helm"
type WatchedSecrets (line 47) | type WatchedSecrets struct
method Create (line 53) | func (w *WatchedSecrets) Create(ctx context.Context, secret *corev1.Se...
method Update (line 57) | func (w *WatchedSecrets) Update(ctx context.Context, secret *corev1.Se...
method Delete (line 61) | func (w *WatchedSecrets) Delete(ctx context.Context, name string, opts...
method DeleteCollection (line 65) | func (w *WatchedSecrets) DeleteCollection(ctx context.Context, opts me...
method Get (line 69) | func (w *WatchedSecrets) Get(ctx context.Context, name string, opts me...
method List (line 73) | func (w *WatchedSecrets) List(ctx context.Context, opts metav1.ListOpt...
method Watch (line 116) | func (w *WatchedSecrets) Watch(ctx context.Context, opts metav1.ListOp...
method Patch (line 120) | func (w *WatchedSecrets) Patch(ctx context.Context, name string, pt ty...
method Apply (line 124) | func (w *WatchedSecrets) Apply(ctx context.Context, secret *applyconfv...
method Run (line 163) | func (w *WatchedSecrets) Run() {
function hasListOptionsOtherThanLabelSelector (line 107) | func hasListOptionsOtherThanLabelSelector(opts metav1.ListOptions) bool {
function NewWatchedSecrets (line 130) | func NewWatchedSecrets(clientSet kubernetes.Interface, namespace string)...
FILE: internal/helm/controller/controller.go
type WatchOptions (line 47) | type WatchOptions struct
function Add (line 60) | func Add(mgr manager.Manager, options WatchOptions) error {
function watchDependentResources (line 100) | func watchDependentResources(mgr manager.Manager, r *HelmOperatorReconci...
FILE: internal/helm/controller/reconcile.go
type ReleaseHookFunc (line 47) | type ReleaseHookFunc
type HelmOperatorReconciler (line 50) | type HelmOperatorReconciler struct
method Reconcile (line 79) | func (r HelmOperatorReconciler) Reconcile(ctx context.Context, request...
method updateResource (line 480) | func (r HelmOperatorReconciler) updateResource(ctx context.Context, o ...
method updateResourceStatus (line 486) | func (r HelmOperatorReconciler) updateResourceStatus(ctx context.Conte...
method waitForDeletion (line 493) | func (r HelmOperatorReconciler) waitForDeletion(ctx context.Context, o...
constant uninstallFinalizer (line 64) | uninstallFinalizer = "helm.sdk.operatorframework.io/uninstall-release"
constant uninstallFinalizerLegacy (line 66) | uninstallFinalizerLegacy = "uninstall-helm-release"
constant helmUpgradeForceAnnotation (line 68) | helmUpgradeForceAnnotation = "helm.sdk.operatorframework.io/upgrade-f...
constant helmRollbackForceAnnotation (line 69) | helmRollbackForceAnnotation = "helm.sdk.operatorframework.io/rollback-...
constant helmUninstallWaitAnnotation (line 70) | helmUninstallWaitAnnotation = "helm.sdk.operatorframework.io/uninstall...
constant helmReconcilePeriodAnnotation (line 71) | helmReconcilePeriodAnnotation = "helm.sdk.operatorframework.io/reconcile...
function determineReconcilePeriod (line 434) | func determineReconcilePeriod(currentPeriod time.Duration, o *unstructur...
function hasAnnotation (line 450) | func hasAnnotation(anno string, o *unstructured.Unstructured) bool {
function readBoolAnnotationWithDefault (line 465) | func readBoolAnnotationWithDefault(obj *unstructured.Unstructured, annot...
FILE: internal/helm/controller/reconcile_test.go
function TestDetermineReconcilePeriod (line 25) | func TestDetermineReconcilePeriod(t *testing.T) {
function TestHasAnnotation (line 74) | func TestHasAnnotation(t *testing.T) {
function annotations (line 184) | func annotations(m map[string]any) *unstructured.Unstructured {
function Test_readBoolAnnotationWithDefault (line 194) | func Test_readBoolAnnotationWithDefault(t *testing.T) {
FILE: internal/helm/flags/flag.go
type Flags (line 30) | type Flags struct
method AddTo (line 49) | func (f *Flags) AddTo(flagSet *pflag.FlagSet) {
method ToManagerOptions (line 148) | func (f *Flags) ToManagerOptions(options manager.Options) manager.Opti...
FILE: internal/helm/flags/flag_test.go
function parseArgs (line 70) | func parseArgs(fs *pflag.FlagSet, extraArgs ...string) {
FILE: internal/helm/flags/suite_test.go
function TestFlags (line 24) | func TestFlags(t *testing.T) {
FILE: internal/helm/internal/diff/diff.go
function Generate (line 26) | func Generate(a, b string) string {
function prefixLines (line 52) | func prefixLines(s, prefix string) string {
FILE: internal/helm/internal/types/types.go
type HelmAppList (line 25) | type HelmAppList struct
type HelmApp (line 31) | type HelmApp struct
type HelmAppSpec (line 38) | type HelmAppSpec
type HelmAppConditionType (line 40) | type HelmAppConditionType
type ConditionStatus (line 41) | type ConditionStatus
type HelmAppConditionReason (line 42) | type HelmAppConditionReason
type HelmAppCondition (line 44) | type HelmAppCondition struct
type HelmAppRelease (line 53) | type HelmAppRelease struct
constant ConditionInitialized (line 59) | ConditionInitialized HelmAppConditionType = "Initialized"
constant ConditionDeployed (line 60) | ConditionDeployed HelmAppConditionType = "Deployed"
constant ConditionReleaseFailed (line 61) | ConditionReleaseFailed HelmAppConditionType = "ReleaseFailed"
constant ConditionIrreconcilable (line 62) | ConditionIrreconcilable HelmAppConditionType = "Irreconcilable"
constant StatusTrue (line 64) | StatusTrue ConditionStatus = "True"
constant StatusFalse (line 65) | StatusFalse ConditionStatus = "False"
constant StatusUnknown (line 66) | StatusUnknown ConditionStatus = "Unknown"
constant ReasonInstallSuccessful (line 68) | ReasonInstallSuccessful HelmAppConditionReason = "InstallSuccessful"
constant ReasonUpgradeSuccessful (line 69) | ReasonUpgradeSuccessful HelmAppConditionReason = "UpgradeSuccessful"
constant ReasonUninstallSuccessful (line 70) | ReasonUninstallSuccessful HelmAppConditionReason = "UninstallSuccessful"
constant ReasonInstallError (line 71) | ReasonInstallError HelmAppConditionReason = "InstallError"
constant ReasonUpgradeError (line 72) | ReasonUpgradeError HelmAppConditionReason = "UpgradeError"
constant ReasonReconcileError (line 73) | ReasonReconcileError HelmAppConditionReason = "ReconcileError"
constant ReasonUninstallError (line 74) | ReasonUninstallError HelmAppConditionReason = "UninstallError"
type HelmAppStatus (line 77) | type HelmAppStatus struct
method ToMap (line 82) | func (s *HelmAppStatus) ToMap() (map[string]any, error) {
method SetCondition (line 97) | func (s *HelmAppStatus) SetCondition(condition HelmAppCondition) *Helm...
method RemoveCondition (line 122) | func (s *HelmAppStatus) RemoveCondition(conditionType HelmAppCondition...
function StatusFor (line 133) | func StatusFor(cr *unstructured.Unstructured) *HelmAppStatus {
FILE: internal/helm/internal/types/types_test.go
constant testNamespaceName (line 26) | testNamespaceName = "helm-test"
function TestSetCondition (line 31) | func TestSetCondition(t *testing.T) {
function TestRemoveCondition (line 51) | func TestRemoveCondition(t *testing.T) {
function TestStatusForEmpty (line 62) | func TestStatusForEmpty(t *testing.T) {
function TestStatusForFilled (line 68) | func TestStatusForFilled(t *testing.T) {
function TestStatusForFilledRaw (line 76) | func TestStatusForFilledRaw(t *testing.T) {
function newTestResource (line 89) | func newTestResource() *unstructured.Unstructured {
function newTestStatus (line 107) | func newTestStatus() *HelmAppStatus {
function newTestStatusRaw (line 122) | func newTestStatusRaw() map[string]any {
FILE: internal/helm/manifestutil/resource_policy.go
function FilterManifestsToKeep (line 24) | func FilterManifestsToKeep(manifests []releaseutil.Manifest) (keep, rema...
FILE: internal/helm/metrics/metrics.go
constant subsystem (line 24) | subsystem = "helm_operator"
function RegisterBuildInfo (line 41) | func RegisterBuildInfo(r prometheus.Registerer) {
FILE: internal/helm/release/manager.go
type Manager (line 50) | type Manager interface
type manager (line 63) | type manager struct
method ReleaseName (line 88) | func (m manager) ReleaseName() string {
method IsInstalled (line 92) | func (m manager) IsInstalled() bool {
method IsUpgradeRequired (line 96) | func (m manager) IsUpgradeRequired() bool {
method Sync (line 102) | func (m *manager) Sync() error {
method getDeployedRelease (line 148) | func (m manager) getDeployedRelease() (*rpb.Release, error) {
method getCandidateRelease (line 159) | func (m manager) getCandidateRelease(namespace, name string, chart *cp...
method InstallRelease (line 169) | func (m manager) InstallRelease(opts ...InstallOption) (*rpb.Release, ...
method UpgradeRelease (line 213) | func (m manager) UpgradeRelease(opts ...UpgradeOption) (*rpb.Release, ...
method RollBack (line 249) | func (m manager) RollBack(opts ...RollBackOption) error {
method ReconcileRelease (line 267) | func (m manager) ReconcileRelease(ctx context.Context) (*rpb.Release, ...
method UninstallRelease (line 393) | func (m manager) UninstallRelease(opts ...UninstallOption) (*rpb.Relea...
method CleanupRelease (line 409) | func (m manager) CleanupRelease(manifest string) (bool, error) {
type InstallOption (line 82) | type InstallOption
type UpgradeOption (line 83) | type UpgradeOption
type UninstallOption (line 84) | type UninstallOption
type RollBackOption (line 85) | type RollBackOption
function notFoundErr (line 144) | func notFoundErr(err error) bool {
function ForceUpgrade (line 203) | func ForceUpgrade(force bool) UpgradeOption {
function ForceRollback (line 241) | func ForceRollback(force bool) RollBackOption {
function reconcileRelease (line 272) | func reconcileRelease(_ context.Context, kubeClient kube.Interface, expe...
function createPatch (line 317) | func createPatch(existing runtime.Object, expected *resource.Info) ([]by...
function createJSONMergePatch (line 364) | func createJSONMergePatch(existingJSON, expectedJSON []byte) ([]byte, er...
FILE: internal/helm/release/manager_factory.go
type ManagerFactory (line 35) | type ManagerFactory interface
type managerFactory (line 39) | type managerFactory struct
method NewManager (line 50) | func (f managerFactory) NewManager(cr *unstructured.Unstructured, over...
function NewManagerFactory (line 46) | func NewManagerFactory(mgr crmanager.Manager, acg client.ActionConfigGet...
function getReleaseName (line 113) | func getReleaseName(storageBackend *storage.Storage, crChartName string,
function releaseHistory (line 140) | func releaseHistory(storageBackend *storage.Storage, releaseName string)...
function parseOverrides (line 151) | func parseOverrides(in map[string]string) (map[string]any, error) {
function mergeMaps (line 162) | func mergeMaps(a, b map[string]any) map[string]any {
FILE: internal/helm/release/manager_test.go
function newTestUnstructured (line 32) | func newTestUnstructured(containers []any) *unstructured.Unstructured {
function newTestDeployment (line 52) | func newTestDeployment(containers []v1.Container) *appsv1.Deployment {
function TestManagerGenerateStrategicMergePatch (line 66) | func TestManagerGenerateStrategicMergePatch(t *testing.T) {
FILE: internal/helm/watches/watches.go
constant WatchesFile (line 32) | WatchesFile = "watches.yaml"
type Watch (line 36) | type Watch struct
method UnmarshalYAML (line 53) | func (w *Watch) UnmarshalYAML(unmarshal func(any) error) error {
function Load (line 69) | func Load(path string) ([]Watch, error) {
function LoadReader (line 87) | func LoadReader(reader io.Reader) ([]Watch, error) {
function expandOverrideValues (line 128) | func expandOverrideValues(in map[string]string) (map[string]string, erro...
function verifyGVK (line 149) | func verifyGVK(gvk schema.GroupVersionKind) error {
FILE: internal/helm/watches/watches_test.go
function TestLoadReader (line 26) | func TestLoadReader(t *testing.T) {
function TestLoad (line 259) | func TestLoad(t *testing.T) {
function removeFile (line 325) | func removeFile(t *testing.T, f *os.File) {
FILE: internal/markers/markers.go
constant Prefix (line 18) | Prefix = "operator-sdk"
FILE: internal/olm/client/client.go
type resourceError (line 53) | type resourceError struct
type podError (line 57) | type podError struct
type deploymentError (line 60) | type deploymentError struct
type deploymentErrors (line 64) | type deploymentErrors
method Error (line 67) | func (e deploymentErrors) Error() string {
type podErrors (line 65) | type podErrors
method Error (line 75) | func (e podErrors) Error() string {
function init (line 83) | func init() {
type Client (line 89) | type Client struct
method DoCreate (line 121) | func (c Client) DoCreate(ctx context.Context, objs ...client.Object) e...
method safeCreateOneResource (line 138) | func (c Client) safeCreateOneResource(ctx context.Context, obj client....
method DoDelete (line 161) | func (c Client) DoDelete(ctx context.Context, objs ...client.Object) e...
method DoRolloutWait (line 195) | func (c Client) DoRolloutWait(ctx context.Context, key types.Namespace...
method DoCSVWait (line 253) | func (c Client) DoCSVWait(ctx context.Context, key types.NamespacedNam...
method checkDeploymentErrors (line 300) | func (c Client) checkDeploymentErrors(ctx context.Context, key types.N...
method checkPodErrors (line 344) | func (c Client) checkPodErrors(ctx context.Context, depSelectors *meta...
method GetInstalledVersion (line 378) | func (c Client) GetInstalledVersion(ctx context.Context, namespace str...
function NewClientForConfig (line 93) | func NewClientForConfig(cfg *rest.Config, httpClient *http.Client) (*Cli...
function getName (line 188) | func getName(namespace, name string) string {
constant pkgServerCSVOldNamePrefix (line 410) | pkgServerCSVOldNamePrefix = "packageserver."
constant pkgServerCSVNewName (line 412) | pkgServerCSVNewName = "packageserver"
constant pkgServerOLMVersionLabel (line 413) | pkgServerOLMVersionLabel = "olm.version"
function getOLMVersionFromPackageServerCSV (line 416) | func getOLMVersionFromPackageServerCSV(csv *olmapiv1alpha1.ClusterServic...
FILE: internal/olm/client/client_suite_test.go
function TestClient (line 24) | func TestClient(t *testing.T) {
FILE: internal/olm/client/client_test.go
type errClient (line 352) | type errClient struct
method reset (line 357) | func (c *errClient) reset() {
method Get (line 361) | func (c *errClient) Get(ctx context.Context, key client.ObjectKey, obj...
method List (line 365) | func (c *errClient) List(ctx context.Context, list client.ObjectList, ...
method Create (line 368) | func (c *errClient) Create(ctx context.Context, obj client.Object, opt...
method Delete (line 388) | func (c *errClient) Delete(ctx context.Context, obj client.Object, opt...
method Update (line 392) | func (c *errClient) Update(ctx context.Context, obj client.Object, opt...
method Patch (line 396) | func (c *errClient) Patch(ctx context.Context, obj client.Object, patc...
method DeleteAllOf (line 400) | func (c *errClient) DeleteAllOf(ctx context.Context, obj client.Object...
method SubResource (line 404) | func (c *errClient) SubResource(subResource string) client.SubResource...
method Scheme (line 408) | func (c *errClient) Scheme() *runtime.Scheme {
method RESTMapper (line 412) | func (c *errClient) RESTMapper() meta.RESTMapper {
method Status (line 416) | func (c *errClient) Status() client.SubResourceWriter {
method GroupVersionKindFor (line 420) | func (c *errClient) GroupVersionKindFor(obj runtime.Object) (schema.Gr...
method IsObjectNamespaced (line 424) | func (c *errClient) IsObjectNamespaced(obj runtime.Object) (bool, erro...
FILE: internal/olm/client/status.go
type Status (line 40) | type Status struct
method HasInstalledResources (line 86) | func (s Status) HasInstalledResources() (bool, error) {
method getCRDKindSet (line 117) | func (s Status) getCRDKindSet() (set.Set[string], error) {
method String (line 146) | func (s Status) String() string {
type ResourceStatus (line 44) | type ResourceStatus struct
method GetObjectsStatus (line 53) | func (c Client) GetObjectsStatus(ctx context.Context, objs ...client.Obj...
FILE: internal/olm/fbcutil/util.go
constant SchemaChannel (line 36) | SchemaChannel = "olm.channel"
constant SchemaPackage (line 37) | SchemaPackage = "olm.package"
constant DefaultChannel (line 38) | DefaultChannel = "operator-sdk-run-bundle"
constant DefaultCacheDir (line 39) | DefaultCacheDir = "operator-sdk-run-bundle-cache"
constant DefaultIndexImageBase (line 45) | DefaultIndexImageBase = "quay.io/operator-framework/opm:"
constant DefaultIndexImage (line 48) | DefaultIndexImage = DefaultIndexImageBase + "latest"
constant DefaultInitImage (line 50) | DefaultInitImage = "registry.access.redhat.com/ubi9/ubi:9.7"
type BundleDeclcfg (line 56) | type BundleDeclcfg struct
type FBCContext (line 65) | type FBCContext struct
method CreateFBC (line 75) | func (f *FBCContext) CreateFBC(ctx context.Context) (BundleDeclcfg, er...
function ValidateAndStringify (line 110) | func ValidateAndStringify(declcfg *declarativeconfig.DeclarativeConfig) ...
function NullLogger (line 130) | func NullLogger() *log.Entry {
function RenderRefs (line 138) | func RenderRefs(ctx context.Context, refs []string, skipTLSVerify bool, ...
function dirNameFromRefs (line 175) | func dirNameFromRefs(refs []string) string {
function IsFBC (line 185) | func IsFBC(ctx context.Context, indexImage string) (bool, error) {
FILE: internal/olm/fbcutil/util_test.go
function TestRegistry (line 49) | func TestRegistry(t *testing.T) {
FILE: internal/olm/installer/client.go
constant olmOperatorName (line 47) | olmOperatorName = "olm-operator"
constant catalogOperatorName (line 48) | catalogOperatorName = "catalog-operator"
constant packageServerName (line 49) | packageServerName = "packageserver"
constant bindataManifestPath (line 50) | bindataManifestPath = "olm-manifests"
type Client (line 53) | type Client struct
method InstallVersion (line 77) | func (c Client) InstallVersion(ctx context.Context, namespace, version...
method UninstallVersion (line 176) | func (c Client) UninstallVersion(ctx context.Context, version string) ...
method GetStatus (line 193) | func (c Client) GetStatus(ctx context.Context, version string) (*olmre...
method getResources (line 210) | func (c Client) getResources(ctx context.Context, version string) ([]u...
method getCRDs (line 249) | func (c Client) getCRDs(ctx context.Context, version string) ([]unstru...
method getOLM (line 258) | func (c Client) getOLM(ctx context.Context, version string) ([]unstruc...
method crdsURL (line 295) | func (c Client) crdsURL(version string) string {
method olmURL (line 299) | func (c Client) olmURL(version string) string {
method getBaseDownloadURL (line 303) | func (c Client) getBaseDownloadURL(version string) string {
method doRequest (line 310) | func (c Client) doRequest(ctx context.Context, url string) (*http.Resp...
method getSubscriptionCSV (line 370) | func (c Client) getSubscriptionCSV(ctx context.Context, subKey types.N...
function ClientForConfig (line 59) | func ClientForConfig(cfg *rest.Config) (*Client, error) {
function getPackagedManifests (line 267) | func getPackagedManifests(manifestPath string) ([]unstructured.Unstructu...
function formatVersion (line 283) | func formatVersion(version string) string {
function toObjects (line 336) | func toObjects(us ...unstructured.Unstructured) (objs []client.Object) {
function decodeResources (line 343) | func decodeResources(rds ...io.Reader) (objs []unstructured.Unstructured...
function filterResources (line 360) | func filterResources(resources []unstructured.Unstructured, filter func(...
FILE: internal/olm/installer/installer_suite_test.go
function TestRegistry (line 24) | func TestRegistry(t *testing.T) {
FILE: internal/olm/installer/manager.go
constant DefaultVersion (line 31) | DefaultVersion = "0.28.0"
constant DefaultTimeout (line 32) | DefaultTimeout = time.Minute * 2
constant DefaultOLMNamespace (line 34) | DefaultOLMNamespace = "olm"
type Manager (line 37) | type Manager struct
method initialize (line 45) | func (m *Manager) initialize() (err error) {
method Install (line 71) | func (m *Manager) Install() error {
method Uninstall (line 90) | func (m *Manager) Uninstall() error {
method Status (line 118) | func (m *Manager) Status() error {
method AddToFlagSet (line 149) | func (m *Manager) AddToFlagSet(fs *pflag.FlagSet) {
FILE: internal/olm/operator/bundle/install.go
type Install (line 33) | type Install struct
method BindFlags (line 52) | func (i *Install) BindFlags(fs *pflag.FlagSet) {
method Run (line 66) | func (i Install) Run(ctx context.Context) (*v1alpha1.ClusterServiceVer...
method setup (line 73) | func (i *Install) setup(ctx context.Context) error {
function NewInstall (line 42) | func NewInstall(cfg *operator.Configuration) Install {
function generateFBCContent (line 153) | func generateFBCContent(ctx context.Context, f *fbcutil.FBCContext, bund...
function generateFBC (line 189) | func generateFBC(ctx context.Context, indexImage string, bundleDeclConfi...
FILE: internal/olm/operator/bundleupgrade/upgrade.go
type Upgrade (line 28) | type Upgrade struct
method BindFlags (line 47) | func (u *Upgrade) BindFlags(fs *pflag.FlagSet) {
method Run (line 55) | func (u Upgrade) Run(ctx context.Context) (*v1alpha1.ClusterServiceVer...
method setup (line 62) | func (u *Upgrade) setup(ctx context.Context) error {
function NewUpgrade (line 37) | func NewUpgrade(cfg *operator.Configuration) Upgrade {
FILE: internal/olm/operator/config.go
type Configuration (line 32) | type Configuration struct
method BindFlags (line 44) | func (c *Configuration) BindFlags(fs *pflag.FlagSet) {
method Load (line 67) | func (c *Configuration) Load() error {
type operatorClient (line 115) | type operatorClient struct
method Create (line 119) | func (c *operatorClient) Create(ctx context.Context, obj client.Object...
FILE: internal/olm/operator/helpers.go
constant SDKOperatorGroupName (line 29) | SDKOperatorGroupName = "operator-sdk-og"
function CatalogNameForPackage (line 32) | func CatalogNameForPackage(pkg string) string {
function LoadBundle (line 37) | func LoadBundle(ctx context.Context, bundleImage string, skipTLSVerify b...
FILE: internal/olm/operator/install_mode.go
type InstallMode (line 28) | type InstallMode struct
method Set (line 37) | func (i *InstallMode) Set(str string) error {
method IsEmpty (line 53) | func (i InstallMode) IsEmpty() bool {
method String (line 57) | func (i InstallMode) String() string {
method Type (line 66) | func (InstallMode) Type() string {
method Validate (line 70) | func (i InstallMode) Validate() error {
method CheckCompatibility (line 101) | func (i InstallMode) CheckCompatibility(csv *v1alpha1.ClusterServiceVe...
function GetSupportedInstallModes (line 134) | func GetSupportedInstallModes(csvInstallModes []v1alpha1.InstallMode) se...
FILE: internal/olm/operator/operator_suite_test.go
function TestOperator (line 24) | func TestOperator(t *testing.T) {
FILE: internal/olm/operator/packagemanifests/install.go
type Install (line 30) | type Install struct
method BindFlags (line 50) | func (i *Install) BindFlags(fs *pflag.FlagSet) {
method Run (line 55) | func (i Install) Run(ctx context.Context) (*v1alpha1.ClusterServiceVer...
method setup (line 62) | func (i *Install) setup() error {
function NewInstall (line 40) | func NewInstall(cfg *operator.Configuration) Install {
function loadPackageManifests (line 96) | func loadPackageManifests(rootDir string) (*apimanifests.PackageManifest...
function getPackageForVersion (line 111) | func getPackageForVersion(bundles []*apimanifests.Bundle, version string...
function getChannelForCSVName (line 123) | func getChannelForCSVName(pkg *apimanifests.PackageManifest, csvName str...
FILE: internal/olm/operator/registry/catalog.go
type CatalogCreator (line 23) | type CatalogCreator interface
type CatalogUpdater (line 27) | type CatalogUpdater interface
FILE: internal/olm/operator/registry/configmap.go
type ConfigMapCatalogCreator (line 33) | type ConfigMapCatalogCreator struct
method CreateCatalog (line 46) | func (c ConfigMapCatalogCreator) CreateCatalog(ctx context.Context, na...
method registryUp (line 64) | func (c ConfigMapCatalogCreator) registryUp(ctx context.Context, cs *v...
method updateCatalogSource (line 101) | func (c *ConfigMapCatalogCreator) updateCatalogSource(ctx context.Cont...
function NewConfigMapCatalogCreator (line 40) | func NewConfigMapCatalogCreator(cfg *operator.Configuration) *ConfigMapC...
FILE: internal/olm/operator/registry/configmap/configmap.go
method getRegistryConfigMaps (line 35) | func (rr *RegistryResources) getRegistryConfigMaps(ctx context.Context, ...
function makeConfigMapsForPackageManifests (line 51) | func makeConfigMapsForPackageManifests(pkg *apimanifests.PackageManifest,
function makeObjectBinaryData (line 82) | func makeObjectBinaryData(obj any, names ...string) (map[string][]byte, ...
function makeBundleBinaryData (line 90) | func makeBundleBinaryData(bundle *apimanifests.Bundle) (map[string][]byt...
function addObjectToBinaryData (line 103) | func addObjectToBinaryData(binaryData map[string][]byte, obj any, names ...
function makeObjectFileName (line 114) | func makeObjectFileName(b []byte, names ...string) string {
function hashContents (line 125) | func hashContents(b []byte) string {
function getRegistryConfigMapName (line 132) | func getRegistryConfigMapName(pkgName string) string {
function withBinaryData (line 139) | func withBinaryData(kvs map[string][]byte) func(*corev1.ConfigMap) {
function newConfigMap (line 152) | func newConfigMap(name, namespace string, opts ...func(*corev1.ConfigMap...
FILE: internal/olm/operator/registry/configmap/configmap_suite_test.go
function TestConfigmap (line 24) | func TestConfigmap(t *testing.T) {
FILE: internal/olm/operator/registry/configmap/deployment.go
constant registryBaseImage (line 31) | registryBaseImage = "quay.io/operator-framework/upstream-registry-builde...
constant registryGRPCPort (line 33) | registryGRPCPort = 50051
constant registryDBName (line 36) | registryDBName = "/tmp/bundle.db"
constant registryLogFile (line 39) | registryLogFile = "/tmp/termination.log"
function getRegistryServerName (line 42) | func getRegistryServerName(pkgName string) string {
function getRegistryDeploymentLabels (line 49) | func getRegistryDeploymentLabels(pkgName string) map[string]string {
function applyToDeploymentPodSpec (line 56) | func applyToDeploymentPodSpec(dep *appsv1.Deployment, f func(*corev1.Pod...
function withConfigMapVolume (line 63) | func withConfigMapVolume(volName, cmName string) func(*appsv1.Deployment) {
function withContainerVolumeMounts (line 85) | func withContainerVolumeMounts(volName string, paths ...string) func(*ap...
function getDBContainerCmd (line 106) | func getDBContainerCmd(dbPath, logPath string) string {
function withRegistryGRPCContainer (line 115) | func withRegistryGRPCContainer(pkgName string) func(*appsv1.Deployment) {
function newRegistryDeployment (line 141) | func newRegistryDeployment(pkgName, namespace string, opts ...func(*apps...
FILE: internal/olm/operator/registry/configmap/registry.go
constant containerManifestsDir (line 38) | containerManifestsDir = "/registry/manifests"
type RegistryResources (line 48) | type RegistryResources struct
method IsRegistryExist (line 55) | func (rr *RegistryResources) IsRegistryExist(ctx context.Context, name...
method IsRegistryDataStale (line 72) | func (rr *RegistryResources) IsRegistryDataStale(ctx context.Context, ...
method CreatePackageManifestsRegistry (line 115) | func (rr *RegistryResources) CreatePackageManifestsRegistry(ctx contex...
method DeletePackageManifestsRegistry (line 187) | func (rr *RegistryResources) DeletePackageManifestsRegistry(ctx contex...
function GetRegistryServiceAddr (line 213) | func GetRegistryServiceAddr(pkgName, namespace string) string {
function makeRegistryLabels (line 219) | func makeRegistryLabels(pkgName string) map[string]string {
FILE: internal/olm/operator/registry/configmap/service.go
function withTCPPort (line 25) | func withTCPPort(name string, portNum int32) func(*corev1.Service) {
function newRegistryService (line 39) | func newRegistryService(pkgName, namespace string, opts ...func(*corev1....
FILE: internal/olm/operator/registry/fbcindex/configMapWriter.go
constant yamlSeparator (line 27) | yamlSeparator = "\n---\n"
constant gzipSuffixLength (line 28) | gzipSuffixLength = 13
constant maxGZIPLength (line 29) | maxGZIPLength = maxConfigMapSize - gzipSuffixLength
constant ConfigMapEncodingAnnotationKey (line 31) | ConfigMapEncodingAnnotationKey = "olm.contentEncoding"
constant ConfigMapEncodingAnnotationGzip (line 32) | ConfigMapEncodingAnnotationGzip = "gzip+base64"
type configMapWriter (line 43) | type configMapWriter interface
type gzipCMWriter (line 55) | type gzipCMWriter struct
method reset (line 78) | func (cmw *gzipCMWriter) reset() {
method newConfigMap (line 85) | func (cmw *gzipCMWriter) newConfigMap(name string) *corev1.ConfigMap {
method getFilePath (line 102) | func (cmw *gzipCMWriter) getFilePath() string {
method isEmpty (line 106) | func (cmw *gzipCMWriter) isEmpty() bool {
method exceedMaxLength (line 110) | func (cmw *gzipCMWriter) exceedMaxLength(cmSize int, data string) (boo...
method closeCM (line 124) | func (cmw *gzipCMWriter) closeCM(cm *corev1.ConfigMap) error {
method addData (line 143) | func (cmw *gzipCMWriter) addData(data string) error {
method continueAddData (line 157) | func (cmw *gzipCMWriter) continueAddData(data string) error {
method writeLastFragment (line 165) | func (cmw *gzipCMWriter) writeLastFragment(cm *corev1.ConfigMap) error {
function newGZIPWriter (line 64) | func newGZIPWriter(name, namespace string) *gzipCMWriter {
FILE: internal/olm/operator/registry/fbcindex/fbc_registry_pod.go
constant defaultGRPCPort (line 47) | defaultGRPCPort = 50051
constant defaultContainerName (line 49) | defaultContainerName = "registry-grpc"
constant defaultInitContainerName (line 50) | defaultInitContainerName = "registry-grpc-init"
constant defaultContainerPortName (line 51) | defaultContainerPortName = "grpc"
constant defaultConfigMapKey (line 53) | defaultConfigMapKey = "extraFBC"
constant maxConfigMapSize (line 55) | maxConfigMapSize = 1 * 1024 * 1024
type FBCRegistryPod (line 59) | type FBCRegistryPod struct
method init (line 98) | func (f *FBCRegistryPod) init(cfg *operator.Configuration, cs *v1alpha...
method Create (line 133) | func (f *FBCRegistryPod) Create(ctx context.Context, cfg *operator.Con...
method checkPodStatus (line 195) | func (f *FBCRegistryPod) checkPodStatus(ctx context.Context, podCheck ...
method validate (line 207) | func (f *FBCRegistryPod) validate() error {
method podForBundleRegistry (line 237) | func (f *FBCRegistryPod) podForBundleRegistry(cs *v1alpha1.CatalogSour...
method addGZIPInitContainer (line 363) | func (f *FBCRegistryPod) addGZIPInitContainer(containerVolumeMount []c...
method createConfigMaps (line 385) | func (f *FBCRegistryPod) createConfigMaps(cs *v1alpha1.CatalogSource) ...
method partitionedConfigMaps (line 412) | func (f *FBCRegistryPod) partitionedConfigMaps() ([]*corev1.ConfigMap,...
method getConfigMaps (line 440) | func (f *FBCRegistryPod) getConfigMaps(yamlDefs []string) ([]*corev1.C...
method createOrUpdateConfigMap (line 503) | func (f *FBCRegistryPod) createOrUpdateConfigMap(cm *corev1.ConfigMap)...
function GetRegistryPodHost (line 224) | func GetRegistryPodHost(ipStr string) string {
function getPodName (line 229) | func getPodName(bundleImage string) string {
FILE: internal/olm/operator/registry/fbcindex/fbc_registry_pod_test.go
constant testIndexImageTag (line 43) | testIndexImageTag = "some-image:v1.2.3"
function TestCreateRegistryPod (line 45) | func TestCreateRegistryPod(t *testing.T) {
function newFakeClient (line 51) | func newFakeClient() client.Client {
function decompressCM (line 311) | func decompressCM(cm *corev1.ConfigMap) string {
function containerCommandFor (line 327) | func containerCommandFor(indexRootDir string, grpcPort int32) string { /...
constant testYaml (line 331) | testYaml = `
constant charTbl (line 366) | charTbl = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345678...
function randField (line 370) | func randField() string {
function generateRandYaml (line 388) | func generateRandYaml() string {
function compress (line 404) | func compress(s string) []byte {
FILE: internal/olm/operator/registry/index/bundle_add_mode.go
type BundleAddMode (line 20) | type BundleAddMode
method Validate (line 31) | func (m BundleAddMode) Validate() error {
constant SemverBundleAddMode (line 24) | SemverBundleAddMode BundleAddMode = "semver"
constant ReplacesBundleAddMode (line 26) | ReplacesBundleAddMode BundleAddMode = "replaces"
FILE: internal/olm/operator/registry/index/registry_pod.go
constant defaultGRPCPort (line 41) | defaultGRPCPort = 50051
constant defaultDBPath (line 42) | defaultDBPath = "/database/index.db"
constant defaultContainerName (line 44) | defaultContainerName = "registry-grpc"
constant defaultContainerPortName (line 45) | defaultContainerPortName = "grpc"
type BundleItem (line 49) | type BundleItem struct
type SQLiteRegistryPod (line 57) | type SQLiteRegistryPod struct
method init (line 101) | func (rp *SQLiteRegistryPod) init(cfg *operator.Configuration) error {
method Create (line 128) | func (rp *SQLiteRegistryPod) Create(ctx context.Context, cfg *operator...
method checkPodStatus (line 190) | func (rp *SQLiteRegistryPod) checkPodStatus(ctx context.Context, podCh...
method validate (line 202) | func (rp *SQLiteRegistryPod) validate() error {
method podForBundleRegistry (line 235) | func (rp *SQLiteRegistryPod) podForBundleRegistry() (*corev1.Pod, erro...
method getContainerCmd (line 385) | func (rp *SQLiteRegistryPod) getContainerCmd() (string, error) {
function GetRegistryPodHost (line 222) | func GetRegistryPodHost(ipStr string) string {
function getPodName (line 227) | func getPodName(bundleImage string) string {
function addImagePullSecret (line 313) | func addImagePullSecret(pod *corev1.Pod, secretName string) {
function addCertSecret (line 327) | func addCertSecret(pod *corev1.Pod, secretName string) {
function makeSecretVolume (line 339) | func makeSecretVolume(secretName string, items ...corev1.KeyToPath) core...
function addVolumeMountForSecret (line 353) | func addVolumeMountForSecret(pod *corev1.Pod, secretName, mountPath stri...
function newInt32 (line 364) | func newInt32(i int32) *int32 {
function newBool (line 370) | func newBool(b bool) *bool {
constant cmdTemplate (line 376) | cmdTemplate = `[[ -f {{ .DBPath }} ]] && cp {{ .DBPath }} /tmp/tmp.db; \
FILE: internal/olm/operator/registry/index/registry_pod_test.go
constant testIndexImageTag (line 33) | testIndexImageTag = "some-image:v1.2.3"
constant caSecretName (line 34) | caSecretName = "foo-secret"
function newFakeClient (line 37) | func newFakeClient() client.Client {
function TestCreateRegistryPod (line 41) | func TestCreateRegistryPod(t *testing.T) {
function containerCommandFor (line 284) | func containerCommandFor(dbPath string, items []BundleItem, hasCA, skipT...
FILE: internal/olm/operator/registry/index_image.go
constant operatorFrameworkGroup (line 45) | operatorFrameworkGroup = "operators.operatorframework.io"
constant indexImageAnnotation (line 48) | indexImageAnnotation = operatorFrameworkGroup + "/index-image"
constant injectedBundlesAnnotation (line 50) | injectedBundlesAnnotation = operatorFrameworkGroup + "/injected-bundles"
constant registryPodNameAnnotation (line 52) | registryPodNameAnnotation = operatorFrameworkGroup + "/registry-pod-name"
type SecurityContextType (line 57) | type SecurityContextType
constant Legacy (line 60) | Legacy SecurityContextType = "legacy"
constant Restricted (line 61) | Restricted SecurityContextType = "restricted"
type SecurityContext (line 67) | type SecurityContext struct
method String (line 71) | func (sc *SecurityContext) String() string {
method Set (line 75) | func (sc *SecurityContext) Set(value string) error {
method IsEmpty (line 85) | func (sc *SecurityContext) IsEmpty() bool {
method Type (line 89) | func (sc *SecurityContext) Type() string {
type IndexImageCatalogCreator (line 93) | type IndexImageCatalogCreator struct
method BindFlags (line 122) | func (c *IndexImageCatalogCreator) BindFlags(fs *pflag.FlagSet) {
method CreateCatalog (line 149) | func (c IndexImageCatalogCreator) CreateCatalog(ctx context.Context, n...
method runFBCUpgrade (line 244) | func (c *IndexImageCatalogCreator) runFBCUpgrade(ctx context.Context) ...
method UpdateCatalog (line 387) | func (c IndexImageCatalogCreator) UpdateCatalog(ctx context.Context, c...
method setAddMode (line 506) | func (c *IndexImageCatalogCreator) setAddMode() {
method createAnnotatedRegistry (line 518) | func (c IndexImageCatalogCreator) createAnnotatedRegistry(ctx context....
method getDBPath (line 599) | func (c IndexImageCatalogCreator) getDBPath(ctx context.Context) (stri...
method deleteRegistryPod (line 641) | func (c IndexImageCatalogCreator) deleteRegistryPod(ctx context.Contex...
function NewIndexImageCatalogCreator (line 116) | func NewIndexImageCatalogCreator(cfg *operator.Configuration) *IndexImag...
function getChannelHead (line 171) | func getChannelHead(entries []declarativeconfig.ChannelEntry) (string, e...
function handleTraditionalUpgrade (line 194) | func handleTraditionalUpgrade(ctx context.Context, indexImage string, bu...
function upgradeFBC (line 285) | func upgradeFBC(ctx context.Context, f *fbcutil.FBCContext, originalDecl...
function updateCatalogSourceFields (line 609) | func updateCatalogSourceFields(cs *v1alpha1.CatalogSource, targetPod *co...
function getExistingBundleItems (line 627) | func getExistingBundleItems(annotations map[string]string) (items []inde...
FILE: internal/olm/operator/registry/olm_resources.go
function getSubscriptionName (line 27) | func getSubscriptionName(csvName string) string {
function withCatalogSource (line 34) | func withCatalogSource(csName, csNamespace string) func(*v1alpha1.Subscr...
function withPackageChannel (line 43) | func withPackageChannel(pkgName, channelName, startingCSV string) func(*...
function withInstallPlanApproval (line 53) | func withInstallPlanApproval(approval v1alpha1.Approval) func(*v1alpha1....
function newSubscription (line 65) | func newSubscription(csvName, namespace string, opts ...func(*v1alpha1.S...
function withSDKPublisher (line 77) | func withSDKPublisher(pkgName string) func(*v1alpha1.CatalogSource) {
function withSecrets (line 86) | func withSecrets(secretNames ...string) func(*v1alpha1.CatalogSource) {
function withGrpcPodSecurityContextConfig (line 92) | func withGrpcPodSecurityContextConfig(securityContextConfig string) func...
function newCatalogSource (line 104) | func newCatalogSource(name, namespace string, opts ...func(*v1alpha1.Cat...
function withTargetNamespaces (line 117) | func withTargetNamespaces(namespaces ...string) func(*v1.OperatorGroup) {
function newSDKOperatorGroup (line 129) | func newSDKOperatorGroup(namespace string, opts ...func(*v1.OperatorGrou...
FILE: internal/olm/operator/registry/operator_installer.go
type OperatorInstaller (line 38) | type OperatorInstaller struct
method InstallOperator (line 55) | func (o OperatorInstaller) InstallOperator(ctx context.Context) (*v1al...
method UpgradeOperator (line 104) | func (o OperatorInstaller) UpgradeOperator(ctx context.Context) (*v1al...
method waitForCatalogSource (line 174) | func (o OperatorInstaller) waitForCatalogSource(ctx context.Context, c...
method ensureOperatorGroup (line 197) | func (o OperatorInstaller) ensureOperatorGroup(ctx context.Context) er...
method createOperatorGroup (line 236) | func (o *OperatorInstaller) createOperatorGroup(ctx context.Context, t...
method isOperatorGroupCompatible (line 244) | func (o *OperatorInstaller) isOperatorGroupCompatible(og v1.OperatorGr...
method getOperatorGroup (line 263) | func (o OperatorInstaller) getOperatorGroup(ctx context.Context) (*v1....
method createSubscription (line 281) | func (o OperatorInstaller) createSubscription(ctx context.Context, csN...
method getInstalledCSV (line 295) | func (o OperatorInstaller) getInstalledCSV(ctx context.Context) (*v1al...
method approveInstallPlan (line 319) | func (o OperatorInstaller) approveInstallPlan(ctx context.Context, sub...
method waitForInstallPlan (line 344) | func (o OperatorInstaller) waitForInstallPlan(ctx context.Context, sub...
method getTargetNamespaces (line 372) | func (o *OperatorInstaller) getTargetNamespaces(supported set.Set[stri...
function NewOperatorInstaller (line 51) | func NewOperatorInstaller(cfg *operator.Configuration) *OperatorInstaller {
FILE: internal/olm/operator/registry/operator_installer_test.go
constant name (line 35) | name = "fakeName"
constant namespace (line 36) | namespace = "fakeNS"
function createOperatorGroupHelper (line 677) | func createOperatorGroupHelper(ctx context.Context, c crclient.Client, n...
FILE: internal/olm/operator/registry/registry_suite_test.go
function TestRegistry (line 24) | func TestRegistry(t *testing.T) {
FILE: internal/olm/operator/uninstall.go
constant crdKind (line 37) | crdKind = "CustomResourceDefinition"
type Uninstall (line 40) | type Uninstall struct
method BindFlags (line 58) | func (u *Uninstall) BindFlags(fs *pflag.FlagSet) {
method Run (line 72) | func (u *Uninstall) Run(ctx context.Context) error {
method deleteOperatorGroup (line 185) | func (u *Uninstall) deleteOperatorGroup(ctx context.Context) error {
method deleteObjects (line 207) | func (u *Uninstall) deleteObjects(ctx context.Context, waitForDelete b...
function NewUninstall (line 52) | func NewUninstall(cfg *Configuration) *Uninstall {
type ErrPackageNotFound (line 64) | type ErrPackageNotFound struct
method Error (line 68) | func (e ErrPackageNotFound) Error() string {
function getCRDs (line 240) | func getCRDs(csv *v1alpha1.ClusterServiceVersion) (crds []client.Object) {
FILE: internal/plugins/helm/v1/api.go
constant crdVersionFlag (line 36) | crdVersionFlag = "crd-version"
constant helmChartFlag (line 37) | helmChartFlag = "helm-chart"
constant helmChartRepoFlag (line 38) | helmChartRepoFlag = "helm-chart-repo"
constant helmChartVersionFlag (line 39) | helmChartVersionFlag = "helm-chart-version"
constant defaultCrdVersion (line 41) | defaultCrdVersion = "v1"
constant legacyCrdVersion (line 42) | legacyCrdVersion = "v1beta1"
constant defaultGroup (line 45) | defaultGroup = "charts"
constant defaultVersion (line 47) | defaultVersion = "v1alpha1"
type createAPIOptions (line 50) | type createAPIOptions struct
method UpdateResource (line 58) | func (opts createAPIOptions) UpdateResource(res *resource.Resource) {
type createAPISubcommand (line 71) | type createAPISubcommand struct
method UpdateMetadata (line 78) | func (p *createAPISubcommand) UpdateMetadata(cliMeta plugin.CLIMetadat...
method BindFlags (line 118) | func (p *createAPISubcommand) BindFlags(fs *pflag.FlagSet) {
method InjectConfig (line 131) | func (p *createAPISubcommand) InjectConfig(c config.Config) error {
method PreScaffold (line 137) | func (p *createAPISubcommand) PreScaffold(machinery.Filesystem) error {
method InjectResource (line 144) | func (p *createAPISubcommand) InjectResource(res *resource.Resource) e...
method Scaffold (line 218) | func (p *createAPISubcommand) Scaffold(fs machinery.Filesystem) error {
function hasDifferentAPIVersion (line 237) | func hasDifferentAPIVersion(versions []string, version string) bool {
FILE: internal/plugins/helm/v1/chartutil/chart.go
constant HelmChartsDir (line 36) | HelmChartsDir = "helm-charts"
type Options (line 41) | type Options struct
function NewChart (line 54) | func NewChart(name string) (*chart.Chart, error) {
function LoadChart (line 103) | func LoadChart(opts Options) (*chart.Chart, error) {
function downloadChart (line 127) | func downloadChart(destDir string, opts Options) (string, error) {
function ScaffoldChart (line 166) | func ScaffoldChart(chrt *chart.Chart, projectDir string) (*chart.Chart, ...
function fetchChartDependencies (line 190) | func fetchChartDependencies(chartPath string) error {
FILE: internal/plugins/helm/v1/chartutil/chart_test.go
function TestChart (line 31) | func TestChart(t *testing.T) {
type createChartTestCase (line 155) | type createChartTestCase struct
function runTestCase (line 168) | func runTestCase(t *testing.T, testDir string, tc createChartTestCase) {
FILE: internal/plugins/helm/v1/init.go
constant groupFlag (line 33) | groupFlag = "group"
constant versionFlag (line 34) | versionFlag = "version"
constant kindFlag (line 35) | kindFlag = "kind"
type initSubcommand (line 38) | type initSubcommand struct
method UpdateMetadata (line 55) | func (p *initSubcommand) UpdateMetadata(cliMeta plugin.CLIMetadata, su...
method BindFlags (line 119) | func (p *initSubcommand) BindFlags(fs *pflag.FlagSet) {
method InjectConfig (line 127) | func (p *initSubcommand) InjectConfig(c config.Config) error {
method Scaffold (line 132) | func (p *initSubcommand) Scaffold(fs machinery.Filesystem) error {
method PostScaffold (line 143) | func (p *initSubcommand) PostScaffold() error {
function addInitCustomizations (line 180) | func addInitCustomizations(projectName string) error {
FILE: internal/plugins/helm/v1/plugin.go
constant pluginName (line 25) | pluginName = "base.helm" + plugins.DefaultNameQualifier
type Plugin (line 39) | type Plugin struct
method Name (line 44) | func (Plugin) Name() string { ...
method Version (line 45) | func (Plugin) Version() plugin.Version { ...
method SupportedProjectVersions (line 46) | func (Plugin) SupportedProjectVersions() []config.Version { ...
method GetInitSubcommand (line 47) | func (p Plugin) GetInitSubcommand() plugin.InitSubcommand { ...
method GetCreateAPISubcommand (line 48) | func (p Plugin) GetCreateAPISubcommand() plugin.CreateAPISubcommand { ...
FILE: internal/plugins/helm/v1/scaffolds/api.go
type apiScaffolder (line 41) | type apiScaffolder struct
method InjectFS (line 59) | func (s *apiScaffolder) InjectFS(fs machinery.Filesystem) {
method Scaffold (line 64) | func (s *apiScaffolder) Scaffold() error {
function NewAPIScaffolder (line 50) | func NewAPIScaffolder(cfg config.Config, res resource.Resource, chrt *ch...
FILE: internal/plugins/helm/v1/scaffolds/init.go
constant imageName (line 33) | imageName = "controller:latest"
type initScaffolder (line 40) | type initScaffolder struct
method InjectFS (line 54) | func (s *initScaffolder) InjectFS(fs machinery.Filesystem) {
method Scaffold (line 59) | func (s *initScaffolder) Scaffold() error {
function NewInitScaffolder (line 47) | func NewInitScaffolder(config config.Config) plugins.Scaffolder {
FILE: internal/plugins/helm/v1/scaffolds/internal/templates/config/crd/crd.go
type CRD (line 28) | type CRD struct
method SetTemplateDefaults (line 34) | func (f *CRD) SetTemplateDefaults() error {
constant crdTemplate (line 50) | crdTemplate = `---
constant openAPIV3SchemaTemplate (line 83) | openAPIV3SchemaTemplate = `openAPIV3Schema:
FILE: internal/plugins/helm/v1/scaffolds/internal/templates/config/crd/kustomization.go
type Kustomization (line 33) | type Kustomization struct
method SetTemplateDefaults (line 39) | func (f *Kustomization) SetTemplateDefaults() error {
method GetMarkers (line 54) | func (f *Kustomization) GetMarkers() []machinery.Marker {
method GetCodeFragments (line 66) | func (f *Kustomization) GetCodeFragments() machinery.CodeFragmentsMap {
constant resourceMarker (line 50) | resourceMarker = "crdkustomizeresource"
constant resourceCodeFragment (line 61) | resourceCodeFragment = `- bases/%s_%s.yaml
FILE: internal/plugins/helm/v1/scaffolds/internal/templates/config/rbac/manager_role.go
type ManagerRole (line 44) | type ManagerRole struct
method SetTemplateDefaults (line 49) | func (f *ManagerRole) SetTemplateDefaults() error {
type ManagerRoleUpdater (line 62) | type ManagerRoleUpdater struct
method GetPath (line 70) | func (*ManagerRoleUpdater) GetPath() string {
method GetIfExistsAction (line 74) | func (*ManagerRoleUpdater) GetIfExistsAction() machinery.IfExistsAction {
method GetMarkers (line 82) | func (f *ManagerRoleUpdater) GetMarkers() []machinery.Marker {
method GetCodeFragments (line 88) | func (f *ManagerRoleUpdater) GetCodeFragments() machinery.CodeFragment...
method updateForChart (line 250) | func (f *ManagerRoleUpdater) updateForChart(dc roleDiscoveryInterface) {
constant rulesMarker (line 79) | rulesMarker = "rules"
constant roleTemplate (line 120) | roleTemplate = `apiVersion: rbac.authorization.k8s.io/v1
constant rulesFragment (line 153) | rulesFragment = `##
type roleDiscoveryInterface (line 242) | type roleDiscoveryInterface interface
function generateRoleRules (line 269) | func generateRoleRules(dc roleDiscoveryInterface, chart *chart.Chart) ([...
function getDefaultManifests (line 350) | func getDefaultManifests(c *chart.Chart) ([]releaseutil.Manifest, error) {
function getResource (line 365) | func getResource(namespacedResourceList []*metav1.APIResourceList, group...
function buildRulesFromGroups (line 378) | func buildRulesFromGroups(groups map[string]map[string]struct{}) []rbacv...
FILE: internal/plugins/helm/v1/scaffolds/internal/templates/config/rbac/manager_role_test.go
function TestGenerateRoleScaffold (line 27) | func TestGenerateRoleScaffold(t *testing.T) {
type mockRoleDiscoveryClient (line 84) | type mockRoleDiscoveryClient struct
method ServerGroupsAndResources (line 88) | func (dc *mockRoleDiscoveryClient) ServerGroupsAndResources() ([]*meta...
function simpleGroupList (line 92) | func simpleGroupList() []*metav1.APIGroup {
function simpleResourcesList (line 103) | func simpleResourcesList() []*metav1.APIResourceList {
type roleScaffoldTestCase (line 123) | type roleScaffoldTestCase struct
function failChart (line 130) | func failChart() *chart.Chart {
function unknownAPIChart (line 141) | func unknownAPIChart() *chart.Chart {
function namespacedChart (line 153) | func namespacedChart() *chart.Chart {
function clusterScopedChart (line 165) | func clusterScopedChart() *chart.Chart {
function testUnknownData (line 179) | func testUnknownData(name string) []byte {
function testPodData (line 187) | func testPodData(name string) []byte {
function testNamespaceData (line 199) | func testNamespaceData(name string) []byte {
FILE: internal/plugins/helm/v1/scaffolds/internal/templates/config/samples/custom_resource.go
type CustomResource (line 37) | type CustomResource struct
method SetTemplateDefaults (line 47) | func (f *CustomResource) SetTemplateDefaults() error {
method GetFuncMap (line 80) | func (f *CustomResource) GetFuncMap() template.FuncMap {
function indent (line 74) | func indent(spaces int, v string) string {
constant defaultSpecTemplate (line 86) | defaultSpecTemplate = `# TODO(user): Add fields here
constant customResourceTemplate (line 89) | customResourceTemplate = `apiVersion: {{ .Resource.QualifiedGroup }}/{{ ...
FILE: internal/plugins/helm/v1/scaffolds/internal/templates/dockerfile.go
type Dockerfile (line 26) | type Dockerfile struct
method SetTemplateDefaults (line 34) | func (f *Dockerfile) SetTemplateDefaults() error {
constant dockerfileTemplate (line 48) | dockerfileTemplate = `# Build the manager binary
FILE: internal/plugins/helm/v1/scaffolds/internal/templates/gitignore.go
type GitIgnore (line 27) | type GitIgnore struct
method SetTemplateDefaults (line 32) | func (f *GitIgnore) SetTemplateDefaults() error {
constant gitignoreTemplate (line 42) | gitignoreTemplate = `
FILE: internal/plugins/helm/v1/scaffolds/internal/templates/makefile.go
type Makefile (line 29) | type Makefile struct
method SetTemplateDefaults (line 43) | func (f *Makefile) SetTemplateDefaults() error {
constant makefileTemplate (line 67) | makefileTemplate = `
FILE: internal/plugins/helm/v1/scaffolds/internal/templates/watches.go
constant defaultWatchesFile (line 25) | defaultWatchesFile = "watches.yaml"
type Watches (line 28) | type Watches struct
method SetTemplateDefaults (line 33) | func (f *Watches) SetTemplateDefaults() error {
type WatchesUpdater (line 46) | type WatchesUpdater struct
method GetPath (line 52) | func (*WatchesUpdater) GetPath() string {
method GetIfExistsAction (line 56) | func (*WatchesUpdater) GetIfExistsAction() machinery.IfExistsAction {
method GetMarkers (line 64) | func (f *WatchesUpdater) GetMarkers() []machinery.Marker {
method GetCodeFragments (line 70) | func (f *WatchesUpdater) GetCodeFragments() machinery.CodeFragmentsMap {
constant watchMarker (line 61) | watchMarker = "watch"
constant watchFragment (line 89) | watchFragment = `- group: %s
constant watchesTemplate (line 95) | watchesTemplate = `# Use the 'create api' subcommand to add watches to t...
FILE: internal/plugins/manifests/v2/api.go
type createAPISubcommand (line 32) | type createAPISubcommand struct
method InjectConfig (line 37) | func (s *createAPISubcommand) InjectConfig(c config.Config) error {
method InjectResource (line 58) | func (s *createAPISubcommand) InjectResource(res *resource.Resource) e...
method Scaffold (line 64) | func (s *createAPISubcommand) Scaffold(fs machinery.Filesystem) error {
FILE: internal/plugins/manifests/v2/init.go
constant opmVersion (line 38) | opmVersion = "v1.55.0"
constant filePath (line 40) | filePath = "Makefile"
type initSubcommand (line 44) | type initSubcommand struct
method InjectConfig (line 48) | func (s *initSubcommand) InjectConfig(c config.Config) error {
method Scaffold (line 54) | func (s *initSubcommand) Scaffold(fs machinery.Filesystem) error {
constant makefileBundleVarFragment (line 144) | makefileBundleVarFragment = `# VERSION defines the project version for t...
constant makefileSDKFragmentGo (line 197) | makefileSDKFragmentGo = `
constant makefileSDKFragmentNonGo (line 216) | makefileSDKFragmentNonGo = `
constant makefileBundleFragmentGo (line 234) | makefileBundleFragmentGo = `
constant makefileBundleFragmentNonGo (line 243) | makefileBundleFragmentNonGo = `
constant makefileBundleBuildPushFragment (line 253) | makefileBundleBuildPushFragment = `
constant makefileOPMFragmentGo (line 263) | makefileOPMFragmentGo = `
constant makefileOPMFragmentNonGo (line 282) | makefileOPMFragmentNonGo = `
constant makefileCatalogBuildFragment (line 300) | makefileCatalogBuildFragment = `
constant makefileTestFix (line 329) | makefileTestFix = `@case "$$($(KIND) get clusters)" in \
FILE: internal/plugins/manifests/v2/plugin.go
constant pluginName (line 25) | pluginName = "manifests" + plugins.DefaultNameQualifier
type Plugin (line 39) | type Plugin struct
method Name (line 44) | func (Plugin) Name() string { ...
method Version (line 45) | func (Plugin) Version() plugin.Version { ...
method SupportedProjectVersions (line 46) | func (Plugin) SupportedProjectVersions() []config.Version { ...
method GetInitSubcommand (line 47) | func (p Plugin) GetInitSubcommand() plugin.InitSubcommand { ...
method GetCreateAPISubcommand (line 48) | func (p Plugin) GetCreateAPISubcommand() plugin.CreateAPISubcommand { ...
type Config (line 50) | type Config struct
FILE: internal/plugins/manifests/v2/templates/config/manifests/kustomization.go
type Kustomization (line 26) | type Kustomization struct
method SetTemplateDefaults (line 40) | func (f *Kustomization) SetTemplateDefaults() error {
constant kustomizationTemplate (line 56) | kustomizationTemplate = `# These resources constitute the fully configur...
FILE: internal/plugins/manifests/v2/templates/config/samples/kustomization.go
type Kustomization (line 30) | type Kustomization struct
method SetTemplateDefaults (line 36) | func (f *Kustomization) SetTemplateDefaults() error {
method GetMarkers (line 52) | func (f *Kustomization) GetMarkers() []machinery.Marker {
method makeCRFileName (line 61) | func (f Kustomization) makeCRFileName() string {
method GetCodeFragments (line 66) | func (f *Kustomization) GetCodeFragments() machinery.CodeFragmentsMap {
constant samplesMarker (line 48) | samplesMarker = "manifestskustomizesamples"
constant samplesCodeFragment (line 56) | samplesCodeFragment = `- %s
constant kustomizationTemplate (line 72) | kustomizationTemplate = `## Append samples you want in your CSV to this ...
FILE: internal/plugins/manifests/v2/utils.go
constant goV3APluginKey (line 25) | goV3APluginKey = "go.sdk.operatorframework.io/v3"
constant legacyGoPluginKey (line 26) | legacyGoPluginKey = "go.sdk.operatorframework.io/v2"
constant legacyGoPluginAlphaKey (line 27) | legacyGoPluginAlphaKey = "go.sdk.operatorframework.io/v2-alpha"
constant kubebuilderGoV3 (line 28) | kubebuilderGoV3 = "go.kubebuilder.io/v3"
constant kubebuilderGoV2 (line 29) | kubebuilderGoV2 = "go.kubebuilder.io/v2"
function HasSupportForKustomizeV4 (line 34) | func HasSupportForKustomizeV4(c config.Config) bool {
FILE: internal/plugins/plugins.go
constant DefaultNameQualifier (line 19) | DefaultNameQualifier = ".sdk.operatorframework.io"
FILE: internal/plugins/scorecard/v2/init.go
type initSubcommand (line 43) | type initSubcommand struct
method InjectConfig (line 47) | func (s *initSubcommand) InjectConfig(c config.Config) error {
method Scaffold (line 53) | func (s *initSubcommand) Scaffold(fs machinery.Filesystem) error {
constant scorecardKustomizationFile (line 95) | scorecardKustomizationFile = `resources:
constant patchesMarker (line 116) | patchesMarker = "patches"
constant configBaseFile (line 119) | configBaseFile = `apiVersion: scorecard.operatorframework.io/v1alpha3
constant basicPatchFile (line 129) | basicPatchFile = `- op: add
constant olmPatchFile (line 142) | olmPatchFile = `- op: add
FILE: internal/plugins/scorecard/v2/plugin.go
constant pluginName (line 25) | pluginName = "scorecard" + plugins.DefaultNameQualifier
type Plugin (line 38) | type Plugin struct
method Name (line 42) | func (Plugin) Name() string { return plu...
method Version (line 43) | func (Plugin) Version() plugin.Version { return plu...
method SupportedProjectVersions (line 44) | func (Plugin) SupportedProjectVersions() []config.Version { return sup...
method GetInitSubcommand (line 45) | func (p Plugin) GetInitSubcommand() plugin.InitSubcommand { return &p....
type Config (line 47) | type Config struct
FILE: internal/plugins/util/cleanup.go
function RemoveKustomizeCRDManifests (line 30) | func RemoveKustomizeCRDManifests() error {
function UpdateKustomizationsInit (line 62) | func UpdateKustomizationsInit() error {
function UpdateKustomizationsCreateAPI (line 305) | func UpdateKustomizationsCreateAPI() error {
FILE: internal/plugins/util/legacy_keys.go
constant legacyGoPluginKey (line 29) | legacyGoPluginKey = "go.sdk.operatorframework.io/v2-alpha"
constant legacyGoPluginAlphaKey (line 30) | legacyGoPluginAlphaKey = "go.sdk.operatorframework.io/v2-alpha"
constant manifestsKey (line 33) | manifestsKey = "manifests.sdk.operatorframework.io/v2"
constant scorecardKey (line 34) | scorecardKey = "scorecard.sdk.operatorframework.io/v2"
function UpdateIfLegacyKey (line 46) | func UpdateIfLegacyKey(c config.Config) bool {
function IsGolangLegacyLayout (line 78) | func IsGolangLegacyLayout(c config.Config) bool {
FILE: internal/plugins/util/message.go
constant WarnMessageRemovalV1beta1 (line 17) | WarnMessageRemovalV1beta1 = "The v1beta1 API version for CRDs and Webhoo...
FILE: internal/registry/image.go
function ExtractBundleImage (line 30) | func ExtractBundleImage(ctx context.Context, logger *log.Entry, image st...
function GetImageLabels (line 83) | func GetImageLabels(ctx context.Context, logger *log.Entry, image string...
FILE: internal/registry/labels.go
type MetadataNotFoundError (line 30) | type MetadataNotFoundError
method Error (line 32) | func (e MetadataNotFoundError) Error() string {
type LabelsMap (line 37) | type LabelsMap
method GetManifestsDir (line 41) | func (ls LabelsMap) GetManifestsDir() (string, bool) {
function FindBundleMetadata (line 48) | func FindBundleMetadata(bundleRoot string) (LabelsMap, string, error) {
function findBundleMetadata (line 52) | func findBundleMetadata(fs afero.Fs, bundleRoot string) (LabelsMap, stri...
function readAnnotations (line 92) | func readAnnotations(fs afero.Fs, annotationsPath string) (LabelsMap, er...
FILE: internal/registry/labels_test.go
function writeMetadataHelper (line 138) | func writeMetadataHelper(fs afero.Fs, path, contents string) {
constant annotationsStringValidV1 (line 149) | annotationsStringValidV1 = `annotations:
constant annotationsStringValidNoRegLabels (line 160) | annotationsStringValidNoRegLabels = `annotations:
constant annotationsStringInvalidBadIndent (line 165) | annotationsStringInvalidBadIndent = `annotations:
constant annotationsStringInvalidEmpty (line 169) | annotationsStringInvalidEmpty = ``
constant annotationsStringInvalidNoLabels (line 171) | annotationsStringInvalidNoLabels = `annotations:
constant annotationsStringInvalidTopKey (line 174) | annotationsStringInvalidTopKey = `not-annotations:
FILE: internal/registry/logger.go
function DiscardLogger (line 24) | func DiscardLogger() *log.Entry {
FILE: internal/registry/registry_suite_test.go
function TestRegistry (line 24) | func TestRegistry(t *testing.T) {
FILE: internal/registry/validate.go
function ValidateBundleContent (line 37) | func ValidateBundleContent(logger *log.Entry, bundle *apimanifests.Bundl...
function validateObject (line 105) | func validateObject(obj metav1.Object) error {
function appendResult (line 117) | func appendResult(results []apierrors.ManifestResult, r apierrors.Manife...
function RewriteAnnotationsYaml (line 137) | func RewriteAnnotationsYaml(filename string, content map[string]string) ...
function getAnnotationFileContents (line 157) | func getAnnotationFileContents(filename string) (*registrybundle.Annotat...
function writeAnnotationFile (line 170) | func writeAnnotationFile(filename string, annotation *registrybundle.Ann...
FILE: internal/scorecard/bundle.go
method getBundleData (line 28) | func (r PodTestRunner) getBundleData() (bundleData []byte, err error) {
type closeFuncs (line 54) | type closeFuncs
method close (line 56) | func (fs closeFuncs) close() {
FILE: internal/scorecard/bundle_test.go
function cmpTarFilesHelper (line 76) | func cmpTarFilesHelper(c1, c2 []byte) {
function untarToFileSet (line 94) | func untarToFileSet(r io.Reader) (map[string]*bytes.Buffer, error) {
FILE: internal/scorecard/config.go
constant ConfigFileName (line 26) | ConfigFileName = "config.yaml"
constant DefaultConfigDir (line 28) | DefaultConfigDir = "tests/scorecard/"
function LoadConfig (line 37) | func LoadConfig(configFilePath string) (v1alpha3.Configuration, error) {
FILE: internal/scorecard/config_test.go
function TestInvalidConfigPath (line 21) | func TestInvalidConfigPath(t *testing.T) {
FILE: internal/scorecard/formatting.go
method getTestStatus (line 27) | func (r PodTestRunner) getTestStatus(ctx context.Context, p *v1.Pod) (ou...
method List (line 42) | func (o Scorecard) List() v1alpha3.TestList {
FILE: internal/scorecard/formatting_test.go
function TestList (line 24) | func TestList(t *testing.T) {
FILE: internal/scorecard/kubeclient.go
function GetKubeClient (line 35) | func GetKubeClient(kubeconfig string) (client kubernetes.Interface, conf...
function GetKubeNamespace (line 67) | func GetKubeNamespace(kubeconfigPath, namespace string) string {
FILE: internal/scorecard/kubeclient_test.go
function TestGetKubeNamespace (line 23) | func TestGetKubeNamespace(t *testing.T) {
function TestGetKubeNamespaceEnvVar (line 60) | func TestGetKubeNamespaceEnvVar(t *testing.T) {
constant testKubeconfig (line 100) | testKubeconfig = `
FILE: internal/scorecard/labels_test.go
function TestEmptySelector (line 24) | func TestEmptySelector(t *testing.T) {
FILE: internal/scorecard/run_test.go
function TestRun (line 29) | func TestRun(t *testing.T) {
function TestRunParallelPass (line 108) | func TestRunParallelPass(t *testing.T) {
function TestRunSequentialPass (line 126) | func TestRunSequentialPass(t *testing.T) {
function TestRunSequentialFail (line 144) | func TestRunSequentialFail(t *testing.T) {
function getFakeScorecard (line 156) | func getFakeScorecard(parallel bool) Scorecard {
function expectPass (line 182) | func expectPass(t *testing.T, test v1alpha3.Test) {
FILE: internal/scorecard/scorecard.go
type TestRunner (line 34) | type TestRunner interface
type Scorecard (line 40) | type Scorecard struct
method Run (line 73) | func (o Scorecard) Run(ctx context.Context) (testOutput v1alpha3.TestL...
method setTestDefaults (line 118) | func (o Scorecard) setTestDefaults(tests []v1alpha3.TestConfiguration)...
method runStageParallel (line 127) | func (o Scorecard) runStageParallel(ctx context.Context, tests []v1alp...
method runStageSequential (line 139) | func (o Scorecard) runStageSequential(ctx context.Context, tests []v1a...
method runTest (line 145) | func (o Scorecard) runTest(ctx context.Context, test v1alpha3.TestConf...
method selectTests (line 161) | func (o *Scorecard) selectTests(stage v1alpha3.StageConfiguration) []v...
type PodTestRunner (line 48) | type PodTestRunner struct
method Initialize (line 182) | func (r *PodTestRunner) Initialize(ctx context.Context) error {
method Cleanup (line 207) | func (r PodTestRunner) Cleanup(ctx context.Context) (err error) {
method RunTest (line 222) | func (r PodTestRunner) RunTest(ctx context.Context, test v1alpha3.Test...
method waitForTestToComplete (line 291) | func (r PodTestRunner) waitForTestToComplete(ctx context.Context, p *v...
type FakeTestRunner (line 63) | type FakeTestRunner struct
method Initialize (line 172) | func (r FakeTestRunner) Initialize(ctx context.Context) error {
method Cleanup (line 197) | func (r FakeTestRunner) Cleanup(ctx context.Context) error {
method RunTest (line 276) | func (r FakeTestRunner) RunTest(ctx context.Context, _ v1alpha3.TestCo...
function ConfigDocLink (line 285) | func ConfigDocLink() string {
function convertErrorToStatus (line 315) | func convertErrorToStatus(err error, log string) *v1alpha3.TestStatus {
FILE: internal/scorecard/scorecard_suite_test.go
function TestScorecard (line 24) | func TestScorecard(t *testing.T) {
FILE: internal/scorecard/storage.go
constant StorageSidecarContainer (line 34) | StorageSidecarContainer = "scorecard-gather"
method execInPod (line 37) | func (r PodTestRunner) execInPod(podName, mountPath, containerName strin...
function getStoragePrefix (line 83) | func getStoragePrefix(file string) string {
function untarAll (line 87) | func untarAll(reader io.Reader, destDir, prefix string) error {
function addStorageToPod (line 140) | func addStorageToPod(podDef *v1.Pod, mountPath string, storageImage stri...
function gatherTestOutput (line 189) | func gatherTestOutput(r PodTestRunner, suiteName, testName, podName, mou...
function getDestPath (line 221) | func getDestPath(baseDir, suiteName, testName string) (destPath string) {
FILE: internal/scorecard/tar.go
function WriteToTar (line 29) | func WriteToTar(tw *tar.Writer, r io.Reader, hdr *tar.Header) error {
function WritePathsToTar (line 38) | func WritePathsToTar(tw *tar.Writer, paths []string) (err error) {
function UntarFile (line 94) | func UntarFile(tarName, target string) (err error) {
function isFileGzipped (line 177) | func isFileGzipped(file string) bool {
FILE: internal/scorecard/testconfigmap.go
method CreateConfigMap (line 28) | func (r PodTestRunner) CreateConfigMap(ctx context.Context, bundleData [...
function getConfigMapDefinition (line 40) | func getConfigMapDefinition(namespace string, bundleData []byte) *v1.Con...
method deleteConfigMap (line 58) | func (r PodTestRunner) deleteConfigMap(ctx context.Context, configMapNam...
FILE: internal/scorecard/testpod.go
constant PodBundleRoot (line 32) | PodBundleRoot = "/bundle"
function getPodDefinition (line 37) | func getPodDefinition(configMapName string, test v1alpha3.TestConfigurat...
function getPodLog (line 125) | func getPodLog(ctx context.Context, client kubernetes.Interface, pod *v1...
method deletePods (line 143) | func (r PodTestRunner) deletePods(ctx context.Context, configMapName str...
FILE: internal/scorecard/tests/basic.go
constant BasicCheckSpecTest (line 26) | BasicCheckSpecTest = "basic-check-spec"
function CheckSpecTest (line 30) | func CheckSpecTest(bundle *apimanifests.Bundle) scapiv1alpha3.TestStatus {
function checkSpec (line 49) | func checkSpec(crSet []unstructured.Unstructured,
FILE: internal/scorecard/tests/bundle_test.go
function TestScorecard (line 468) | func TestScorecard(t *testing.T) {
FILE: internal/scorecard/tests/crhelper.go
function GetCRs (line 26) | func GetCRs(bundle *apimanifests.Bundle) (crList []unstructured.Unstruct...
FILE: internal/scorecard/tests/olm.go
constant OLMBundleValidationTest (line 40) | OLMBundleValidationTest = "olm-bundle-validation"
constant OLMCRDsHaveValidationTest (line 41) | OLMCRDsHaveValidationTest = "olm-crds-have-validation"
constant OLMCRDsHaveResourcesTest (line 42) | OLMCRDsHaveResourcesTest = "olm-crds-have-resources"
constant OLMSpecDescriptorsTest (line 43) | OLMSpecDescriptorsTest = "olm-spec-descriptors"
constant OLMStatusDescriptorsTest (line 44) | OLMStatusDescriptorsTest = "olm-status-descriptors"
constant statusDescriptor (line 45) | statusDescriptor = "status"
constant specDescriptor (line 46) | specDescriptor = "spec"
function BundleValidationTest (line 50) | func BundleValidationTest(bundleRoot string, metadata registryutil.Label...
function CRDsHaveValidationTest (line 125) | func CRDsHaveValidationTest(bundle *apimanifests.Bundle) scapiv1alpha3.T...
function CRDsHaveResourcesTest (line 162) | func CRDsHaveResourcesTest(bundle *apimanifests.Bundle) scapiv1alpha3.Te...
function CheckResources (line 175) | func CheckResources(crd operatorsv1alpha1.CustomResourceDefinitions,
function SpecDescriptorsTest (line 188) | func SpecDescriptorsTest(bundle *apimanifests.Bundle) scapiv1alpha3.Test...
function StatusDescriptorsTest (line 199) | func StatusDescriptorsTest(bundle *apimanifests.Bundle) scapiv1alpha3.Te...
function checkCSVDescriptors (line 209) | func checkCSVDescriptors(bundle *apimanifests.Bundle, r scapiv1alpha3.Te...
function checkOwnedCSVStatusDescriptor (line 234) | func checkOwnedCSVStatusDescriptor(cr unstructured.Unstructured, csv *op...
function checkOwnedCSVSpecDescriptors (line 280) | func checkOwnedCSVSpecDescriptors(cr unstructured.Unstructured, csv *ope...
function hasVersion (line 322) | func hasVersion(version string, crdVersion apiextv1.CustomResourceDefini...
function hasKind (line 326) | func hasKind(kind1, kind2 string, r scapiv1alpha3.TestResult) bool {
function isCRFromCRDApi (line 342) | func isCRFromCRDApi(cr unstructured.Unstructured, crds []*apiextv1.Custo...
function wrapResult (line 391) | func wrapResult(r scapiv1alpha3.TestResult) scapiv1alpha3.TestStatus {
FILE: internal/testutils/olm.go
constant OlmVersionForTestSuite (line 28) | OlmVersionForTestSuite = "0.28.0"
method AddPackagemanifestsTarget (line 54) | func (tc TestContext) AddPackagemanifestsTarget(operatorType projutil.Op...
method DisableManifestsInteractiveMode (line 77) | func (tc TestContext) DisableManifestsInteractiveMode() error {
method GenerateBundle (line 86) | func (tc TestContext) GenerateBundle() error {
FILE: internal/testutils/scorecard.go
constant scorecardImage (line 27) | scorecardImage = "quay.io/operator-framework/scorecard-test:.*"
constant scorecardImageReplace (line 28) | scorecardImageReplace = "quay.io/operator-framework/scorecard-test:dev"
constant customScorecardPatch (line 30) | customScorecardPatch = `
constant customScorecardKustomize (line 53) | customScorecardKustomize = `
method AddScorecardCustomPatchFile (line 62) | func (tc TestContext) AddScorecardCustomPatchFile() error {
method ReplaceScorecardImagesForDev (line 89) | func (tc TestContext) ReplaceScorecardImagesForDev() error {
FILE: internal/testutils/utils.go
constant BinaryName (line 32) | BinaryName = "operator-sdk"
type TestContext (line 35) | type TestContext struct
method InstallOLMVersion (line 94) | func (tc TestContext) InstallOLMVersion(version string) error {
method UninstallOLM (line 101) | func (tc TestContext) UninstallOLM() {
method LoadImageToKindClusterWithName (line 131) | func (tc TestContext) LoadImageToKindClusterWithName(image string) err...
method InstallPrerequisites (line 144) | func (tc TestContext) InstallPrerequisites() {
method IsRunningOnKind (line 175) | func (tc TestContext) IsRunningOnKind() (bool, error) {
method UninstallPrerequisites (line 184) | func (tc TestContext) UninstallPrerequisites() {
method UncommentRestrictivePodStandards (line 207) | func (tc TestContext) UncommentRestrictivePodStandards() error {
function NewTestContext (line 49) | func NewTestContext(binaryName string, env ...string) (tc TestContext, e...
function NewPartialTestContext (line 64) | func NewPartialTestContext(binaryName, dir string, env ...string) (tc Te...
function makeImageName (line 84) | func makeImageName(projectName string) string {
function makeBundleImageName (line 88) | func makeBundleImageName(projectName string) string {
function ReplaceInFile (line 110) | func ReplaceInFile(path, o, n string) error {
function WrapWarnOutput (line 196) | func WrapWarnOutput(_ string, err error) {
function WrapWarn (line 203) | func WrapWarn(err error) {
FILE: internal/util/bundleutil/bundleutil.go
type BundleMetaData (line 41) | type BundleMetaData struct
method GenerateMetadata (line 81) | func (meta *BundleMetaData) GenerateMetadata() error {
method CopyOperatorManifests (line 144) | func (meta *BundleMetaData) CopyOperatorManifests() error {
method BuildBundleImage (line 197) | func (meta *BundleMetaData) BuildBundleImage(tag string) error {
method WriteScorecardConfig (line 248) | func (meta *BundleMetaData) WriteScorecardConfig(inputConfigPath strin...
type annotationsValues (line 70) | type annotationsValues struct
function copyOperatorManifests (line 148) | func copyOperatorManifests(src, dest string) error {
function deleteExistingScorecardConfig (line 278) | func deleteExistingScorecardConfig(bundleDir, filename string) error {
FILE: internal/util/k8sutil/api.go
function GetCustomResourceDefinitions (line 36) | func GetCustomResourceDefinitions(crdsDir string) (
function DefinitionsForV1CustomResourceDefinitions (line 112) | func DefinitionsForV1CustomResourceDefinitions(crds ...apiextv1.CustomRe...
function DefinitionsForV1beta1CustomResourceDefinitions (line 132) | func DefinitionsForV1beta1CustomResourceDefinitions(crds ...apiextv1beta...
function GVKsForV1CustomResourceDefinitions (line 160) | func GVKsForV1CustomResourceDefinitions(crds ...apiextv1.CustomResourceD...
function GVKsForV1beta1CustomResourceDefinitions (line 173) | func GVKsForV1beta1CustomResourceDefinitions(crds ...apiextv1beta1.Custo...
type CRDVersions (line 184) | type CRDVersions
method Len (line 186) | func (vs CRDVersions) Len() int { return len(vs) }
method Less (line 187) | func (vs CRDVersions) Less(i, j int) bool {
method Swap (line 190) | func (vs CRDVersions) Swap(i, j int) { vs[i], vs[j] = vs[j], vs[i] }
function Convertv1beta1Tov1CustomResourceDefinition (line 192) | func Convertv1beta1Tov1CustomResourceDefinition(in *apiextv1beta1.Custom...
FILE: internal/util/k8sutil/api_test.go
function TestSortVersions (line 25) | func TestSortVersions(t *testing.T) {
function stringsToCRDVersions (line 60) | func stringsToCRDVersions(vs []string) (cvs CRDVersions) {
function crdVersionsToStrings (line 69) | func crdVersionsToStrings(cvs []apiextv1beta1.CustomResourceDefinitionVe...
FILE: internal/util/k8sutil/constants.go
constant KubeConfigEnvVar (line 20) | KubeConfigEnvVar = "KUBECONFIG"
constant WatchNamespaceEnvVar (line 25) | WatchNamespaceEnvVar = "WATCH_NAMESPACE"
FILE: internal/util/k8sutil/k8sutil.go
function GetDisplayName (line 41) | func GetDisplayName(name string) string {
function GetTypeMetaFromBytes (line 75) | func GetTypeMetaFromBytes(b []byte) (t metav1.TypeMeta, err error) {
function FormatOperatorNameDNS1123 (line 97) | func FormatOperatorNameDNS1123(name string) string {
function TrimDNS1123Label (line 110) | func TrimDNS1123Label(label string) string {
function SupportsOwnerReference (line 126) | func SupportsOwnerReference(restMapper meta.RESTMapper, owner, dependent...
FILE: internal/util/k8sutil/k8sutil_test.go
function TestGetDisplayName (line 27) | func TestGetDisplayName(t *testing.T) {
function TestSupportsOwnerReference (line 54) | func TestSupportsOwnerReference(t *testing.T) {
function TestTrimDNS1123Label (line 295) | func TestTrimDNS1123Label(t *testing.T) {
function TestFormatOperatorNameDNS1123 (line 326) | func TestFormatOperatorNameDNS1123(t *testing.T) {
FILE: internal/util/k8sutil/object.go
type MarshalFunc (line 21) | type MarshalFunc
function GetObjectBytes (line 25) | func GetObjectBytes(obj any, m MarshalFunc) ([]byte, error) {
function deleteKeyFromUnstructured (line 37) | func deleteKeyFromUnstructured(u map[string]any, key string) {
FILE: internal/util/k8sutil/scan.go
constant maxExecutiveEmpties (line 25) | maxExecutiveEmpties = 100
type Scanner (line 29) | type Scanner struct
method Err (line 41) | func (s *Scanner) Err() error {
method Scan (line 48) | func (s *Scanner) Scan() bool {
method Text (line 80) | func (s *Scanner) Text() string {
method Bytes (line 84) | func (s *Scanner) Bytes() []byte {
function NewYAMLScanner (line 37) | func NewYAMLScanner(r io.Reader) *Scanner {
FILE: internal/util/projutil/interactive_promt_util.go
type InteractiveLevel (line 28) | type InteractiveLevel
constant InteractiveSoftOff (line 32) | InteractiveSoftOff InteractiveLevel = iota
constant InteractiveHardOff (line 34) | InteractiveHardOff
constant InteractiveOnAll (line 36) | InteractiveOnAll
function printMessage (line 39) | func printMessage(msg string, isOptional bool) {
function GetRequiredInput (line 48) | func GetRequiredInput(msg string) string {
function getRequiredInput (line 52) | func getRequiredInput(rd io.Reader, msg string) string {
function GetOptionalInput (line 65) | func GetOptionalInput(msg string) string {
function GetStringArray (line 71) | func GetStringArray(msg string) []string {
function getStringArray (line 75) | func getStringArray(rd io.Reader, msg string) []string {
function readLine (line 88) | func readLine(reader *bufio.Reader) string {
function readInput (line 96) | func readInput(reader *bufio.Reader) string {
function readArray (line 105) | func readArray(reader *bufio.Reader) []string {
FILE: internal/util/projutil/interactive_promt_util_test.go
function TestUserInput (line 23) | func TestUserInput(t *testing.T) {
function TestUserInputStringArray (line 68) | func TestUserInputStringArray(t *testing.T) {
FILE: internal/util/projutil/project_util.go
constant DirMode (line 33) | DirMode = 0755
constant FileMode (line 34) | FileMode = 0644
constant ExecFileMode (line 35) | ExecFileMode = 0755
constant GoFlagsEnv (line 40) | GoFlagsEnv = "GOFLAGS"
constant configFile (line 44) | configFile = "PROJECT"
constant OperatorTypeGo (line 51) | OperatorTypeGo OperatorType = "go"
constant OperatorTypeAnsible (line 53) | OperatorTypeAnsible OperatorType = "ansible"
constant OperatorTypeHelm (line 55) | OperatorTypeHelm OperatorType = "helm"
constant OperatorTypeUnknown (line 57) | OperatorTypeUnknown OperatorType = "unknown"
type ErrUnknownOperatorType (line 60) | type ErrUnknownOperatorType struct
method Error (line 64) | func (e ErrUnknownOperatorType) Error() string {
function HasProjectFile (line 73) | func HasProjectFile() bool {
function ReadConfig (line 86) | func ReadConfig() (config.Config, error) {
function PluginChainToOperatorType (line 97) | func PluginChainToOperatorType(pluginKeys []string) OperatorType {
function GetProjectLayout (line 112) | func GetProjectLayout(cfg config.Config) string {
function SetGoVerbose (line 120) | func SetGoVerbose() error {
function RewriteFileContents (line 133) | func RewriteFileContents(filename, target, newContent string) error {
function appendContent (line 152) | func appendContent(fileContents, target, newContent string) (string, err...
FILE: internal/util/projutil/projutil_test.go
function TestMetadata (line 95) | func TestMetadata(t *testing.T) {
FILE: internal/validate/external.go
function GetExternalValidatorEntrypoints (line 36) | func GetExternalValidatorEntrypoints(entrypoints string) ([]string, bool) {
function RunExternalValidators (line 47) | func RunExternalValidators(ctx context.Context, entrypoints []string, bu...
FILE: internal/validate/result.go
constant JSONAlpha1Output (line 32) | JSONAlpha1Output = "json-alpha1"
constant TextOutput (line 33) | TextOutput = "text"
type Result (line 37) | type Result struct
method AddManifestResults (line 54) | func (r *Result) AddManifestResults(results ...apierrors.ManifestResul...
method AddInfo (line 66) | func (r *Result) AddInfo(msg string) {
method AddError (line 74) | func (r *Result) AddError(err error) {
method AddWarn (line 93) | func (r *Result) AddWarn(err error) {
method Combine (line 108) | func (r *Result) Combine(results ...Result) error {
method prepare (line 117) | func (r *Result) prepare() error {
method PrintWithFormat (line 135) | func (r *Result) PrintWithFormat(format string) (failed bool, err erro...
method printWithFormat (line 139) | func (r *Result) printWithFormat(w io.Writer, format string) (failed b...
method printText (line 163) | func (r *Result) printText(logger *logrus.Entry) error {
method printJSON (line 185) | func (r *Result) printJSON(w io.Writer) error {
type Output (line 43) | type Output struct
function NewResult (line 49) | func NewResult() *Result {
function Combine (line 101) | func Combine(results ...Result) (r Result, err error) {
function newLoggerTo (line 194) | func newLoggerTo(w io.Writer) *logrus.Logger {
FILE: internal/validate/suite_test.go
function TestResult (line 24) | func TestResult(t *testing.T) {
FILE: release/changelog/gen-changelog.go
constant repo (line 15) | repo = "github.com/operator-framework/operator-sdk"
function main (line 17) | func main() {
FILE: release/changelog/internal/changelog.go
type Changelog (line 14) | type Changelog struct
method Template (line 68) | func (c *Changelog) Template() ([]byte, error) {
method WriteFile (line 76) | func (c *Changelog) WriteFile(path string) error {
type ChangelogEntry (line 25) | type ChangelogEntry struct
constant changelogTemplate (line 30) | changelogTemplate = `## {{ .Version }}
function ChangelogFromEntries (line 94) | func ChangelogFromEntries(version semver.Version, entries []FragmentEntr...
method toChangelogEntry (line 116) | func (e *FragmentEntry) toChangelogEntry() ChangelogEntry {
FILE: release/changelog/internal/changelog_test.go
function getChangelogEntries (line 12) | func getChangelogEntries(n int) []ChangelogEntry {
function TestChangelog_Template (line 23) | func TestChangelog_Template(t *testing.T) {
function TestChangelog_WriteFile (line 295) | func TestChangelog_WriteFile(t *testing.T) {
function TestChangelog_ChangelogFromEntries (line 455) | func TestChangelog_ChangelogFromEntries(t *testing.T) {
FILE: release/changelog/internal/fragment.go
type Fragment (line 17) | type Fragment struct
method Validate (line 21) | func (f *Fragment) Validate() error {
type FragmentEntry (line 30) | type FragmentEntry struct
method Validate (line 40) | func (e *FragmentEntry) Validate() error {
method pullRequestLink (line 65) | func (e FragmentEntry) pullRequestLink(repo string) string {
type EntryKind (line 72) | type EntryKind
method Validate (line 82) | func (k EntryKind) Validate() error {
constant Addition (line 75) | Addition EntryKind = "addition"
constant Change (line 76) | Change EntryKind = "change"
constant Removal (line 77) | Removal EntryKind = "removal"
constant Deprecation (line 78) | Deprecation EntryKind = "deprecation"
constant Bugfix (line 79) | Bugfix EntryKind = "bugfix"
type EntryMigration (line 91) | type EntryMigration struct
method Validate (line 96) | func (m EntryMigration) Validate() error {
function LoadEntries (line 106) | func LoadEntries(fragmentsDir, repo string) ([]FragmentEntry, error) {
type PullRequestNumberGetter (line 164) | type PullRequestNumberGetter interface
type gitPullRequestNumberGetter (line 168) | type gitPullRequestNumberGetter struct
method GetPullRequestNumberFor (line 170) | func (g *gitPullRequestNumberGetter) GetPullRequestNumberFor(filename ...
method getCommitMessage (line 178) | func (g *gitPullRequestNumberGetter) getCommitMessage(filename string)...
method parsePRNumber (line 189) | func (g *gitPullRequestNumberGetter) parsePRNumber(msg string) (uint, ...
FILE: release/changelog/internal/fragment_test.go
type mockValidPRGetter (line 11) | type mockValidPRGetter struct
method GetPullRequestNumberFor (line 15) | func (m *mockValidPRGetter) GetPullRequestNumberFor(_ string) (uint, e...
function TestFragment_LoadEntries (line 19) | func TestFragment_LoadEntries(t *testing.T) {
function TestFragmentEntry_Validate (line 142) | func TestFragmentEntry_Validate(t *testing.T) {
function TestFragmentEntry_PullRequestLink (line 286) | func TestFragmentEntry_PullRequestLink(t *testing.T) {
function TestGitPullRequestNumberGetter_parsePRNumber (line 320) | func TestGitPullRequestNumberGetter_parsePRNumber(t *testing.T) {
function Test_gitPullRequestNumberGetter_getCommitMessage (line 374) | func Test_gitPullRequestNumberGetter_getCommitMessage(t *testing.T) {
FILE: release/changelog/internal/migration_guide.go
type MigrationGuide (line 13) | type MigrationGuide struct
method Template (line 41) | func (mg *MigrationGuide) Template() ([]byte, error) {
method WriteFile (line 49) | func (mg *MigrationGuide) WriteFile(path string) error {
type Migration (line 19) | type Migration struct
constant migrationGuideTemplate (line 25) | migrationGuideTemplate = `---
function MigrationGuideFromEntries (line 57) | func MigrationGuideFromEntries(version semver.Version, entries []Fragmen...
function versionToWeight (line 75) | func versionToWeight(v semver.Version) uint64 {
FILE: release/changelog/internal/migration_guide_test.go
function TestMigrationGuide_Template (line 11) | func TestMigrationGuide_Template(t *testing.T) {
function TestMigrationGuide_WriteFile (line 110) | func TestMigrationGuide_WriteFile(t *testing.T) {
function TestMigrationGuide_MigrationGuideFromEntries (line 167) | func TestMigrationGuide_MigrationGuideFromEntries(t *testing.T) {
FILE: test/common/sa_secret.go
function GetSASecret (line 33) | func GetSASecret(name string, dir string) (string, error) {
FILE: test/common/scorecard.go
function ScorecardSpec (line 31) | func ScorecardSpec(tc *testutils.TestContext, operatorType string) func() {
FILE: test/e2e/go/suite_test.go
function TestE2EGo (line 29) | func TestE2EGo(t *testing.T) {
FILE: test/e2e/helm/suite_test.go
function TestE2EHelm (line 31) | func TestE2EHelm(t *testing.T) {
FILE: test/integration/suite_test.go
function TestIntegration (line 36) | func TestIntegration(t *testing.T) {
constant targetMetricsCertFragment (line 127) | targetMetricsCertFragment = `- path: cert_metrics_manager_patch.yaml
function warn (line 145) | func warn(output string, err error) {
function runPackageManifests (line 151) | func runPackageManifests(tc *testutils.TestContext, args ...string) error {
function cleanup (line 160) | func cleanup(tc *testutils.TestContext) (string, error) {
function readCSV (line 169) | func readCSV(tc *testutils.TestContext, version string, isBundle bool) (...
function writeCSV (line 181) | func writeCSV(tc *testutils.TestContext, version string, csv *v1alpha1.C...
function csvPath (line 199) | func csvPath(tc *testutils.TestContext, version string, isBundle bool) s...
FILE: testdata/go/v4/memcached-operator/api/v1alpha1/memcached_types.go
type MemcachedSpec (line 27) | type MemcachedSpec struct
type MemcachedStatus (line 47) | type MemcachedStatus struct
type Memcached (line 67) | type Memcached struct
type MemcachedList (line 78) | type MemcachedList struct
function init (line 84) | func init() {
FILE: testdata/go/v4/memcached-operator/api/v1alpha1/zz_generated.deepcopy.go
method DeepCopyInto (line 29) | func (in *Memcached) DeepCopyInto(out *Memcached) {
method DeepCopy (line 38) | func (in *Memcached) DeepCopy() *Memcached {
method DeepCopyObject (line 48) | func (in *Memcached) DeepCopyObject() runtime.Object {
method DeepCopyInto (line 56) | func (in *MemcachedList) DeepCopyInto(out *MemcachedList) {
method DeepCopy (line 70) | func (in *MemcachedList) DeepCopy() *MemcachedList {
method DeepCopyObject (line 80) | func (in *MemcachedList) DeepCopyObject() runtime.Object {
method DeepCopyInto (line 88) | func (in *MemcachedSpec) DeepCopyInto(out *MemcachedSpec) {
method DeepCopy (line 93) | func (in *MemcachedSpec) DeepCopy() *MemcachedSpec {
method DeepCopyInto (line 103) | func (in *MemcachedStatus) DeepCopyInto(out *MemcachedStatus) {
method DeepCopy (line 115) | func (in *MemcachedStatus) DeepCopy() *MemcachedStatus {
FILE: testdata/go/v4/memcached-operator/cmd/main.go
function init (line 51) | func init() {
function main (line 59) | func main() {
FILE: testdata/go/v4/memcached-operator/internal/controller/memcached_controller.go
constant memcachedFinalizer (line 43) | memcachedFinalizer = "cache.example.com/finalizer"
constant typeAvailableMemcached (line 48) | typeAvailableMemcached = "Available"
constant typeDegradedMemcached (line 50) | typeDegradedMemcached = "Degraded"
type MemcachedReconciler (line 54) | type MemcachedReconciler struct
method Reconcile (line 82) | func (r *MemcachedReconciler) Reconcile(ctx context.Context, req ctrl....
method doFinalizerOperationsForMemcached (line 289) | func (r *MemcachedReconciler) doFinalizerOperationsForMemcached(cr *ca...
method deploymentForMemcached (line 309) | func (r *MemcachedReconciler) deploymentForMemcached(
method SetupWithManager (line 452) | func (r *MemcachedReconciler) SetupWithManager(mgr ctrl.Manager) error {
function labelsForMemcached (line 419) | func labelsForMemcached() map[string]string {
function imageForMemcached (line 434) | func imageForMemcached() (string, error) {
FILE: testdata/go/v4/memcached-operator/internal/controller/suite_test.go
function TestControllers (line 50) | func TestControllers(t *testing.T) {
function getFirstFoundEnvTestBinaryDir (line 103) | func getFirstFoundEnvTestBinaryDir() string {
FILE: testdata/go/v4/memcached-operator/internal/webhook/v1alpha1/memcached_webhook.go
function SetupMemcachedWebhookWithManager (line 36) | func SetupMemcachedWebhookWithManager(mgr ctrl.Manager) error {
type MemcachedCustomDefaulter (line 51) | type MemcachedCustomDefaulter struct
method Default (line 58) | func (d *MemcachedCustomDefaulter) Default(_ context.Context, obj runt...
FILE: testdata/go/v4/memcached-operator/internal/webhook/v1alpha1/webhook_suite_test.go
function TestAPIs (line 57) | func TestAPIs(t *testing.T) {
function getFirstFoundEnvTestBinaryDir (line 151) | func getFirstFoundEnvTestBinaryDir() string {
FILE: testdata/go/v4/memcached-operator/test/e2e/e2e_suite_test.go
function TestE2E (line 28) | func TestE2E(t *testing.T) {
FILE: testdata/go/v4/memcached-operator/test/e2e/e2e_test.go
constant namespace (line 38) | namespace = "memcached-operator-system"
FILE: testdata/go/v4/memcached-operator/test/utils/utils.go
constant prometheusOperatorVersion (line 30) | prometheusOperatorVersion = "0.51"
constant prometheusOperatorURL (line 31) | prometheusOperatorURL = "https://raw.githubusercontent.com/prometheu...
constant certmanagerVersion (line 34) | certmanagerVersion = "v1.5.3"
constant certmanagerURLTmpl (line 35) | certmanagerURLTmpl = "https://github.com/jetstack/cert-manager/releases/...
function warnError (line 38) | func warnError(err error) {
function InstallPrometheusOperator (line 43) | func InstallPrometheusOperator() error {
function Run (line 51) | func Run(cmd *exec.Cmd) ([]byte, error) {
function UninstallPrometheusOperator (line 74) | func UninstallPrometheusOperator() {
function UninstallCertManager (line 83) | func UninstallCertManager() {
function InstallCertManager (line 92) | func InstallCertManager() error {
function LoadImageToKindClusterWithName (line 111) | func LoadImageToKindClusterWithName(name string) error {
function GetNonEmptyLines (line 124) | func GetNonEmptyLines(output string) []string {
function GetProjectDir (line 137) | func GetProjectDir() (string, error) {
function ReplaceInFile (line 147) | func ReplaceInFile(path, old, new string) error {
FILE: testdata/go/v4/monitoring/memcached-operator/api/v1alpha1/memcached_types.go
type MemcachedSpec (line 27) | type MemcachedSpec struct
type MemcachedStatus (line 47) | type MemcachedStatus struct
type Memcached (line 67) | type Memcached struct
type MemcachedList (line 78) | type MemcachedList struct
function init (line 84) | func init() {
FILE: testdata/go/v4/monitoring/memcached-operator/api/v1alpha1/zz_generated.deepcopy.go
method DeepCopyInto (line 29) | func (in *Memcached) DeepCopyInto(out *Memcached) {
method DeepCopy (line 38) | func (in *Memcached) DeepCopy() *Memcached {
method DeepCopyObject (line 48) | func (in *Memcached) DeepCopyObject() runtime.Object {
method DeepCopyInto (line 56) | func (in *MemcachedList) DeepCopyInto(out *MemcachedList) {
method DeepCopy (line 70) | func (in *MemcachedList) DeepCopy() *MemcachedList {
method DeepCopyObject (line 80) | func (in *MemcachedList) DeepCopyObject() runtime.Object {
method DeepCopyInto (line 88) | func (in *MemcachedSpec) DeepCopyInto(out *MemcachedSpec) {
method DeepCopy (line 93) | func (in *MemcachedSpec) DeepCopy() *MemcachedSpec {
method DeepCopyInto (line 103) | func (in *MemcachedStatus) DeepCopyInto(out *MemcachedStatus) {
method DeepCopy (line 115) | func (in *MemcachedStatus) DeepCopy() *MemcachedStatus {
FILE: testdata/go/v4/monitoring/memcached-operator/cmd/main.go
function init (line 56) | func init() {
function main (line 68) | func main() {
FILE: testdata/go/v4/monitoring/memcached-operator/internal/controller/memcached_controller.go
constant memcachedFinalizer (line 47) | memcachedFinalizer = "cache.example.com/finalizer"
constant ruleName (line 48) | ruleName = "memcached-operator-rules"
constant namespace (line 49) | namespace = "memcached-operator-system"
constant typeAvailableMemcached (line 54) | typeAvailableMemcached = "Available"
constant typeDegradedMemcached (line 56) | typeDegradedMemcached = "Degraded"
type MemcachedReconciler (line 60) | type MemcachedReconciler struct
method Reconcile (line 89) | func (r *MemcachedReconciler) Reconcile(ctx context.Context, req ctrl....
method doFinalizerOperationsForMemcached (line 322) | func (r *MemcachedReconciler) doFinalizerOperationsForMemcached(cr *ca...
method deploymentForMemcached (line 342) | func (r *MemcachedReconciler) deploymentForMemcached(
method SetupWithManager (line 485) | func (r *MemcachedReconciler) SetupWithManager(mgr ctrl.Manager) error {
function labelsForMemcached (line 452) | func labelsForMemcached() map[string]string {
function imageForMemcached (line 467) | func imageForMemcached() (string, error) {
FILE: testdata/go/v4/monitoring/memcached-operator/internal/controller/suite_test.go
function TestControllers (line 50) | func TestControllers(t *testing.T) {
function getFirstFoundEnvTestBinaryDir (line 103) | func getFirstFoundEnvTestBinaryDir() string {
FILE: testdata/go/v4/monitoring/memcached-operator/internal/webhook/v1alpha1/memcached_webhook.go
function SetupMemcachedWebhookWithManager (line 36) | func SetupMemcachedWebhookWithManager(mgr ctrl.Manager) error {
type MemcachedCustomDefaulter (line 51) | type MemcachedCustomDefaulter struct
method Default (line 58) | func (d *MemcachedCustomDefaulter) Default(_ context.Context, obj runt...
FILE: testdata/go/v4/monitoring/memcached-operator/internal/webhook/v1alpha1/webhook_suite_test.go
function TestAPIs (line 57) | func TestAPIs(t *testing.T) {
function getFirstFoundEnvTestBinaryDir (line 151) | func getFirstFoundEnvTestBinaryDir() string {
FILE: testdata/go/v4/monitoring/memcached-operator/monitoring/alerts.go
constant ruleName (line 26) | ruleName = "memcached-operator-rules"
constant alertRuleGroup (line 27) | alertRuleGroup = "memcached.rules"
constant deploymentSizeUndesiredAlert (line 28) | deploymentSizeUndesiredAlert = "MemcachedDeploymentSizeUndesired"
constant operatorDownAlert (line 29) | operatorDownAlert = "MemcachedOperatorDown"
constant operatorUpTotalRecordingRule (line 30) | operatorUpTotalRecordingRule = "memcached_operator_up_total"
constant runbookURLBasePath (line 31) | runbookURLBasePath = "https://github.com/operator-framework/op...
function NewPrometheusRule (line 35) | func NewPrometheusRule(namespace string) *monitoringv1.PrometheusRule {
function NewPrometheusRuleSpec (line 50) | func NewPrometheusRuleSpec() *monitoringv1.PrometheusRuleSpec {
function createDeploymentSizeUndesiredAlertRule (line 64) | func createDeploymentSizeUndesiredAlertRule() monitoringv1.Rule {
function createOperatorDownAlertRule (line 79) | func createOperatorDownAlertRule() monitoringv1.Rule {
function createOperatorUpTotalRecordingRule (line 95) | func createOperatorUpTotalRecordingRule() monitoringv1.Rule {
FILE: testdata/go/v4/monitoring/memcached-operator/monitoring/metrics.go
type MetricDescription (line 26) | type MetricDescription struct
function RegisterMetrics (line 54) | func RegisterMetrics() {
function ListMetrics (line 59) | func ListMetrics() []MetricDescription {
FILE: testdata/go/v4/monitoring/memcached-operator/monitoring/metricsdocs/metricsdocs.go
function main (line 28) | func main() {
FILE: testdata/go/v4/monitoring/memcached-operator/monitoring/prom-rule-ci/rule-spec-dumper.go
function verifyArgs (line 28) | func verifyArgs(args []string) error {
function main (line 36) | func main() {
FILE: testdata/go/v4/monitoring/memcached-operator/test/e2e/e2e_suite_test.go
function TestE2E (line 28) | func TestE2E(t *testing.T) {
FILE: testdata/go/v4/monitoring/memcached-operator/test/e2e/e2e_test.go
constant namespace (line 43) | namespace = "memcached-operator-sys...
constant memcachedDeploymentSizeUndesiredCountTotalName (line 44) | memcachedDeploymentSizeUndesiredCountTotalName = "memcached_deployment_s...
constant tokenRequestRawString (line 45) | tokenRequestRawString = "{\"apiVersion\": \"aut...
type tokenRequest (line 50) | type tokenRequest struct
function getMetricValue (line 246) | func getMetricValue(metricName string) int {
function curlMetrics (line 259) | func curlMetrics() string {
function serviceAccountToken (line 314) | func serviceAccountToken() (out string, err error) {
function parseMetricValue (line 348) | func parseMetricValue(metricsEndpoint string, metricName string) string {
function scaleMemcachedSampleDeployment (line 362) | func scaleMemcachedSampleDeployment(numberOfScales int) {
constant monitoringImportFragment (line 372) | monitoringImportFragment = "\"github.com/example/memcached-operator/moni...
constant incMemcachedDeploymentSizeUndesiredCountTotalFragment (line 374) | incMemcachedDeploymentSizeUndesiredCountTotalFragment = "monitoring.Memc...
constant registerMetricsFragment (line 376) | registerMetricsFragment = "monitoring.RegisterMetrics()"
FILE: testdata/go/v4/monitoring/memcached-operator/test/utils/utils.go
constant prometheusOperatorVersion (line 30) | prometheusOperatorVersion = "0.51"
constant prometheusOperatorURL (line 31) | prometheusOperatorURL = "https://raw.githubusercontent.com/prometheu...
constant certmanagerVersion (line 34) | certmanagerVersion = "v1.5.3"
constant certmanagerURLTmpl (line 35) | certmanagerURLTmpl = "https://github.com/jetstack/cert-manager/releases/...
function warnError (line 38) | func warnError(err error) {
function InstallPrometheusOperator (line 43) | func InstallPrometheusOperator() error {
function Run (line 51) | func Run(cmd *exec.Cmd) ([]byte, error) {
function UninstallPrometheusOperator (line 74) | func UninstallPrometheusOperator() {
function UninstallCertManager (line 83) | func UninstallCertManager() {
function InstallCertManager (line 92) | func InstallCertManager() error {
function LoadImageToKindClusterWithName (line 111) | func LoadImageToKindClusterWithName(name string) error {
function GetNonEmptyLines (line 124) | func GetNonEmptyLines(output string) []string {
function GetProjectDir (line 137) | func GetProjectDir() (string, error) {
function ReplaceInFile (line 147) | func ReplaceInFile(path, old, new string) error {
Condensed preview — 941 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,146K chars).
[
{
"path": ".ci/gpg/README.md",
"chars": 3840,
"preview": "# SDK GPG Keys\n\n## Current *key*pers\n\nThe keys are currently in the hands of [Joe Lanford](https://github.com/joelanford"
},
{
"path": ".ci/gpg/create-keyring.sh",
"chars": 1300,
"preview": "#!/bin/bash\n\nDIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" >/dev/null 2>&1 && pwd)\"\n\n# Modified from https://blogs.itemis.c"
},
{
"path": ".ci/gpg/pubring.auto",
"chars": 6295,
"preview": "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmQINBF+clTQBEADMHVz8qS+dcYC0qxlSNe4Yipbr/BtVuWGJay26OAbS4K7sjzs3\nXP+RhjUsJGOnPXn+N"
},
{
"path": ".cncf-maintainers",
"chars": 258,
"preview": "approvers:\n- OchiengEd\n- acornett21\n- anik120\n- camilamacedo86\n- grokspawn\n- jberkhahn\n- joelanford\n- oceanc80\n- rashmig"
},
{
"path": ".github/ISSUE_TEMPLATE/bug-report.md",
"chars": 1697,
"preview": "---\nname: Bug Report\nabout: If things aren't working as expected.\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n## Bug Report"
},
{
"path": ".github/ISSUE_TEMPLATE/doc-report.md",
"chars": 870,
"preview": "---\nname: Doc Report\nabout: Raise an issue with the documentation.\ntitle: ''\nlabels: kind/documentation\nassignees: ''\n\n-"
},
{
"path": ".github/ISSUE_TEMPLATE/feature-request.md",
"chars": 774,
"preview": "---\nname: Feature Request\nabout: Suggest a feature\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n## Feature Request\n\n#### Des"
},
{
"path": ".github/ISSUE_TEMPLATE/support-question.md",
"chars": 1902,
"preview": "---\nname: Support Question\nabout: Any support questions you might have.\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n<!--\nTh"
},
{
"path": ".github/ISSUE_TEMPLATE.md",
"chars": 418,
"preview": "<!---\nThanks for filing an issue! Before you submit, please read the following:\n\nCheck the other issue templates if you "
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 1271,
"preview": "<!--\n\nWelcome to the Operator SDK! Before contributing, make sure to:\n\n- Read the contributing guidelines https://github"
},
{
"path": ".github/dependabot.yml",
"chars": 659,
"preview": "version: 2\nupdates:\n - package-ecosystem: docker\n directory: \"/images/custom-scorecard-tests\"\n schedule:\n in"
},
{
"path": ".github/workflows/check-docs-only.sh",
"chars": 492,
"preview": "#!/usr/bin/env bash\n\nset -e\n\n# If running in Github actions: this should be set to \"github.base_ref\".\n: ${1?\"the first a"
},
{
"path": ".github/workflows/clean-unused-disk-space.sh",
"chars": 275,
"preview": "#!/usr/bin/env bash\n\nset -e\n\necho \"Removing unused system files to gain more disk space\"\nrm -fr /opt/hostedtoolcache\ncd "
},
{
"path": ".github/workflows/deploy.yml",
"chars": 5362,
"preview": "name: deploy\n\non:\n push:\n branches:\n - '**'\n - '!dependabot/**'\n tags:\n - 'v*'\n - 'scorecard-kuttl/v*"
},
{
"path": ".github/workflows/freshen-images/build.sh",
"chars": 2099,
"preview": "#!/usr/bin/env bash\n\nDIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" >/dev/null 2>&1 && pwd)\"\n\nsource ${DIR}/lib.sh\n\nset -eu\n"
},
{
"path": ".github/workflows/freshen-images/lib.sh",
"chars": 2775,
"preview": "#!/usr/bin/env bash\n\n# _buildx runs \"docker buildx build\" in CI-output mode.\nfunction _buildx() {\n echo -e \"\\n$ docker "
},
{
"path": ".github/workflows/freshen-images/tags.sh",
"chars": 576,
"preview": "#!/usr/bin/env bash\n\nset -eu\nset -o pipefail\n\n# Major version to select (default 1).\nMAJ=${1:-1}\n# Number of minor versi"
},
{
"path": ".github/workflows/freshen-images.yml",
"chars": 1505,
"preview": "name: freshen-images\n\non:\n workflow_dispatch:\n inputs:\n force:\n description: Force rebuild of all images"
},
{
"path": ".github/workflows/get_image_tags.sh",
"chars": 1112,
"preview": "#!/usr/bin/env bash\n\nIMG=\"$1\"\nTAG_PREFIX=\"$2\"\n\n: ${IMG:?\"\\$1 must be set to an image tag\"}\n: ${TAG_PREFIX:?\"\\$2 must be "
},
{
"path": ".github/workflows/integration.yml",
"chars": 1156,
"preview": "name: integration\non:\n pull_request: {}\n\njobs:\n check_docs_only:\n name: check_docs_only\n runs-on: ubuntu-24.04\n "
},
{
"path": ".github/workflows/markdown-link-check-config.json",
"chars": 363,
"preview": "{\n \"ignorePatterns\": [\n { \"pattern\": \"^https://github.com/.+\" },\n { \"pattern\": \"^mailto:\" }\n ],\n\n "
},
{
"path": ".github/workflows/olm-check.yml",
"chars": 301,
"preview": "name: olm-check\n\non:\n pull_request:\n branches:\n - 'release-*'\n workflow_dispatch:\n \n\njobs:\n check-olm-minor-rele"
},
{
"path": ".github/workflows/rerun.yml",
"chars": 336,
"preview": "on:\n issue_comment:\n types: [created]\n\njobs:\n rerun_tests:\n name: rerun_pr_tests\n if: ${{ github.event.issue."
},
{
"path": ".github/workflows/test-go.yml",
"chars": 1762,
"preview": "name: go\non:\n pull_request: {}\n\nenv:\n MEMCACHED_IMAGE: \"memcached:1.4.36-alpine\"\n\njobs:\n check_docs_only:\n name: c"
},
{
"path": ".github/workflows/test-helm.yml",
"chars": 1177,
"preview": "name: helm\non:\n pull_request: {}\n\njobs:\n check_docs_only:\n name: check_docs_only\n runs-on: ubuntu-24.04\n outp"
},
{
"path": ".github/workflows/test-sample-go.yml",
"chars": 1194,
"preview": "name: memcached-sample\non:\n pull_request: {}\n\njobs:\n check_docs_only:\n name: check_docs_only\n runs-on: ubuntu-24"
},
{
"path": ".github/workflows/test-sanity.yml",
"chars": 1511,
"preview": "name: sanity\non:\n pull_request: {}\n\njobs:\n check_docs_only:\n name: check_docs_only\n runs-on: ubuntu-24.04\n ou"
},
{
"path": ".gitignore",
"chars": 1980,
"preview": "# Folders\n.idea\n\n# Build artifacts\n/build\n/dist\n**/bin/\n\n# Test artifacts\n**/testbin/\n\n# CI GPG keyring\n/.ci/gpg/keyring"
},
{
"path": ".gitmodules",
"chars": 109,
"preview": "[submodule \"website/themes/docsy\"]\n\tpath = website/themes/docsy\n\turl = https://github.com/asmacdo/docsy.git\n\n"
},
{
"path": ".golangci.yml",
"chars": 797,
"preview": "version: \"2\"\nlinters:\n enable:\n - dupl\n - ginkgolinter\n - goconst\n - gocyclo\n - gosec\n - misspell\n "
},
{
"path": ".goreleaser.yml",
"chars": 2640,
"preview": "# Global environment variables for builds.\nenv:\n - CGO_ENABLED=0\n - GO111MODULE=on\n - GOPROXY=https://proxy.golang.or"
},
{
"path": "CONTRIBUTING.MD",
"chars": 3258,
"preview": "# How to contribute\n\nOperator SDK is Apache 2.0 licensed and accepts contributions via GitHub pull requests. This docume"
},
{
"path": "LICENSE",
"chars": 11357,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "Makefile",
"chars": 8263,
"preview": "SHELL = /bin/bash\n\n# IMAGE_VERSION represents the helm-operator, and scorecard subproject versions.\n# This value must be"
},
{
"path": "OWNERS",
"chars": 96,
"preview": "approvers:\n- sdk-admins\n- sdk-approvers\nreviewers:\n- sdk-admins\n- sdk-approvers\n- sdk-reviewers\n"
},
{
"path": "OWNERS_ALIASES",
"chars": 857,
"preview": "\n# See the OWNERS docs: https://git.k8s.io/community/contributors/guide/owners.md\n\naliases:\n # Contributors who can be "
},
{
"path": "README.md",
"chars": 4066,
"preview": "<img src=\"website/static/operator_logo_sdk_color.svg\" height=\"125px\"></img>\n\n> ⚠️ **IMPORTANT NOTICE:** Images under `gc"
},
{
"path": "SECURITY.md",
"chars": 348,
"preview": "# Security Policy\n\n## Supported Versions\n\nOperator SDK makes a constant stream of releases. In general, this means that "
},
{
"path": "changelog/fragments/00-template.yaml",
"chars": 1693,
"preview": "# entries is a list of entries to include in\n# release notes and/or the migration guide\nentries:\n - description: >\n "
},
{
"path": "changelog/generated/v1.10.0.md",
"chars": 1267,
"preview": "## v1.10.0\n\n### Additions\n\n- Provide XML formatting option for scorecard users. Additionally transforms scorecard result"
},
{
"path": "changelog/generated/v1.11.0.md",
"chars": 2164,
"preview": "## v1.11.0\n\n### Additions\n\n- (go/v3, ansible/v1, helm/v1) Added `containerPort` protocol field required for server-side "
},
{
"path": "changelog/generated/v1.12.0.md",
"chars": 468,
"preview": "## v1.12.0\n\n### Additions\n\n- If an optional UniqueID is provided by a user in the scorecard config and the user generate"
},
{
"path": "changelog/generated/v1.13.0.md",
"chars": 1224,
"preview": "## v1.13.0\n\n### Additions\n\n- Added new optional validator `alpha-deprecated-apis` for the command bundle validate to hel"
},
{
"path": "changelog/generated/v1.14.0.md",
"chars": 2426,
"preview": "## v1.14.0\n\n### Additions\n\n- Added new flag options `--storage-image` and `--untar-image` to the Scorecard command to al"
},
{
"path": "changelog/generated/v1.15.0.md",
"chars": 424,
"preview": "## v1.15.0\n\n### Changes\n\n- Bumped community.kubernetes to kubernetes.core >= 2.2.0. Added the kubernetes.core collection"
},
{
"path": "changelog/generated/v1.16.0.md",
"chars": 3862,
"preview": "## v1.16.0\n\n### Additions\n\n- For Ansible-based operators, add default resource limits for the manager. ([#5274](https://"
},
{
"path": "changelog/generated/v1.17.0.md",
"chars": 1359,
"preview": "## v1.17.0\n\n### Additions\n\n- Now operator-sdk bundle validate also ensures that the `alm-examples` annotation has a vali"
},
{
"path": "changelog/generated/v1.18.0.md",
"chars": 2737,
"preview": "## v1.18.0\n\n### Additions\n\n- Add bundle size validator check for the command `operator-sdk bundle validate` check if the"
},
{
"path": "changelog/generated/v1.19.0.md",
"chars": 2011,
"preview": "## v1.19.0\n\n### Additions\n\n- Add official binary builds for `darwin/arm64`. ([#5581](https://github.com/operator-framewo"
},
{
"path": "changelog/generated/v1.20.0.md",
"chars": 2271,
"preview": "## v1.20.0\n\n### Additions\n\n- New check to warning authors when the CRD description is empty was added to the Good Practi"
},
{
"path": "changelog/generated/v1.21.0.md",
"chars": 3986,
"preview": "## v1.21.0\n\n### Additions\n\n- (declarative/v1): For Golang-based operators, copy the channels directory in the Dockerfile"
},
{
"path": "changelog/generated/v1.22.0.md",
"chars": 8526,
"preview": "## v1.22.0\n\n### Additions\n\n- For Go (go/v3) and Hybrid Helm (hybrid.helm/v1-alpha) language based operators: Add support"
},
{
"path": "changelog/generated/v1.23.0.md",
"chars": 6430,
"preview": "## v1.23.0\n\n### Additions\n\n- (Alpha) New optional validator to help verify if a bundle matches criteria for multiple arc"
},
{
"path": "changelog/generated/v1.24.0.md",
"chars": 1646,
"preview": "## v1.24.0\n\n### Changes\n\n- Bumping java-operator-plugins to v0.6.0. ([#6007](https://github.com/operator-framework/opera"
},
{
"path": "changelog/generated/v1.25.0.md",
"chars": 4213,
"preview": "## v1.25.0\n\n### Changes\n\n- (ansible/v1): Modified ansible scaffolding in order to incorporate changes with Kubebuilder "
},
{
"path": "changelog/generated/v1.26.0.md",
"chars": 1073,
"preview": "## v1.26.0\n\n### Additions\n\n- For `operator-sdk bundle validate`: When checking for Kubernetes APIs deprecated in Kuberne"
},
{
"path": "changelog/generated/v1.27.0.md",
"chars": 2232,
"preview": "## v1.27.0\n\n### Changes\n\n- `operator-sdk run bundle(-upgrade)`: Change default of the `--security-context-config` flag t"
},
{
"path": "changelog/generated/v1.28.0.md",
"chars": 1326,
"preview": "## v1.28.0\n\n### Changes\n\n- (ansible): Revert the cryptography package unpinning and repin to v3.3.2. ([#6348](https://gi"
},
{
"path": "changelog/generated/v1.29.0.md",
"chars": 942,
"preview": "## v1.29.0\n\n### Changes\n\n- (scorecard): Update kuttl to v0.15.0 in the scorecard-test-kuttl image. ([#6401](https://gith"
},
{
"path": "changelog/generated/v1.3.0.md",
"chars": 3556,
"preview": "## v1.3.0\n\n### Additions\n\n- Added OLM bindata for the 0.17.0 release version. ([#4242](https://github.com/operator-frame"
},
{
"path": "changelog/generated/v1.30.0.md",
"chars": 3222,
"preview": "## v1.30.0\n\n### Additions\n\n- Add a Parameter to the Makefile to allow modifying the 'operator-sdk' binary before running"
},
{
"path": "changelog/generated/v1.31.0.md",
"chars": 2165,
"preview": "## v1.31.0\n\n### Changes\n\n- (ansible): Update the `quay.io/operator-framework/ansible-operator` base image to now use Ans"
},
{
"path": "changelog/generated/v1.32.0.md",
"chars": 816,
"preview": "## v1.32.0\n\n### Additions\n\n- For Helm-based operators, whenever the operator encounters an error during reconcilliation"
},
{
"path": "changelog/generated/v1.33.0.md",
"chars": 1319,
"preview": "## v1.33.0\n\n### Changes\n\n- Bump supported Kubernetes version to 1.27. ([#6613](https://github.com/operator-framework/ope"
},
{
"path": "changelog/generated/v1.34.0.md",
"chars": 190,
"preview": "## v1.34.0\n\n### Bug Fixes\n\n- (helm/v1) Fix an issue that multi-arch images cannot be built from the project Makefile. (["
},
{
"path": "changelog/generated/v1.35.0.md",
"chars": 414,
"preview": "## v1.35.0\n\n### Changes\n\n- For Ansible-based operators, upgrade the version of the Ansible Operator Plugin used in opera"
},
{
"path": "changelog/generated/v1.36.0.md",
"chars": 156,
"preview": "## v1.36.0\n\n### Changes\n\n- - Upgrade Kubernetes dependencies from `1.28` to `1.29`. ([#6736](https://github.com/operator"
},
{
"path": "changelog/generated/v1.37.0.md",
"chars": 396,
"preview": "## v1.37.0\n\n### Removals\n\n- **Breaking change**: Remove the Quarkus plugin (java-operator-plugins integration). ([#6824]"
},
{
"path": "changelog/generated/v1.38.0.md",
"chars": 2732,
"preview": "## v1.38.0\n\n### Changes\n\n- For Go-based, Helm-based and Ansible-based operators this release moves to Kubernetes 1.30 AP"
},
{
"path": "changelog/generated/v1.39.0.md",
"chars": 576,
"preview": "## v1.39.0\n\n### Changes\n\n- For Go-based, Helm-based and Ansible-based operators this release moves to Kubernetes 1.31 AP"
},
{
"path": "changelog/generated/v1.39.1.md",
"chars": 41,
"preview": "## v1.39.1\n\nNo changes for this release!\n"
},
{
"path": "changelog/generated/v1.39.2.md",
"chars": 41,
"preview": "## v1.39.2\n\nNo changes for this release!\n"
},
{
"path": "changelog/generated/v1.4.0.md",
"chars": 4669,
"preview": "## v1.4.0\n\n### Additions\n\n- For Helm-based operators, added Liveness and Readiness probe by default using [`healthz.Ping"
},
{
"path": "changelog/generated/v1.40.0.md",
"chars": 9508,
"preview": "## v1.40.0\n\n### Additions\n\n- (go/v4) For Go-based operators, a devcontainer is now available to allow users to develop a"
},
{
"path": "changelog/generated/v1.41.0.md",
"chars": 972,
"preview": "## v1.41.0\n\n### Additions\n\n- For Go-based operators, add new target to setup/teardown Kind cluster for E2E tests and re"
},
{
"path": "changelog/generated/v1.42.0.md",
"chars": 41,
"preview": "## v1.42.0\n\nNo changes for this release!\n"
},
{
"path": "changelog/generated/v1.42.1.md",
"chars": 41,
"preview": "## v1.42.1\n\nNo changes for this release!\n"
},
{
"path": "changelog/generated/v1.42.2.md",
"chars": 41,
"preview": "## v1.42.2\n\nNo changes for this release!\n"
},
{
"path": "changelog/generated/v1.5.0.md",
"chars": 5096,
"preview": "## v1.5.0\n\n### Additions\n\n- Added support for markers for files with the `yml` extension. More info: [kubernetes-sigs/ku"
},
{
"path": "changelog/generated/v1.6.0.md",
"chars": 7038,
"preview": "## v1.6.0\n\n### Additions\n\n- For Golang-based operators, added the `declarative.go/v1` plugin which customizes initialize"
},
{
"path": "changelog/generated/v1.6.1.md",
"chars": 7037,
"preview": "## v1.6.1\n\n### Additions\n\n- For Golang-based operators, added the `declarative.go/v1` plugin which customizes initialize"
},
{
"path": "changelog/generated/v1.7.0.md",
"chars": 2139,
"preview": "## v1.7.0\n\n### Additions\n\n- Added `operator-sdk pkgman-to-bundle` command to support migration of packagemanifests to bu"
},
{
"path": "changelog/generated/v1.7.1.md",
"chars": 2596,
"preview": "## v1.7.1\n\n### Additions\n\n- Added `operator-sdk pkgman-to-bundle` command to support migration of packagemanifests to bu"
},
{
"path": "changelog/generated/v1.8.0.md",
"chars": 3216,
"preview": "## v1.8.0\n\n### Additions\n\n- Added new bundle validator to check the bundle against the Community Operator criteria. For "
},
{
"path": "changelog/generated/v1.9.0.md",
"chars": 574,
"preview": "## v1.9.0\n\n### Changes\n\n- **Breaking change**: For Ansible operators, if an API endpoint has path component in it then t"
},
{
"path": "cmd/helm-operator/main.go",
"chars": 1311,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "cmd/operator-sdk/main.go",
"chars": 1001,
"preview": "// Copyright 2019 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "code-of-conduct.md",
"chars": 2977,
"preview": "## Red Hat Community Code of Conduct\n\n### Contributor Code of Conduct\n\nAs contributors and maintainers of this project, "
},
{
"path": "config/crd/bases/_.yaml",
"chars": 340,
"preview": "\n---\napiVersion: apiextensions.k8s.io/v1beta1\nkind: CustomResourceDefinition\nmetadata:\n annotations:\n controller-gen"
},
{
"path": "go.mod",
"chars": 14951,
"preview": "module github.com/operator-framework/operator-sdk\n\ngo 1.25.7\n\nrequire (\n\tgithub.com/blang/semver/v4 v4.0.0\n\tgithub.com/f"
},
{
"path": "go.sum",
"chars": 82565,
"preview": "cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4=\ncel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ"
},
{
"path": "hack/check-error-log-msg-format.sh",
"chars": 974,
"preview": "#!/bin/bash\n\nset -o nounset\nset -o pipefail\n\nsource \"hack/lib/common.sh\"\n\necho \"Checking format of error and log message"
},
{
"path": "hack/check-license.sh",
"chars": 457,
"preview": "#!/bin/bash\n\nset -o errexit\nset -o nounset\nset -o pipefail\n\nsource \"hack/lib/common.sh\"\n\necho \"Checking for license head"
},
{
"path": "hack/check-links.sh",
"chars": 912,
"preview": "#!/usr/bin/env bash\n\nset -e\n\nsource ./hack/lib/common.sh\n\nheader_text \"Building the website\"\ndocker volume create sdk-ht"
},
{
"path": "hack/check-olm.sh",
"chars": 2754,
"preview": "#!/bin/bash\n\nFAILED=\"false\"\n\n# Get list of unique release versions sorted highest to lowest\nRELEASES=($(curl https://api"
},
{
"path": "hack/generate/cli-doc/gen-cli-doc.go",
"chars": 2972,
"preview": "// Copyright 2019 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "hack/generate/cncf-maintainers/main.go",
"chars": 1274,
"preview": "package main\n\nimport (\n\t\"log\"\n\t\"os\"\n\n\t\"k8s.io/utils/set\"\n\t\"sigs.k8s.io/yaml\"\n)\n\ntype ownersMap map[string][]string\ntype "
},
{
"path": "hack/generate/migrate-markers.sh",
"chars": 2643,
"preview": "#!/usr/bin/env bash\n\n# Migrate old CSV annotations to new markers.\n# Example:\n# $ ./migrate-markers.sh *.go\n\nOLD_MARKER_"
},
{
"path": "hack/generate/olm_bindata.sh",
"chars": 1428,
"preview": "#!/usr/bin/env bash\n\nbase_version=0.16.1\n\nfunction version_gt() {\n test \"$(printf '%s\\n' \"$@\" | sort -V | head -n 1)\""
},
{
"path": "hack/generate/samples/generate_testdata.go",
"chars": 1930,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "hack/generate/samples/internal/go/generate.go",
"chars": 1284,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "hack/generate/samples/internal/go/memcached-with-customization/e2e_test_code.go",
"chars": 30429,
"preview": "package v3\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\n\tlog \"github.com/sirupsen/logrus\"\n\tkbutil \"sigs.k8s.io/kubebuilder/v4/pkg/p"
},
{
"path": "hack/generate/samples/internal/go/memcached-with-customization/memcached_with_customization.go",
"chars": 45002,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "hack/generate/samples/internal/helm/generate.go",
"chars": 778,
"preview": "// Copyright 2021 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "hack/generate/samples/internal/helm/memcached.go",
"chars": 6321,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "hack/generate/samples/internal/pkg/context.go",
"chars": 1090,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "hack/generate/samples/internal/pkg/utils.go",
"chars": 2799,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "hack/lib/common.sh",
"chars": 1850,
"preview": "#!/usr/bin/env bash\n\n# Turn colors in this script off by setting the NO_COLOR variable in your\n# environment to any valu"
},
{
"path": "hack/tests/subcommand-olm-install.sh",
"chars": 1516,
"preview": "#!/usr/bin/env bash\n\nset -ex\n\n\ntest_version() {\n local version=\"$1\"\n # If version is \"latest\", run without --versi"
},
{
"path": "images/custom-scorecard-tests/Dockerfile",
"chars": 939,
"preview": "# Build the custom-scorecard-tests binary\nFROM --platform=$BUILDPLATFORM golang:1.25 AS builder\nARG TARGETARCH\n\nWORKDIR "
},
{
"path": "images/custom-scorecard-tests/main.go",
"chars": 3843,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "images/helm-operator/Dockerfile",
"chars": 891,
"preview": "# Build the manager binary\nFROM --platform=$BUILDPLATFORM golang:1.25 AS builder\nARG TARGETARCH\n\nWORKDIR /workspace\n# Co"
},
{
"path": "images/operator-sdk/Dockerfile",
"chars": 872,
"preview": "# Build the operator-sdk binary\nFROM --platform=$BUILDPLATFORM golang:1.25 AS builder\nARG TARGETARCH\n\nWORKDIR /workspace"
},
{
"path": "images/scorecard-storage/Dockerfile",
"chars": 282,
"preview": "FROM docker.io/busybox:1.36\n\n## Create a new non-root user to run as\nENV HOME=/opt/scorecard-untar \\\n USER_NAME=score"
},
{
"path": "images/scorecard-test/Dockerfile",
"chars": 883,
"preview": "# Build the scorecard-test binary\nFROM --platform=$BUILDPLATFORM golang:1.25 AS builder\nARG TARGETARCH\n\nWORKDIR /workspa"
},
{
"path": "images/scorecard-test/main.go",
"chars": 3423,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "images/scorecard-test-kuttl/Dockerfile",
"chars": 1211,
"preview": "# Build the scorecard-test-kuttl binary\nFROM --platform=$BUILDPLATFORM golang:1.25 AS builder\nARG TARGETARCH\nARG BUILDPL"
},
{
"path": "images/scorecard-test-kuttl/entrypoint",
"chars": 923,
"preview": "#!/bin/sh\n\nKUTTL_PATH=${KUTTL_PATH:-\"/bundle/tests/scorecard/kuttl\"}\nKUTTL_CONFIG=${KUTTL_CONFIG:-\"${KUTTL_PATH}/kuttl-t"
},
{
"path": "images/scorecard-test-kuttl/main.go",
"chars": 6840,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "images/scorecard-untar/Dockerfile",
"chars": 299,
"preview": "FROM registry.access.redhat.com/ubi9/ubi:9.7\n\n## Create a new non-root user to run as\nENV HOME=/opt/scorecard-untar \\\n "
},
{
"path": "internal/annotations/metrics/metrics.go",
"chars": 2612,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/annotations/metrics/metrics_suite_test.go",
"chars": 794,
"preview": "// Copyright 2021 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/annotations/metrics/metrics_test.go",
"chars": 1421,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/annotations/scorecard/scorecard.go",
"chars": 1676,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/bindata/olm/manifests.go",
"chars": 1189264,
"preview": "// Code generated for package olm by go-bindata DO NOT EDIT. (@generated)\n// sources:\n// olm-manifests/0.26.0-crds.yaml\n"
},
{
"path": "internal/bindata/olm/versions.go",
"chars": 878,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/helm-operator/run/cmd.go",
"chars": 9588,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/helm-operator/version/cmd.go",
"chars": 1267,
"preview": "// Copyright 2019 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/helm-operator/version/cmd_test.go",
"chars": 2019,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/helm-operator/version/version_suite_test.go",
"chars": 803,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/alpha/config3alphato3/cmd.go",
"chars": 2892,
"preview": "// Copyright 2021 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/alpha/config3alphato3/convert_config_3-alpha_to_3.go",
"chars": 7388,
"preview": "// Copyright 2021 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/alpha/config3alphato3/convert_config_3-alpha_to_3_test.go",
"chars": 6108,
"preview": "// Copyright 2021 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/alpha/config3alphato3/suite_test.go",
"chars": 804,
"preview": "// Copyright 2021 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/bundle/bundle_suite_test.go",
"chars": 800,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/bundle/cmd.go",
"chars": 1411,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/bundle/cmd_test.go",
"chars": 1037,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/bundle/validate/cmd.go",
"chars": 7501,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/bundle/validate/cmd_suite_test.go",
"chars": 797,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/bundle/validate/internal/logger.go",
"chars": 831,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/bundle/validate/optional.go",
"chars": 6540,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/bundle/validate/optional_test.go",
"chars": 3136,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/bundle/validate/validate.go",
"chars": 9819,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/bundle/validate/validate_test.go",
"chars": 3091,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/cleanup/cmd.go",
"chars": 1966,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/cli/cli.go",
"chars": 5456,
"preview": "// Copyright 2019 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/cli/cli_suite_test.go",
"chars": 786,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/cli/version.go",
"chars": 976,
"preview": "// Copyright 2019 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/cli/version_test.go",
"chars": 1516,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/generate/bundle/bundle.go",
"chars": 11670,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/generate/bundle/cmd.go",
"chars": 5514,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/generate/cmd.go",
"chars": 1360,
"preview": "// Copyright 2018 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/generate/internal/genutil.go",
"chars": 5861,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/generate/internal/genutil_suite_test.go",
"chars": 796,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/generate/internal/manifests.go",
"chars": 2371,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/generate/internal/manifests_test.go",
"chars": 2156,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/generate/internal/relatedimages.go",
"chars": 5187,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/generate/internal/relatedimages_test.go",
"chars": 7468,
"preview": "// Copyright 2022 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/generate/kustomize/cmd.go",
"chars": 940,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/generate/kustomize/manifests.go",
"chars": 8717,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/generate/packagemanifests/cmd.go",
"chars": 4287,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/generate/packagemanifests/cmd_test.go",
"chars": 2628,
"preview": "// Copyright 2021 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/generate/packagemanifests/packagemanifests.go",
"chars": 8075,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/generate/packagemanifests/packagemanifests_suite_test.go",
"chars": 821,
"preview": "// Copyright 2021 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/generate/packagemanifests/packagemanifests_test.go",
"chars": 8305,
"preview": "// Copyright 2021 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/generate/packagemanifests/testdata/PROJECT",
"chars": 351,
"preview": "domain: example.com\nlayout: go.kubebuilder.io/v3-alpha\nprojectName: memcached-operator\nrepo: github.com/example/memcache"
},
{
"path": "internal/cmd/operator-sdk/olm/cmd.go",
"chars": 898,
"preview": "// Copyright 2019 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/olm/cmd_test.go",
"chars": 1193,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/olm/install.go",
"chars": 1282,
"preview": "// Copyright 2019 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/olm/install_test.go",
"chars": 1201,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/olm/olm_suite_test.go",
"chars": 791,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/olm/status.go",
"chars": 1454,
"preview": "// Copyright 2019 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/olm/status_test.go",
"chars": 1357,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/olm/uninstall.go",
"chars": 1392,
"preview": "// Copyright 2019 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/olm/uninstall_test.go",
"chars": 1365,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/pkgmantobundle/cmd.go",
"chars": 12247,
"preview": "// Copyright 2021 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/pkgmantobundle/cmd_test.go",
"chars": 1236,
"preview": "// Copyright 2021 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/pkgmantobundle/pkgmantobundle_suite_test.go",
"chars": 827,
"preview": "// Copyright 2021 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/pkgmantobundle/pkgmantobundle_test.go",
"chars": 7644,
"preview": "// Copyright 2021 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/pkgmantobundle/testdata/packagemanifests/0.0.1/cache.example.com_memcacheds.yaml",
"chars": 1889,
"preview": "apiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n annotations:\n controller-gen.kubebuild"
},
{
"path": "internal/cmd/operator-sdk/pkgmantobundle/testdata/packagemanifests/0.0.1/memcached-operator-controller-manager-metrics-service_v1_service.yaml",
"chars": 320,
"preview": "apiVersion: v1\nkind: Service\nmetadata:\n creationTimestamp: null\n labels:\n control-plane: controller-manager\n name:"
},
{
"path": "internal/cmd/operator-sdk/pkgmantobundle/testdata/packagemanifests/0.0.1/memcached-operator-controller-manager_v1_serviceaccount.yaml",
"chars": 118,
"preview": "apiVersion: v1\nkind: ServiceAccount\nmetadata:\n creationTimestamp: null\n name: memcached-operator-controller-manager\n"
},
{
"path": "internal/cmd/operator-sdk/pkgmantobundle/testdata/packagemanifests/0.0.1/memcached-operator-manager-config_v1_configmap.yaml",
"chars": 425,
"preview": "apiVersion: v1\ndata:\n controller_manager_config.yaml: |\n apiVersion: controller-runtime.sigs.k8s.io/v1alpha1\n kin"
},
{
"path": "internal/cmd/operator-sdk/pkgmantobundle/testdata/packagemanifests/0.0.1/memcached-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml",
"chars": 193,
"preview": "apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n creationTimestamp: null\n name: memcached-operato"
},
{
"path": "internal/cmd/operator-sdk/pkgmantobundle/testdata/packagemanifests/0.0.1/memcached-operator.clusterserviceversion.yaml",
"chars": 4835,
"preview": "apiVersion: operators.coreos.com/v1alpha1\nkind: ClusterServiceVersion\nmetadata:\n annotations:\n alm-examples: |-\n "
},
{
"path": "internal/cmd/operator-sdk/pkgmantobundle/testdata/packagemanifests/0.0.1/scorecard-config.yaml",
"chars": 1290,
"preview": "apiVersion: scorecard.operatorframework.io/v1alpha3\nkind: Configuration\nmetadata:\n name: config\nstages:\n- parallel: tru"
},
{
"path": "internal/cmd/operator-sdk/pkgmantobundle/testdata/packagemanifests/0.0.2/cache.example.com_memcacheds.yaml",
"chars": 1889,
"preview": "apiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n annotations:\n controller-gen.kubebuild"
},
{
"path": "internal/cmd/operator-sdk/pkgmantobundle/testdata/packagemanifests/0.0.2/memcached-operator-controller-manager-metrics-service_v1_service.yaml",
"chars": 320,
"preview": "apiVersion: v1\nkind: Service\nmetadata:\n creationTimestamp: null\n labels:\n control-plane: controller-manager\n name:"
},
{
"path": "internal/cmd/operator-sdk/pkgmantobundle/testdata/packagemanifests/0.0.2/memcached-operator-controller-manager_v1_serviceaccount.yaml",
"chars": 118,
"preview": "apiVersion: v1\nkind: ServiceAccount\nmetadata:\n creationTimestamp: null\n name: memcached-operator-controller-manager\n"
},
{
"path": "internal/cmd/operator-sdk/pkgmantobundle/testdata/packagemanifests/0.0.2/memcached-operator-manager-config_v1_configmap.yaml",
"chars": 425,
"preview": "apiVersion: v1\ndata:\n controller_manager_config.yaml: |\n apiVersion: controller-runtime.sigs.k8s.io/v1alpha1\n kin"
},
{
"path": "internal/cmd/operator-sdk/pkgmantobundle/testdata/packagemanifests/0.0.2/memcached-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml",
"chars": 193,
"preview": "apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n creationTimestamp: null\n name: memcached-operato"
},
{
"path": "internal/cmd/operator-sdk/pkgmantobundle/testdata/packagemanifests/0.0.2/memcached-operator.clusterserviceversion.yaml",
"chars": 4835,
"preview": "apiVersion: operators.coreos.com/v1alpha1\nkind: ClusterServiceVersion\nmetadata:\n annotations:\n alm-examples: |-\n "
},
{
"path": "internal/cmd/operator-sdk/pkgmantobundle/testdata/packagemanifests/memcached-operator.package.yaml",
"chars": 212,
"preview": "channels:\n- currentCSV: memcached-operator.v0.0.1\n name: memcached-operator.v0.0.1\n- currentCSV: memcached-operator.v0."
},
{
"path": "internal/cmd/operator-sdk/run/bundle/cmd.go",
"chars": 2732,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/run/bundleupgrade/cmd.go",
"chars": 1987,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/run/cmd.go",
"chars": 1355,
"preview": "// Copyright 2019 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/run/cmd_test.go",
"chars": 1299,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/run/packagemanifests/packagemanifests.go",
"chars": 2441,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/run/packagemanifests/packagemanifests_suite_test.go",
"chars": 817,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
},
{
"path": "internal/cmd/operator-sdk/run/packagemanifests/packagemanifests_test.go",
"chars": 1208,
"preview": "// Copyright 2020 The Operator-SDK Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you "
}
]
// ... and 741 more files (download for full content)
About this extraction
This page contains the full source code of the operator-framework/operator-sdk GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 941 files (4.4 MB), approximately 1.2M tokens, and a symbol index with 1631 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.