diff --git a/Makefile b/Makefile index 165c8f0ef0..a24b66f26c 100644 --- a/Makefile +++ b/Makefile @@ -259,21 +259,14 @@ E2E_TIMEOUT ?= 10m e2e: #EXHELP Run the e2e tests. go test -count=1 -v ./test/e2e/features_test.go -timeout=$(E2E_TIMEOUT) -E2E_REGISTRY_NAME := docker-registry -E2E_REGISTRY_NAMESPACE := operator-controller-e2e - -export REG_PKG_NAME := registry-operator -export CLUSTER_REGISTRY_HOST := $(E2E_REGISTRY_NAME).$(E2E_REGISTRY_NAMESPACE).svc:5000 -export LOCAL_REGISTRY_HOST := localhost:30000 -export E2E_TEST_CATALOG_V1 := e2e/test-catalog:v1 -export E2E_TEST_CATALOG_V2 := e2e/test-catalog:v2 -export CATALOG_IMG := $(CLUSTER_REGISTRY_HOST)/$(E2E_TEST_CATALOG_V1) +export CLUSTER_REGISTRY_HOST := docker-registry.operator-controller-e2e.svc:5000 .PHONY: extension-developer-e2e -extension-developer-e2e: $(OPERATOR_SDK) $(KUSTOMIZE) #EXHELP Run extension create, upgrade and delete tests. - test/extension-developer-e2e/setup.sh $(OPERATOR_SDK) $(CONTAINER_RUNTIME) $(KUSTOMIZE) ${LOCAL_REGISTRY_HOST} ${CLUSTER_REGISTRY_HOST} +extension-developer-e2e: export OPERATOR_SDK := $(OPERATOR_SDK) +extension-developer-e2e: export CONTAINER_RUNTIME := $(CONTAINER_RUNTIME) +extension-developer-e2e: $(OPERATOR_SDK) #EXHELP Run extension create, upgrade and delete tests. go test -count=1 -v ./test/extension-developer-e2e/... -UNIT_TEST_DIRS := $(shell go list ./... | grep -vE "/test/|/testutils") +UNIT_TEST_DIRS := $(shell go list ./... | grep -vE "/test/|/testutils") $(shell go list ./test/internal/...) COVERAGE_UNIT_DIR := $(ROOT_DIR)/coverage/unit .PHONY: envtest-k8s-bins #HELP Uses setup-envtest to download and install the binaries required to run ENVTEST-test based locally at the project/bin directory. @@ -298,18 +291,6 @@ test-regression: #HELP Run regression test rm -rf $(COVERAGE_REGRESSION_DIR) && mkdir -p $(COVERAGE_REGRESSION_DIR) go test -count=1 -v ./test/regression/... -cover -coverprofile ${ROOT_DIR}/coverage/regression.out -test.gocoverdir=$(COVERAGE_REGRESSION_DIR) -.PHONY: image-registry -E2E_REGISTRY_IMAGE=localhost/e2e-test-registry:devel -image-registry: export GOOS=linux -image-registry: export GOARCH=amd64 -image-registry: ## Build the testdata catalog used for e2e tests and push it to the image registry - # Use double quotes (not single quotes) for build flags like -ldflags, -tags, etc. - # Single quotes are passed literally and not stripped by `go build`, which can cause errors - # or inject unintended characters into the binary (e.g., version metadata). - go build $(GO_BUILD_FLAGS) $(GO_BUILD_EXTRA_FLAGS) -tags '$(GO_BUILD_TAGS)' -ldflags "$(GO_BUILD_LDFLAGS)" -gcflags '$(GO_BUILD_GCFLAGS)' -asmflags '$(GO_BUILD_ASMFLAGS)' -o ./testdata/push/bin/push ./testdata/push/push.go - $(CONTAINER_RUNTIME) build -f ./testdata/Dockerfile -t $(E2E_REGISTRY_IMAGE) ./testdata - $(KIND) load docker-image $(E2E_REGISTRY_IMAGE) --name $(KIND_CLUSTER_NAME) - ./testdata/build-test-registry.sh $(E2E_REGISTRY_NAMESPACE) $(E2E_REGISTRY_NAME) $(E2E_REGISTRY_IMAGE) # When running the e2e suite, you can set the ARTIFACT_PATH variable to the absolute path # of the directory for the operator-controller e2e tests to store the artifacts, which @@ -323,7 +304,7 @@ test-e2e: GO_BUILD_EXTRA_FLAGS := -cover test-e2e: COVERAGE_NAME := e2e test-e2e: export MANIFEST := $(STANDARD_RELEASE_MANIFEST) test-e2e: export INSTALL_DEFAULT_CATALOGS := false -test-e2e: run-internal image-registry prometheus e2e e2e-coverage kind-clean #HELP Run e2e test suite on local kind cluster +test-e2e: run-internal prometheus e2e e2e-coverage kind-clean #HELP Run e2e test suite on local kind cluster .PHONY: test-experimental-e2e test-experimental-e2e: SOURCE_MANIFEST := $(EXPERIMENTAL_E2E_MANIFEST) @@ -335,7 +316,7 @@ test-experimental-e2e: export MANIFEST := $(EXPERIMENTAL_RELEASE_MANIFEST) test-experimental-e2e: export INSTALL_DEFAULT_CATALOGS := false test-experimental-e2e: PROMETHEUS_VALUES := helm/prom_experimental.yaml test-experimental-e2e: E2E_TIMEOUT := 15m -test-experimental-e2e: run-internal image-registry prometheus e2e e2e-coverage kind-clean #HELP Run experimental e2e test suite on local kind cluster +test-experimental-e2e: run-internal prometheus e2e e2e-coverage kind-clean #HELP Run experimental e2e test suite on local kind cluster .PHONY: prometheus prometheus: PROMETHEUS_NAMESPACE := olmv1-system @@ -352,7 +333,7 @@ test-extension-developer-e2e: SOURCE_MANIFEST := $(STANDARD_E2E_MANIFEST) test-extension-developer-e2e: KIND_CLUSTER_NAME := operator-controller-ext-dev-e2e test-extension-developer-e2e: export INSTALL_DEFAULT_CATALOGS := false test-extension-developer-e2e: export MANIFEST := $(STANDARD_RELEASE_MANIFEST) -test-extension-developer-e2e: run-internal image-registry extension-developer-e2e kind-clean #HELP Run extension-developer e2e on local kind cluster +test-extension-developer-e2e: run-internal extension-developer-e2e kind-clean #HELP Run extension-developer e2e on local kind cluster .PHONY: run-latest-release run-latest-release: diff --git a/docs/superpowers/specs/2026-04-13-e2e-test-isolation-design.md b/docs/superpowers/specs/2026-04-13-e2e-test-isolation-design.md new file mode 100644 index 0000000000..b118c6cef2 --- /dev/null +++ b/docs/superpowers/specs/2026-04-13-e2e-test-isolation-design.md @@ -0,0 +1,118 @@ +# E2E Test Isolation: Per-Scenario Catalogs via Dynamic OCI Image Building + +## Problem + +E2E test scenarios previously shared cluster-scoped resources (ClusterCatalogs, CRDs, packages), +causing cascading failures when one scenario left state behind. Parallelism was impossible because +scenarios conflicted on shared resource names. + +## Solution + +Each scenario dynamically builds and pushes its own bundle and catalog OCI images at test time, +parameterized by scenario ID. All cluster-scoped resource names include the scenario ID, making +conflicts structurally impossible. + +``` +Scenario starts + -> Generate parameterized bundle manifests (CRD names, deployments, etc. include scenario ID) + -> Build + push bundle OCI images to e2e registry via go-containerregistry + -> Generate FBC catalog config referencing those bundle image refs + -> Build + push catalog OCI image to e2e registry + -> Create ClusterCatalog pointing at the catalog image + -> Run scenario steps + -> Cleanup all resources (including catalog) +``` + +### Key Properties + +- Every cluster-scoped resource name includes the scenario ID -- no conflicts by construction. +- Failed scenario state is preserved for debugging without affecting other scenarios. +- Parallelism (`Concurrency > 1`) is safe without further changes. +- Adding new scenarios requires zero coordination with existing ones. + +## Builder API (`test/e2e/catalog/`) + +Bundles are defined as components of a catalog. A single `Build()` call builds and pushes +all bundle images, generates the FBC, and pushes the catalog image: + +```go +cat := catalog.NewCatalog("test", scenarioID, + catalog.WithPackage("test", + catalog.Bundle("1.0.0", catalog.WithCRD(), catalog.WithDeployment(), catalog.WithConfigMap()), + catalog.Bundle("1.2.0", catalog.WithCRD(), catalog.WithDeployment()), + catalog.Channel("beta", catalog.Entry("1.0.0"), catalog.Entry("1.2.0")), + ), +) +result, err := cat.Build(ctx, "v1", localRegistry, clusterRegistry) +// result.CatalogName = "test-catalog-{scenarioID}" +// result.CatalogImageRef = "{clusterRegistry}/e2e/test-catalog-{scenarioID}:v1" +// result.PackageNames = {"test": "test-{scenarioID}"} +``` + +### Bundle Options + +- `WithCRD()` -- CRD with group `e2e-{id}.e2e.operatorframework.io` +- `WithDeployment()` -- Deployment named `test-operator-{id}` (includes CSV, script ConfigMap, NetworkPolicy) +- `WithConfigMap()` -- additional test ConfigMap +- `WithInstallMode(modes...)` -- sets supported install modes on the CSV +- `WithLargeCRD(fieldCount)` -- CRD with many fields for large bundle testing +- `WithClusterRegistry(host)` -- overrides the cluster-side registry host (for mirror testing) +- `StaticBundleDir(dir)` -- reads pre-built bundle manifests without parameterization (e.g. webhook-operator) +- `BadImage()` -- uses an invalid container image to trigger ImagePullBackOff +- `WithBundleProperty(type, value)` -- adds a property to bundle metadata + +## Feature File Conventions + +Feature files define catalogs inline via data tables: + +```gherkin +Background: + Given OLM is available + And an image registry is available + And a catalog "test" with packages: + | package | version | channel | replaces | contents | + | test | 1.0.0 | alpha | | CRD, Deployment, ConfigMap | + | test | 1.0.1 | alpha | 1.0.0 | CRD, Deployment, ConfigMap | + | test | 1.2.0 | beta | | CRD, Deployment | +``` + +### Variable Substitution + +Templates in feature file YAML use these variables: + +| Variable | Expansion | Example | +|----------|-----------|---------| +| `${NAME}` | ClusterExtension name | `ce-abc123` | +| `${TEST_NAMESPACE}` | Scenario namespace | `ns-abc123` | +| `${SCENARIO_ID}` | Unique scenario identifier | `abc123` | +| `${PACKAGE:}` | Parameterized package name | `test-abc123` | +| `${CATALOG:}` | ClusterCatalog resource name | `test-catalog-abc123` | +| `${COS_NAME}` | ClusterObjectSet name | `cos-abc123` | + +### Naming Conventions + +| Resource | Pattern | +|----------|---------| +| CRD group | `e2e-{id}.e2e.operatorframework.io` | +| Deployment | `test-operator-{id}` | +| Package name (FBC) | `{package}-{id}` | +| Bundle image | `{registry}/bundles/{package}-{id}:v{version}` | +| Catalog image | `{registry}/e2e/{name}-catalog-{id}:{tag}` | +| ClusterCatalog | `{name}-catalog-{id}` | +| Namespace | `ns-{id}` | +| ClusterExtension | `ce-{id}` | + +## Registry Access + +An in-cluster OCI registry (`test/internal/registry/`) stores bundle and catalog images. +The registry runs as a ClusterIP Service; there is no NodePort or kind `extraPortMappings`. + +The test runner reaches the registry via **Kubernetes port-forward** (SPDY through the API +server), which works regardless of the cluster's network topology. A `sync.OnceValues` in the +step definitions starts the port-forward once and returns the dynamically assigned +`localhost:` address used for all `crane.Push` / `crane.Tag` calls. + +In-cluster components (e.g. the catalog unpacker) pull images using the Service DNS name +(`docker-registry.operator-controller-e2e.svc.cluster.local:5000`), resolved by CoreDNS. +Containerd on the node is never involved because the registry only holds OCI artifacts +consumed by Go code, not container images for pods. diff --git a/go.mod b/go.mod index baf9072002..d7c741271c 100644 --- a/go.mod +++ b/go.mod @@ -90,6 +90,7 @@ require ( github.com/containerd/typeurl/v2 v2.2.3 // indirect github.com/containers/libtrust v0.0.0-20230121012942-c1716e8a8d01 // indirect github.com/containers/ocicrypt v1.2.1 // indirect + github.com/creack/pty v1.1.24 // indirect github.com/cucumber/gherkin/go/v26 v26.2.0 // indirect github.com/cucumber/messages/go/v21 v21.0.1 // indirect github.com/cyberphone/json-canonicalization v0.0.0-20241213102144-19d51d7fe467 // indirect @@ -141,6 +142,7 @@ require ( github.com/google/gnostic-models v0.7.1 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/mux v1.8.1 // indirect + github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect github.com/gosuri/uitable v0.0.4 // indirect github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 // indirect @@ -172,6 +174,7 @@ require ( github.com/mitchellh/go-wordwrap v1.0.1 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/moby/locker v1.0.1 // indirect + github.com/moby/spdystream v0.5.0 // indirect github.com/moby/sys/capability v0.4.0 // indirect github.com/moby/sys/mountinfo v0.7.2 // indirect github.com/moby/sys/sequential v0.6.0 // indirect @@ -182,6 +185,7 @@ require ( github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect github.com/nxadm/tail v1.4.11 // indirect github.com/onsi/gomega v1.39.1 // indirect github.com/opencontainers/runtime-spec v1.3.0 // indirect diff --git a/go.sum b/go.sum index f8afd52bfc..287607deb6 100644 --- a/go.sum +++ b/go.sum @@ -34,6 +34,8 @@ github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d h1:licZJFw2RwpH github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d/go.mod h1:asat636LX7Bqt5lYEZ27JNDcqxfjdBQuJ/MM4CN/Lzo= github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ= github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -87,8 +89,8 @@ github.com/coreos/go-systemd/v22 v22.6.0 h1:aGVa/v8B7hpb0TKl0MWoAavPDmHvobFe5R5z github.com/coreos/go-systemd/v22 v22.6.0/go.mod h1:iG+pp635Fo7ZmV/j14KUcmEyWF+0X7Lua8rrTWzYgWU= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= -github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= -github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s= +github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE= github.com/cucumber/gherkin/go/v26 v26.2.0 h1:EgIjePLWiPeslwIWmNQ3XHcypPsWAHoMCz/YEBKP4GI= github.com/cucumber/gherkin/go/v26 v26.2.0/go.mod h1:t2GAPnB8maCT4lkHL99BDCVNzCh1d7dBhCLt150Nr/0= github.com/cucumber/godog v0.15.1 h1:rb/6oHDdvVZKS66hrhpjFQFHjthFSrQBCOI1LwshNTI= @@ -274,6 +276,8 @@ github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyE github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= +github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 h1:JeSE6pjso5THxAzdVpqr6/geYxZytqFMBCOtn/ujyeo= +github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674/go.mod h1:r4w70xmWCQKmi1ONH4KIaBptdivuRPyosB9RmPlGEwA= github.com/gosuri/uitable v0.0.4 h1:IG2xLKRvErL3uhY6e1BylFzG+aJiwQviDDTfOKeKTpY= github.com/gosuri/uitable v0.0.4/go.mod h1:tKR86bXuXPZazfOTG1FIzvjIdXzd0mo4Vtn16vt0PJo= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= @@ -369,6 +373,8 @@ github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zx github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= +github.com/moby/spdystream v0.5.0 h1:7r0J1Si3QO/kjRitvSLVVFUjxMEb/YLj6S9FF62JBCU= +github.com/moby/spdystream v0.5.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI= github.com/moby/sys/capability v0.4.0 h1:4D4mI6KlNtWMCM1Z/K0i7RV1FkX+DBDHKVJpCndZoHk= github.com/moby/sys/capability v0.4.0/go.mod h1:4g9IK291rVkms3LKCDOoYlnV8xKwoDTpIrNEE35Wq0I= github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg= @@ -393,6 +399,8 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY= github.com/nxadm/tail v1.4.11/go.mod h1:OTaG3NK980DZzxbRq6lEuzgU+mug70nY11sMd4JXXHc= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= diff --git a/hack/kind-config/containerd/certs.d/docker-registry.operator-controller-e2e.svc.cluster.local:5000/hosts.toml b/hack/kind-config/containerd/certs.d/docker-registry.operator-controller-e2e.svc.cluster.local:5000/hosts.toml deleted file mode 100644 index b0a5eb47fc..0000000000 --- a/hack/kind-config/containerd/certs.d/docker-registry.operator-controller-e2e.svc.cluster.local:5000/hosts.toml +++ /dev/null @@ -1,3 +0,0 @@ -[host."https://localhost:30000"] - capabilities = ["pull", "resolve"] - skip_verify = true diff --git a/hack/kind-config/containerd/certs.d/go.mod b/hack/kind-config/containerd/certs.d/go.mod deleted file mode 100644 index 96849082fe..0000000000 --- a/hack/kind-config/containerd/certs.d/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module hack-cert.d - -go 1.25.7 - -// This file is present in the certs.d directory to ensure that -// certs.d/host:port directories are not included in the main go -// module. Go modules are not allowed to contain files with ':' -// in their name. diff --git a/internal/operator-controller/applier/boxcutter_test.go b/internal/operator-controller/applier/boxcutter_test.go index b1360cb47e..31cfc81557 100644 --- a/internal/operator-controller/applier/boxcutter_test.go +++ b/internal/operator-controller/applier/boxcutter_test.go @@ -37,14 +37,14 @@ import ( "github.com/operator-framework/operator-controller/internal/operator-controller/applier" "github.com/operator-framework/operator-controller/internal/operator-controller/authorization" "github.com/operator-framework/operator-controller/internal/operator-controller/labels" - "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/util/testing/bundlefs" - "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/util/testing/clusterserviceversion" + bundlecsv "github.com/operator-framework/operator-controller/internal/testing/bundle/csv" + bundlefs "github.com/operator-framework/operator-controller/internal/testing/bundle/fs" ) var ( dummyBundle = bundlefs.Builder(). WithPackageName("test-package"). - WithCSV(clusterserviceversion.Builder().WithName("test-csv").Build()). + WithCSV(bundlecsv.Builder().WithName("test-csv").Build()). Build() ) @@ -313,7 +313,7 @@ func Test_SimpleRevisionGenerator_GenerateRevision_BundleAnnotations(t *testing. WithPackageName("test-package"). WithBundleProperty("olm.bundle.property", "some-value"). WithBundleProperty("olm.another.bundle.property", "some-other-value"). - WithCSV(clusterserviceversion.Builder().WithName("test-csv").Build()). + WithCSV(bundlecsv.Builder().WithName("test-csv").Build()). Build() rev, err := b.GenerateRevision(t.Context(), bundleFS, ext, map[string]string{}, map[string]string{}) @@ -327,7 +327,7 @@ func Test_SimpleRevisionGenerator_GenerateRevision_BundleAnnotations(t *testing. t.Run("olm.properties should not be present if there are no bundle properties", func(t *testing.T) { bundleFS := bundlefs.Builder(). WithPackageName("test-package"). - WithCSV(clusterserviceversion.Builder().WithName("test-csv").Build()). + WithCSV(bundlecsv.Builder().WithName("test-csv").Build()). Build() rev, err := b.GenerateRevision(t.Context(), bundleFS, ext, map[string]string{}, map[string]string{}) @@ -342,7 +342,7 @@ func Test_SimpleRevisionGenerator_GenerateRevision_BundleAnnotations(t *testing. bundleFS := bundlefs.Builder(). WithPackageName("test-package"). WithBundleProperty("olm.bundle.property", "some-value"). - WithCSV(clusterserviceversion.Builder(). + WithCSV(bundlecsv.Builder(). WithName("test-csv"). WithAnnotations(map[string]string{ "some.csv.annotation": "some-other-value", diff --git a/internal/operator-controller/applier/provider_test.go b/internal/operator-controller/applier/provider_test.go index 5f6913f434..4369fccd26 100644 --- a/internal/operator-controller/applier/provider_test.go +++ b/internal/operator-controller/applier/provider_test.go @@ -22,8 +22,8 @@ import ( "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/render" "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/render/registryv1" . "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/util/testing" - "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/util/testing/bundlefs" - "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/util/testing/clusterserviceversion" + bundlecsv "github.com/operator-framework/operator-controller/internal/testing/bundle/csv" + bundlefs "github.com/operator-framework/operator-controller/internal/testing/bundle/fs" ) func Test_RegistryV1ManifestProvider_Integration(t *testing.T) { @@ -53,7 +53,7 @@ func Test_RegistryV1ManifestProvider_Integration(t *testing.T) { // The contents of the bundle are not important for this tesy, only that it be a valid bundle // to avoid errors in the deserialization process bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build()).Build() + WithCSV(bundlecsv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build()).Build() ext := &ocv1.ClusterExtension{ Spec: ocv1.ClusterExtensionSpec{ @@ -83,7 +83,7 @@ func Test_RegistryV1ManifestProvider_Integration(t *testing.T) { // The contents of the bundle are not important for this tesy, only that it be a valid bundle // to avoid errors in the deserialization process bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeSingleNamespace).Build()).Build() + WithCSV(bundlecsv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeSingleNamespace).Build()).Build() ext := &ocv1.ClusterExtension{ Spec: ocv1.ClusterExtensionSpec{ @@ -116,7 +116,7 @@ func Test_RegistryV1ManifestProvider_Integration(t *testing.T) { // Bundle with SingleNamespace install mode requiring watchNamespace config bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeSingleNamespace).Build()).Build() + WithCSV(bundlecsv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeSingleNamespace).Build()).Build() // ClusterExtension without required config ext := &ocv1.ClusterExtension{ @@ -138,7 +138,7 @@ func Test_RegistryV1ManifestProvider_Integration(t *testing.T) { BundleRenderer: registryv1.Renderer, } bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build()). + WithCSV(bundlecsv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build()). WithBundleResource("service.yaml", &corev1.Service{ TypeMeta: metav1.TypeMeta{ APIVersion: corev1.SchemeGroupVersion.String(), @@ -179,7 +179,7 @@ func Test_RegistryV1ManifestProvider_APIServiceSupport(t *testing.T) { provider := applier.RegistryV1ManifestProvider{} bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithOwnedAPIServiceDescriptions(v1alpha1.APIServiceDescription{Name: "test-apiservice"}).Build()).Build() + WithCSV(bundlecsv.Builder().WithOwnedAPIServiceDescriptions(v1alpha1.APIServiceDescription{Name: "test-apiservice"}).Build()).Build() ext := &ocv1.ClusterExtension{ Spec: ocv1.ClusterExtensionSpec{ @@ -200,7 +200,7 @@ func Test_RegistryV1ManifestProvider_WebhookSupport(t *testing.T) { } bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithWebhookDefinitions(v1alpha1.WebhookDescription{}).Build()).Build() + WithCSV(bundlecsv.Builder().WithWebhookDefinitions(v1alpha1.WebhookDescription{}).Build()).Build() ext := &ocv1.ClusterExtension{ Spec: ocv1.ClusterExtensionSpec{ @@ -220,7 +220,7 @@ func Test_RegistryV1ManifestProvider_WebhookSupport(t *testing.T) { } bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithWebhookDefinitions(v1alpha1.WebhookDescription{}).Build()).Build() + WithCSV(bundlecsv.Builder().WithWebhookDefinitions(v1alpha1.WebhookDescription{}).Build()).Build() ext := &ocv1.ClusterExtension{ Spec: ocv1.ClusterExtensionSpec{ @@ -241,7 +241,7 @@ func Test_RegistryV1ManifestProvider_WebhookSupport(t *testing.T) { bundleFS := bundlefs.Builder().WithPackageName("test"). WithCSV( - clusterserviceversion.Builder(). + bundlecsv.Builder(). WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces). WithWebhookDefinitions(v1alpha1.WebhookDescription{}).Build()). Build() @@ -264,7 +264,7 @@ func Test_RegistryV1ManifestProvider_SingleOwnNamespaceSupport(t *testing.T) { } bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeSingleNamespace).Build()).Build() + WithCSV(bundlecsv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeSingleNamespace).Build()).Build() _, err := provider.Get(bundleFS, &ocv1.ClusterExtension{ Spec: ocv1.ClusterExtensionSpec{ @@ -281,7 +281,7 @@ func Test_RegistryV1ManifestProvider_SingleOwnNamespaceSupport(t *testing.T) { } bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeSingleNamespace).Build()).Build() + WithCSV(bundlecsv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeSingleNamespace).Build()).Build() _, err := provider.Get(bundleFS, &ocv1.ClusterExtension{ Spec: ocv1.ClusterExtensionSpec{ @@ -303,7 +303,7 @@ func Test_RegistryV1ManifestProvider_SingleOwnNamespaceSupport(t *testing.T) { IsSingleOwnNamespaceEnabled: false, } bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeOwnNamespace).Build()).Build() + WithCSV(bundlecsv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeOwnNamespace).Build()).Build() _, err := provider.Get(bundleFS, &ocv1.ClusterExtension{ Spec: ocv1.ClusterExtensionSpec{ Namespace: "install-namespace", @@ -329,7 +329,7 @@ func Test_RegistryV1ManifestProvider_SingleOwnNamespaceSupport(t *testing.T) { } bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeSingleNamespace).Build()).Build() + WithCSV(bundlecsv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeSingleNamespace).Build()).Build() _, err := provider.Get(bundleFS, &ocv1.ClusterExtension{ Spec: ocv1.ClusterExtensionSpec{ @@ -351,7 +351,7 @@ func Test_RegistryV1ManifestProvider_SingleOwnNamespaceSupport(t *testing.T) { } bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeSingleNamespace).Build()).Build() + WithCSV(bundlecsv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeSingleNamespace).Build()).Build() _, err := provider.Get(bundleFS, &ocv1.ClusterExtension{ Spec: ocv1.ClusterExtensionSpec{ @@ -377,7 +377,7 @@ func Test_RegistryV1ManifestProvider_SingleOwnNamespaceSupport(t *testing.T) { IsSingleOwnNamespaceEnabled: true, } bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeOwnNamespace).Build()).Build() + WithCSV(bundlecsv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeOwnNamespace).Build()).Build() _, err := provider.Get(bundleFS, &ocv1.ClusterExtension{ Spec: ocv1.ClusterExtensionSpec{ Namespace: installNamespace, @@ -397,7 +397,7 @@ func Test_RegistryV1ManifestProvider_SingleOwnNamespaceSupport(t *testing.T) { IsSingleOwnNamespaceEnabled: true, } bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeOwnNamespace).Build()).Build() + WithCSV(bundlecsv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeOwnNamespace).Build()).Build() _, err := provider.Get(bundleFS, &ocv1.ClusterExtension{ Spec: ocv1.ClusterExtensionSpec{ Namespace: "install-namespace", @@ -412,7 +412,7 @@ func Test_RegistryV1ManifestProvider_SingleOwnNamespaceSupport(t *testing.T) { IsSingleOwnNamespaceEnabled: true, } bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeOwnNamespace).Build()).Build() + WithCSV(bundlecsv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeOwnNamespace).Build()).Build() _, err := provider.Get(bundleFS, &ocv1.ClusterExtension{ Spec: ocv1.ClusterExtensionSpec{ Namespace: "install-namespace", @@ -435,7 +435,7 @@ func Test_RegistryV1ManifestProvider_SingleOwnNamespaceSupport(t *testing.T) { IsSingleOwnNamespaceEnabled: true, } bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeMultiNamespace).Build()).Build() + WithCSV(bundlecsv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeMultiNamespace).Build()).Build() _, err := provider.Get(bundleFS, &ocv1.ClusterExtension{ Spec: ocv1.ClusterExtensionSpec{ Namespace: "install-namespace", @@ -466,7 +466,7 @@ func Test_RegistryV1ManifestProvider_DeploymentConfig(t *testing.T) { } bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build()).Build() + WithCSV(bundlecsv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build()).Build() _, err := provider.Get(bundleFS, &ocv1.ClusterExtension{ Spec: ocv1.ClusterExtensionSpec{ @@ -498,7 +498,7 @@ func Test_RegistryV1ManifestProvider_DeploymentConfig(t *testing.T) { } bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build()).Build() + WithCSV(bundlecsv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build()).Build() _, err := provider.Get(bundleFS, &ocv1.ClusterExtension{ Spec: ocv1.ClusterExtensionSpec{ @@ -531,7 +531,7 @@ func Test_RegistryV1ManifestProvider_DeploymentConfig(t *testing.T) { } bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build()).Build() + WithCSV(bundlecsv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build()).Build() _, err := provider.Get(bundleFS, &ocv1.ClusterExtension{ Spec: ocv1.ClusterExtensionSpec{ @@ -574,7 +574,7 @@ func Test_RegistryV1ManifestProvider_DeploymentConfig(t *testing.T) { } bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeSingleNamespace).Build()).Build() + WithCSV(bundlecsv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeSingleNamespace).Build()).Build() _, err := provider.Get(bundleFS, &ocv1.ClusterExtension{ Spec: ocv1.ClusterExtensionSpec{ @@ -611,7 +611,7 @@ func Test_RegistryV1ManifestProvider_DeploymentConfig(t *testing.T) { } bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build()).Build() + WithCSV(bundlecsv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build()).Build() _, err := provider.Get(bundleFS, &ocv1.ClusterExtension{ Spec: ocv1.ClusterExtensionSpec{ @@ -641,7 +641,7 @@ func Test_RegistryV1ManifestProvider_DeploymentConfig(t *testing.T) { } bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build()).Build() + WithCSV(bundlecsv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build()).Build() // Provide deploymentConfig with invalid structure - env should be array, not string // Schema validation catches this before conversion @@ -676,7 +676,7 @@ func Test_RegistryV1ManifestProvider_DeploymentConfig(t *testing.T) { } bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build()).Build() + WithCSV(bundlecsv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build()).Build() _, err := provider.Get(bundleFS, &ocv1.ClusterExtension{ Spec: ocv1.ClusterExtensionSpec{ @@ -708,7 +708,7 @@ func Test_RegistryV1ManifestProvider_DeploymentConfig(t *testing.T) { } bundleFS := bundlefs.Builder().WithPackageName("test"). - WithCSV(clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build()).Build() + WithCSV(bundlecsv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build()).Build() _, err := provider.Get(bundleFS, &ocv1.ClusterExtension{ Spec: ocv1.ClusterExtensionSpec{ @@ -771,7 +771,7 @@ func Test_RegistryV1HelmChartProvider_Chart(t *testing.T) { bundleFS := bundlefs.Builder().WithPackageName("test"). WithCSV( - clusterserviceversion.Builder(). + bundlecsv.Builder(). WithAnnotations(map[string]string{"foo": "bar"}). WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces). Build()). diff --git a/internal/operator-controller/config/config_test.go b/internal/operator-controller/config/config_test.go index e7429eeba9..2f38ad6d35 100644 --- a/internal/operator-controller/config/config_test.go +++ b/internal/operator-controller/config/config_test.go @@ -13,7 +13,7 @@ import ( "github.com/operator-framework/operator-controller/internal/operator-controller/config" "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/bundle" - "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/util/testing/clusterserviceversion" + "github.com/operator-framework/operator-controller/internal/testing/bundle/csv" ) func Test_UnmarshalConfig(t *testing.T) { @@ -296,7 +296,7 @@ func Test_UnmarshalConfig(t *testing.T) { var rv1 bundle.RegistryV1 if tc.supportedInstallModes != nil { rv1 = bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithName("test-operator"). WithInstallModeSupportFor(tc.supportedInstallModes...). Build(), diff --git a/internal/operator-controller/config/error_formatting_test.go b/internal/operator-controller/config/error_formatting_test.go index 6ec1ebf7de..4013d70f29 100644 --- a/internal/operator-controller/config/error_formatting_test.go +++ b/internal/operator-controller/config/error_formatting_test.go @@ -10,7 +10,7 @@ import ( "github.com/operator-framework/operator-controller/internal/operator-controller/config" "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/bundle" - "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/util/testing/clusterserviceversion" + "github.com/operator-framework/operator-controller/internal/testing/bundle/csv" ) // Test_ErrorFormatting_SchemaLibraryVersion verifies error messages from the JSON schema @@ -122,7 +122,7 @@ func Test_ErrorFormatting_SchemaLibraryVersion(t *testing.T) { } { t.Run(tc.name, func(t *testing.T) { rv1 := bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithName("test-operator"). WithInstallModeSupportFor(tc.supportedInstallModes...). Build(), @@ -177,7 +177,7 @@ func Test_ErrorFormatting_YAMLParseErrors(t *testing.T) { } { t.Run(tc.name, func(t *testing.T) { rv1 := bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithName("test-operator"). WithInstallModeSupportFor(v1alpha1.InstallModeTypeSingleNamespace). Build(), diff --git a/internal/operator-controller/rukpak/bundle/source/source_test.go b/internal/operator-controller/rukpak/bundle/source/source_test.go index 45ccafd0dc..1a2ab4698f 100644 --- a/internal/operator-controller/rukpak/bundle/source/source_test.go +++ b/internal/operator-controller/rukpak/bundle/source/source_test.go @@ -13,8 +13,8 @@ import ( "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/bundle" "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/bundle/source" - "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/util/testing/bundlefs" - "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/util/testing/clusterserviceversion" + "github.com/operator-framework/operator-controller/internal/testing/bundle/csv" + bundlefs "github.com/operator-framework/operator-controller/internal/testing/bundle/fs" ) const ( @@ -34,7 +34,7 @@ func Test_FromFS_Success(t *testing.T) { bundleFS := bundlefs.Builder(). WithPackageName("test"). WithBundleProperty("from-file-key", "from-file-value"). - WithBundleResource("csv.yaml", ptr.To(clusterserviceversion.Builder(). + WithBundleResource("csv.yaml", ptr.To(csv.Builder(). WithName("test.v1.0.0"). WithAnnotations(map[string]string{ "olm.properties": `[{"type":"from-csv-annotations-key", "value":"from-csv-annotations-value"}]`, @@ -72,12 +72,12 @@ func Test_FromFS_Fails(t *testing.T) { name: "bundle missing metadata/annotations.yaml", FS: bundlefs.Builder(). WithBundleProperty("foo", "bar"). - WithBundleResource("csv.yaml", ptr.To(clusterserviceversion.Builder().Build())).Build(), + WithBundleResource("csv.yaml", ptr.To(csv.Builder().Build())).Build(), }, { name: "metadata/annotations.yaml missing package name annotation", FS: bundlefs.Builder(). WithBundleProperty("foo", "bar"). - WithBundleResource("csv.yaml", ptr.To(clusterserviceversion.Builder().Build())).Build(), + WithBundleResource("csv.yaml", ptr.To(csv.Builder().Build())).Build(), }, { name: "bundle missing manifests directory", FS: bundlefs.Builder(). diff --git a/internal/operator-controller/rukpak/render/registryv1/generators/generators_test.go b/internal/operator-controller/rukpak/render/registryv1/generators/generators_test.go index 31897ada8d..3caf006c39 100644 --- a/internal/operator-controller/rukpak/render/registryv1/generators/generators_test.go +++ b/internal/operator-controller/rukpak/render/registryv1/generators/generators_test.go @@ -26,7 +26,7 @@ import ( "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/render" "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/render/registryv1/generators" . "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/util/testing" - "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/util/testing/clusterserviceversion" + "github.com/operator-framework/operator-controller/internal/testing/bundle/csv" ) func Test_ResourceGenerators(t *testing.T) { @@ -70,7 +70,7 @@ func Test_BundleCSVDeploymentGenerator_Succeeds(t *testing.T) { { name: "generates deployment resources", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithAnnotations(map[string]string{ "csv": "annotation", }). @@ -176,7 +176,7 @@ func Test_BundleCSVDeploymentGenerator_WithCertWithCertProvider_Succeeds(t *test } b := &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithWebhookDefinitions( v1alpha1.WebhookDescription{ Type: v1alpha1.ValidatingAdmissionWebhook, @@ -371,7 +371,7 @@ func Test_BundleCSVPermissionsGenerator_Succeeds(t *testing.T) { UniqueNameGenerator: fakeUniqueNameGenerator, }, bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithName("csv"). WithPermissions( v1alpha1.StrategyDeploymentPermissions{ @@ -396,7 +396,7 @@ func Test_BundleCSVPermissionsGenerator_Succeeds(t *testing.T) { UniqueNameGenerator: fakeUniqueNameGenerator, }, bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithName("csv"). WithPermissions( v1alpha1.StrategyDeploymentPermissions{ @@ -470,7 +470,7 @@ func Test_BundleCSVPermissionsGenerator_Succeeds(t *testing.T) { UniqueNameGenerator: fakeUniqueNameGenerator, }, bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithName("csv"). WithPermissions( v1alpha1.StrategyDeploymentPermissions{ @@ -588,7 +588,7 @@ func Test_BundleCSVPermissionsGenerator_Succeeds(t *testing.T) { UniqueNameGenerator: fakeUniqueNameGenerator, }, bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithName("csv"). WithPermissions( v1alpha1.StrategyDeploymentPermissions{ @@ -704,7 +704,7 @@ func Test_BundleCSVPermissionsGenerator_Succeeds(t *testing.T) { UniqueNameGenerator: fakeUniqueNameGenerator, }, bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithName("csv"). WithPermissions( v1alpha1.StrategyDeploymentPermissions{ @@ -800,7 +800,7 @@ func Test_BundleCSVClusterPermissionsGenerator_Succeeds(t *testing.T) { UniqueNameGenerator: fakeUniqueNameGenerator, }, bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithName("csv"). WithPermissions( v1alpha1.StrategyDeploymentPermissions{ @@ -920,7 +920,7 @@ func Test_BundleCSVClusterPermissionsGenerator_Succeeds(t *testing.T) { UniqueNameGenerator: fakeUniqueNameGenerator, }, bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithName("csv"). WithClusterPermissions( v1alpha1.StrategyDeploymentPermissions{ @@ -1032,7 +1032,7 @@ func Test_BundleCSVClusterPermissionsGenerator_Succeeds(t *testing.T) { UniqueNameGenerator: fakeUniqueNameGenerator, }, bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithName("csv"). WithClusterPermissions( v1alpha1.StrategyDeploymentPermissions{ @@ -1120,7 +1120,7 @@ func Test_BundleCSVServiceAccountGenerator_Succeeds(t *testing.T) { InstallNamespace: "install-namespace", }, bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithName("csv"). WithPermissions( v1alpha1.StrategyDeploymentPermissions{ @@ -1206,7 +1206,7 @@ func Test_BundleCSVServiceAccountGenerator_Succeeds(t *testing.T) { InstallNamespace: "install-namespace", }, bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithName("csv"). WithPermissions( v1alpha1.StrategyDeploymentPermissions{ @@ -1289,7 +1289,7 @@ func Test_BundleCRDGenerator_WithConversionWebhook_Succeeds(t *testing.T) { {ObjectMeta: metav1.ObjectMeta{Name: "crd-one"}}, {ObjectMeta: metav1.ObjectMeta{Name: "crd-two"}}, }, - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithWebhookDefinitions( v1alpha1.WebhookDescription{ Type: v1alpha1.ConversionWebhook, @@ -1373,7 +1373,7 @@ func Test_BundleCRDGenerator_WithConversionWebhook_Fails(t *testing.T) { }, }, }, - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithWebhookDefinitions( v1alpha1.WebhookDescription{ Type: v1alpha1.ConversionWebhook, @@ -1413,7 +1413,7 @@ func Test_BundleCRDGenerator_WithCertProvider_Succeeds(t *testing.T) { {ObjectMeta: metav1.ObjectMeta{Name: "crd-one"}}, {ObjectMeta: metav1.ObjectMeta{Name: "crd-two"}}, }, - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithWebhookDefinitions( v1alpha1.WebhookDescription{ Type: v1alpha1.ConversionWebhook, @@ -1502,7 +1502,7 @@ func Test_BundleValidatingWebhookResourceGenerator_Succeeds(t *testing.T) { { name: "generates validating webhook configuration resources described in the bundle's cluster service version", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithWebhookDefinitions( v1alpha1.WebhookDescription{ Type: v1alpha1.ValidatingAdmissionWebhook, @@ -1595,7 +1595,7 @@ func Test_BundleValidatingWebhookResourceGenerator_Succeeds(t *testing.T) { { name: "removes any - suffixes from the webhook name (v0 used GenerateName to allow multiple operator installations - we don't want that in v1)", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithWebhookDefinitions( v1alpha1.WebhookDescription{ Type: v1alpha1.ValidatingAdmissionWebhook, @@ -1696,7 +1696,7 @@ func Test_BundleValidatingWebhookResourceGenerator_Succeeds(t *testing.T) { { name: "generates validating webhook configuration resources with certificate provider modifications", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithWebhookDefinitions( v1alpha1.WebhookDescription{ Type: v1alpha1.ValidatingAdmissionWebhook, @@ -1782,7 +1782,7 @@ func Test_BundleMutatingWebhookResourceGenerator_Succeeds(t *testing.T) { { name: "generates validating webhook configuration resources described in the bundle's cluster service version", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithWebhookDefinitions( v1alpha1.WebhookDescription{ Type: v1alpha1.MutatingAdmissionWebhook, @@ -1877,7 +1877,7 @@ func Test_BundleMutatingWebhookResourceGenerator_Succeeds(t *testing.T) { { name: "removes any - suffixes from the webhook name (v0 used GenerateName to allow multiple operator installations - we don't want that in v1)", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithWebhookDefinitions( v1alpha1.WebhookDescription{ Type: v1alpha1.MutatingAdmissionWebhook, @@ -1980,7 +1980,7 @@ func Test_BundleMutatingWebhookResourceGenerator_Succeeds(t *testing.T) { { name: "generates validating webhook configuration resources with certificate provider modifications", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithWebhookDefinitions( v1alpha1.WebhookDescription{ Type: v1alpha1.MutatingAdmissionWebhook, @@ -2066,7 +2066,7 @@ func Test_BundleDeploymentServiceResourceGenerator_Succeeds(t *testing.T) { { name: "generates webhook services using container port 443 and target port 443 by default", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "my-deployment", @@ -2110,7 +2110,7 @@ func Test_BundleDeploymentServiceResourceGenerator_Succeeds(t *testing.T) { { name: "generates webhook services using the given container port and setting target port the same as the container port if not given", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "my-deployment", @@ -2155,7 +2155,7 @@ func Test_BundleDeploymentServiceResourceGenerator_Succeeds(t *testing.T) { { name: "generates webhook services using given container port of 443 and given target port", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "my-deployment", @@ -2203,7 +2203,7 @@ func Test_BundleDeploymentServiceResourceGenerator_Succeeds(t *testing.T) { { name: "generates webhook services using given container port and target port", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "my-deployment", @@ -2252,7 +2252,7 @@ func Test_BundleDeploymentServiceResourceGenerator_Succeeds(t *testing.T) { { name: "generates webhook services using referenced deployment defined label selector", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "my-deployment", @@ -2311,7 +2311,7 @@ func Test_BundleDeploymentServiceResourceGenerator_Succeeds(t *testing.T) { { name: "aggregates all webhook definitions referencing the same deployment into a single service", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "my-deployment", @@ -2408,7 +2408,7 @@ func Test_BundleDeploymentServiceResourceGenerator_Succeeds(t *testing.T) { { name: "applies cert provider modifiers to webhook service", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "my-deployment", @@ -2482,7 +2482,7 @@ func Test_CertProviderResourceGenerator_Succeeds(t *testing.T) { } objs, err := generators.CertProviderResourceGenerator(&bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithWebhookDefinitions( // only generate resources for deployments referenced by webhook definitions v1alpha1.WebhookDescription{ @@ -2521,7 +2521,7 @@ func Test_BundleCSVDeploymentGenerator_WithDeploymentConfig(t *testing.T) { { name: "applies env vars from deployment config", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "test-deployment", @@ -2587,7 +2587,7 @@ func Test_BundleCSVDeploymentGenerator_WithDeploymentConfig(t *testing.T) { { name: "applies resources from deployment config", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "test-deployment", @@ -2633,7 +2633,7 @@ func Test_BundleCSVDeploymentGenerator_WithDeploymentConfig(t *testing.T) { { name: "applies tolerations from deployment config", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "test-deployment", @@ -2678,7 +2678,7 @@ func Test_BundleCSVDeploymentGenerator_WithDeploymentConfig(t *testing.T) { { name: "applies node selector from deployment config", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "test-deployment", @@ -2717,7 +2717,7 @@ func Test_BundleCSVDeploymentGenerator_WithDeploymentConfig(t *testing.T) { { name: "applies affinity from deployment config", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "test-deployment", @@ -2769,7 +2769,7 @@ func Test_BundleCSVDeploymentGenerator_WithDeploymentConfig(t *testing.T) { { name: "empty affinity erases bundle affinity", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "test-deployment", @@ -2853,7 +2853,7 @@ func Test_BundleCSVDeploymentGenerator_WithDeploymentConfig(t *testing.T) { { name: "empty nodeAffinity erases only nodeAffinity", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "test-deployment", @@ -2922,7 +2922,7 @@ func Test_BundleCSVDeploymentGenerator_WithDeploymentConfig(t *testing.T) { { name: "empty nodeAffinity with empty nodeSelectorTerms erases only nodeAffinity", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "test-deployment", @@ -2996,7 +2996,7 @@ func Test_BundleCSVDeploymentGenerator_WithDeploymentConfig(t *testing.T) { { name: "nil affinity preserves bundle affinity", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "test-deployment", @@ -3045,7 +3045,7 @@ func Test_BundleCSVDeploymentGenerator_WithDeploymentConfig(t *testing.T) { { name: "partial affinity override preserves unspecified fields", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "test-deployment", @@ -3133,7 +3133,7 @@ func Test_BundleCSVDeploymentGenerator_WithDeploymentConfig(t *testing.T) { { name: "empty sub-fields erase to nil affinity", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "test-deployment", @@ -3202,7 +3202,7 @@ func Test_BundleCSVDeploymentGenerator_WithDeploymentConfig(t *testing.T) { { name: "empty nodeAffinity without bundle affinity stays nil", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "test-deployment", @@ -3237,7 +3237,7 @@ func Test_BundleCSVDeploymentGenerator_WithDeploymentConfig(t *testing.T) { { name: "empty affinity without bundle affinity stays nil", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "test-deployment", @@ -3270,7 +3270,7 @@ func Test_BundleCSVDeploymentGenerator_WithDeploymentConfig(t *testing.T) { { name: "applies annotations from deployment config", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithAnnotations(map[string]string{ "csv-annotation": "csv-value", }). @@ -3326,7 +3326,7 @@ func Test_BundleCSVDeploymentGenerator_WithDeploymentConfig(t *testing.T) { { name: "applies volumes and volume mounts from deployment config", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "test-deployment", @@ -3381,7 +3381,7 @@ func Test_BundleCSVDeploymentGenerator_WithDeploymentConfig(t *testing.T) { { name: "applies envFrom from deployment config", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "test-deployment", @@ -3434,7 +3434,7 @@ func Test_BundleCSVDeploymentGenerator_WithDeploymentConfig(t *testing.T) { { name: "applies all config fields together", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "test-deployment", @@ -3498,7 +3498,7 @@ func Test_BundleCSVDeploymentGenerator_WithDeploymentConfig(t *testing.T) { { name: "applies config to multiple containers", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "test-deployment", @@ -3550,7 +3550,7 @@ func Test_BundleCSVDeploymentGenerator_WithDeploymentConfig(t *testing.T) { { name: "nil deployment config does nothing", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "test-deployment", @@ -3589,7 +3589,7 @@ func Test_BundleCSVDeploymentGenerator_WithDeploymentConfig(t *testing.T) { { name: "merges volumes from deployment config - overrides matching names", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "test-deployment", @@ -3696,7 +3696,7 @@ func Test_BundleCSVDeploymentGenerator_WithDeploymentConfig(t *testing.T) { { name: "merges volumeMounts from deployment config - overrides matching names", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "test-deployment", diff --git a/internal/operator-controller/rukpak/render/registryv1/registryv1_test.go b/internal/operator-controller/rukpak/render/registryv1/registryv1_test.go index 009d47c136..f84a2305ed 100644 --- a/internal/operator-controller/rukpak/render/registryv1/registryv1_test.go +++ b/internal/operator-controller/rukpak/render/registryv1/registryv1_test.go @@ -17,7 +17,7 @@ import ( "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/render/registryv1/generators" "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/render/registryv1/validators" . "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/util/testing" - "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/util/testing/clusterserviceversion" + "github.com/operator-framework/operator-controller/internal/testing/bundle/csv" ) func Test_BundleValidatorHasAllValidationFns(t *testing.T) { @@ -68,7 +68,7 @@ func Test_ResourceGeneratorsHasAllGenerators(t *testing.T) { func Test_Renderer_Success(t *testing.T) { someBundle := bundle.RegistryV1{ PackageName: "my-package", - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithName("test-bundle"). WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), Others: []unstructured.Unstructured{ @@ -101,7 +101,7 @@ func Test_Renderer_Success(t *testing.T) { func Test_Renderer_Failure_UnsupportedKind(t *testing.T) { someBundle := bundle.RegistryV1{ PackageName: "my-package", - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithName("test-bundle"). WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), Others: []unstructured.Unstructured{ diff --git a/internal/operator-controller/rukpak/render/registryv1/validators/validator_test.go b/internal/operator-controller/rukpak/render/registryv1/validators/validator_test.go index cf0e0728e2..1ba329fc08 100644 --- a/internal/operator-controller/rukpak/render/registryv1/validators/validator_test.go +++ b/internal/operator-controller/rukpak/render/registryv1/validators/validator_test.go @@ -15,7 +15,7 @@ import ( "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/bundle" "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/render/registryv1/validators" - "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/util/testing/clusterserviceversion" + "github.com/operator-framework/operator-controller/internal/testing/bundle/csv" ) func Test_CheckDeploymentSpecUniqueness(t *testing.T) { @@ -27,7 +27,7 @@ func Test_CheckDeploymentSpecUniqueness(t *testing.T) { { name: "accepts bundles with unique deployment strategy spec names", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{Name: "test-deployment-one"}, v1alpha1.StrategyDeploymentSpec{Name: "test-deployment-two"}, @@ -37,7 +37,7 @@ func Test_CheckDeploymentSpecUniqueness(t *testing.T) { }, { name: "rejects bundles with duplicate deployment strategy spec names", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{Name: "test-deployment-one"}, v1alpha1.StrategyDeploymentSpec{Name: "test-deployment-two"}, @@ -50,7 +50,7 @@ func Test_CheckDeploymentSpecUniqueness(t *testing.T) { }, { name: "errors are ordered by deployment strategy spec name", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{Name: "test-deployment-a"}, v1alpha1.StrategyDeploymentSpec{Name: "test-deployment-b"}, @@ -81,7 +81,7 @@ func Test_CheckDeploymentNameIsDNS1123SubDomain(t *testing.T) { { name: "accepts valid deployment strategy spec names", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{Name: "test-deployment-one"}, v1alpha1.StrategyDeploymentSpec{Name: "test-deployment-two"}, @@ -91,7 +91,7 @@ func Test_CheckDeploymentNameIsDNS1123SubDomain(t *testing.T) { }, { name: "rejects bundles with invalid deployment strategy spec names - errors are sorted by name", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{Name: "-bad-name"}, v1alpha1.StrategyDeploymentSpec{Name: "b-name-is-waaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaay-too-long"}, @@ -170,7 +170,7 @@ func Test_CheckOwnedCRDExistence(t *testing.T) { {ObjectMeta: metav1.ObjectMeta{Name: "a.crd.something"}}, {ObjectMeta: metav1.ObjectMeta{Name: "b.crd.something"}}, }, - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithOwnedCRDs( v1alpha1.CRDDescription{Name: "a.crd.something"}, v1alpha1.CRDDescription{Name: "b.crd.something"}, @@ -181,7 +181,7 @@ func Test_CheckOwnedCRDExistence(t *testing.T) { name: "rejects bundles with missing owned custom resource definition resources", bundle: &bundle.RegistryV1{ CRDs: []apiextensionsv1.CustomResourceDefinition{}, - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithOwnedCRDs(v1alpha1.CRDDescription{Name: "a.crd.something"}).Build(), }, expectedErrs: []error{ @@ -191,7 +191,7 @@ func Test_CheckOwnedCRDExistence(t *testing.T) { name: "errors are ordered by owned custom resource definition name", bundle: &bundle.RegistryV1{ CRDs: []apiextensionsv1.CustomResourceDefinition{}, - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithOwnedCRDs( v1alpha1.CRDDescription{Name: "a.crd.something"}, v1alpha1.CRDDescription{Name: "c.crd.something"}, @@ -247,7 +247,7 @@ func Test_CheckWebhookSupport(t *testing.T) { { name: "accepts bundles with conversion webhook definitions when they only support AllNamespaces install mode", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces). WithWebhookDefinitions( v1alpha1.WebhookDescription{ @@ -259,7 +259,7 @@ func Test_CheckWebhookSupport(t *testing.T) { { name: "accepts bundles with validating webhook definitions when they support more modes than AllNamespaces install mode", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces, v1alpha1.InstallModeTypeSingleNamespace). WithWebhookDefinitions( v1alpha1.WebhookDescription{ @@ -271,7 +271,7 @@ func Test_CheckWebhookSupport(t *testing.T) { { name: "accepts bundles with mutating webhook definitions when they support more modes than AllNamespaces install mode", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces, v1alpha1.InstallModeTypeSingleNamespace). WithWebhookDefinitions( v1alpha1.WebhookDescription{ @@ -283,7 +283,7 @@ func Test_CheckWebhookSupport(t *testing.T) { { name: "rejects bundles with conversion webhook definitions when they support more modes than AllNamespaces install mode", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithInstallModeSupportFor(v1alpha1.InstallModeTypeSingleNamespace, v1alpha1.InstallModeTypeAllNamespaces). WithWebhookDefinitions( v1alpha1.WebhookDescription{ @@ -318,7 +318,7 @@ func Test_CheckWebhookRules(t *testing.T) { { name: "accepts bundles with webhook definitions without rules", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces). WithWebhookDefinitions( v1alpha1.WebhookDescription{ @@ -333,7 +333,7 @@ func Test_CheckWebhookRules(t *testing.T) { { name: "accepts bundles with webhook definitions with supported rules", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces). WithWebhookDefinitions( v1alpha1.WebhookDescription{ @@ -364,7 +364,7 @@ func Test_CheckWebhookRules(t *testing.T) { { name: "reject bundles with webhook definitions with rules containing '*' api group", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces). WithWebhookDefinitions( v1alpha1.WebhookDescription{ @@ -399,7 +399,7 @@ func Test_CheckWebhookRules(t *testing.T) { { name: "reject bundles with webhook definitions with rules containing 'olm.operatorframework.io' api group", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces). WithWebhookDefinitions( v1alpha1.WebhookDescription{ @@ -434,7 +434,7 @@ func Test_CheckWebhookRules(t *testing.T) { { name: "reject bundles with webhook definitions with rules containing 'admissionregistration.k8s.io' api group and '*' resource", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces). WithWebhookDefinitions( v1alpha1.WebhookDescription{ @@ -458,7 +458,7 @@ func Test_CheckWebhookRules(t *testing.T) { { name: "reject bundles with webhook definitions with rules containing 'admissionregistration.k8s.io' api group and 'MutatingWebhookConfiguration' resource", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces). WithWebhookDefinitions( v1alpha1.WebhookDescription{ @@ -482,7 +482,7 @@ func Test_CheckWebhookRules(t *testing.T) { { name: "reject bundles with webhook definitions with rules containing 'admissionregistration.k8s.io' api group and 'mutatingwebhookconfiguration' resource", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces). WithWebhookDefinitions( v1alpha1.WebhookDescription{ @@ -506,7 +506,7 @@ func Test_CheckWebhookRules(t *testing.T) { { name: "reject bundles with webhook definitions with rules containing 'admissionregistration.k8s.io' api group and 'mutatingwebhookconfigurations' resource", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces). WithWebhookDefinitions( v1alpha1.WebhookDescription{ @@ -530,7 +530,7 @@ func Test_CheckWebhookRules(t *testing.T) { { name: "reject bundles with webhook definitions with rules containing 'admissionregistration.k8s.io' api group and 'ValidatingWebhookConfiguration' resource", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces). WithWebhookDefinitions( v1alpha1.WebhookDescription{ @@ -554,7 +554,7 @@ func Test_CheckWebhookRules(t *testing.T) { { name: "reject bundles with webhook definitions with rules containing 'admissionregistration.k8s.io' api group and 'validatingwebhookconfiguration' resource", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces). WithWebhookDefinitions( v1alpha1.WebhookDescription{ @@ -578,7 +578,7 @@ func Test_CheckWebhookRules(t *testing.T) { { name: "reject bundles with webhook definitions with rules containing 'admissionregistration.k8s.io' api group and 'validatingwebhookconfigurations' resource", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces). WithWebhookDefinitions( v1alpha1.WebhookDescription{ @@ -616,7 +616,7 @@ func Test_CheckWebhookDeploymentReferentialIntegrity(t *testing.T) { { name: "accepts bundles where webhook definitions reference existing strategy deployment specs", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{Name: "test-deployment-one"}, v1alpha1.StrategyDeploymentSpec{Name: "test-deployment-two"}, @@ -632,7 +632,7 @@ func Test_CheckWebhookDeploymentReferentialIntegrity(t *testing.T) { }, { name: "rejects bundles with webhook definitions that reference non-existing strategy deployment specs", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{Name: "test-deployment-one"}, ). @@ -650,7 +650,7 @@ func Test_CheckWebhookDeploymentReferentialIntegrity(t *testing.T) { }, { name: "errors are ordered by deployment strategy spec name, webhook type, and webhook name", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{Name: "test-deployment-one"}, ). @@ -711,12 +711,12 @@ func Test_CheckWebhookNameUniqueness(t *testing.T) { { name: "accepts bundles without webhook definitions", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder().Build(), + CSV: csv.Builder().Build(), }, }, { name: "accepts bundles with unique webhook names", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithWebhookDefinitions( v1alpha1.WebhookDescription{ Type: v1alpha1.MutatingAdmissionWebhook, @@ -742,7 +742,7 @@ func Test_CheckWebhookNameUniqueness(t *testing.T) { }, { name: "accepts bundles with webhooks with the same name but different types", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithWebhookDefinitions( v1alpha1.WebhookDescription{ Type: v1alpha1.MutatingAdmissionWebhook, @@ -759,7 +759,7 @@ func Test_CheckWebhookNameUniqueness(t *testing.T) { }, { name: "rejects bundles with duplicate validating webhook definitions", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithWebhookDefinitions( v1alpha1.WebhookDescription{ Type: v1alpha1.ValidatingAdmissionWebhook, @@ -776,7 +776,7 @@ func Test_CheckWebhookNameUniqueness(t *testing.T) { }, { name: "rejects bundles with duplicate mutating webhook definitions", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithWebhookDefinitions( v1alpha1.WebhookDescription{ Type: v1alpha1.MutatingAdmissionWebhook, @@ -793,7 +793,7 @@ func Test_CheckWebhookNameUniqueness(t *testing.T) { }, { name: "rejects bundles with duplicate conversion webhook definitions", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithWebhookDefinitions( v1alpha1.WebhookDescription{ Type: v1alpha1.ConversionWebhook, @@ -810,7 +810,7 @@ func Test_CheckWebhookNameUniqueness(t *testing.T) { }, { name: "orders errors by webhook type and name", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithWebhookDefinitions( v1alpha1.WebhookDescription{ Type: v1alpha1.ValidatingAdmissionWebhook, @@ -884,7 +884,7 @@ func Test_CheckConversionWebhooksReferenceOwnedCRDs(t *testing.T) { }, { name: "accepts bundles without conversion webhook definitions", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithWebhookDefinitions( v1alpha1.WebhookDescription{ Type: v1alpha1.ValidatingAdmissionWebhook, @@ -899,7 +899,7 @@ func Test_CheckConversionWebhooksReferenceOwnedCRDs(t *testing.T) { }, { name: "accepts bundles with conversion webhooks that reference owned CRDs", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithOwnedCRDs( v1alpha1.CRDDescription{Name: "some.crd.something"}, v1alpha1.CRDDescription{Name: "another.crd.something"}, @@ -918,7 +918,7 @@ func Test_CheckConversionWebhooksReferenceOwnedCRDs(t *testing.T) { }, { name: "rejects bundles with conversion webhooks that reference existing CRDs that are not owned", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithOwnedCRDs( v1alpha1.CRDDescription{Name: "some.crd.something"}, ). @@ -939,7 +939,7 @@ func Test_CheckConversionWebhooksReferenceOwnedCRDs(t *testing.T) { }, { name: "errors are ordered by webhook name and CRD name", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithOwnedCRDs( v1alpha1.CRDDescription{Name: "b.crd.something"}, ). @@ -996,7 +996,7 @@ func Test_CheckConversionWebhookCRDReferenceUniqueness(t *testing.T) { { name: "accepts bundles without conversion webhook definitions", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithWebhookDefinitions( v1alpha1.WebhookDescription{ Type: v1alpha1.ValidatingAdmissionWebhook, @@ -1013,7 +1013,7 @@ func Test_CheckConversionWebhookCRDReferenceUniqueness(t *testing.T) { { name: "accepts bundles with conversion webhooks that reference different CRDs", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithOwnedCRDs( v1alpha1.CRDDescription{Name: "some.crd.something"}, v1alpha1.CRDDescription{Name: "another.crd.something"}, @@ -1040,7 +1040,7 @@ func Test_CheckConversionWebhookCRDReferenceUniqueness(t *testing.T) { { name: "rejects bundles with conversion webhooks that reference the same CRD", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithOwnedCRDs( v1alpha1.CRDDescription{Name: "some.crd.something"}, ). @@ -1068,7 +1068,7 @@ func Test_CheckConversionWebhookCRDReferenceUniqueness(t *testing.T) { { name: "errors are ordered by CRD name and webhook names", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithOwnedCRDs( v1alpha1.CRDDescription{Name: "b.crd.something"}, ). @@ -1121,12 +1121,12 @@ func Test_CheckWebhookNameIsDNS1123SubDomain(t *testing.T) { { name: "accepts bundles without webhook definitions", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder().Build(), + CSV: csv.Builder().Build(), }, }, { name: "rejects bundles with invalid webhook definitions names and orders errors by webhook type and name", bundle: &bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithWebhookDefinitions( v1alpha1.WebhookDescription{ Type: v1alpha1.ValidatingAdmissionWebhook, diff --git a/internal/operator-controller/rukpak/render/render_test.go b/internal/operator-controller/rukpak/render/render_test.go index 452f9f3fdb..4af451f317 100644 --- a/internal/operator-controller/rukpak/render/render_test.go +++ b/internal/operator-controller/rukpak/render/render_test.go @@ -17,14 +17,14 @@ import ( "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/bundle" "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/render" . "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/util/testing" - "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/util/testing/clusterserviceversion" + "github.com/operator-framework/operator-controller/internal/testing/bundle/csv" ) func Test_BundleRenderer_NoConfig(t *testing.T) { renderer := render.BundleRenderer{} objs, err := renderer.Render( bundle.RegistryV1{ - CSV: clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), + CSV: csv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), }, "", nil) require.NoError(t, err) require.Empty(t, objs) @@ -156,7 +156,7 @@ func Test_BundleRenderer_DefaultTargetNamespaces(t *testing.T) { }, } _, err := renderer.Render(bundle.RegistryV1{ - CSV: clusterserviceversion.Builder(). + CSV: csv.Builder(). WithName("test"). WithInstallModeSupportFor(tc.supportedInstallModes...).Build(), }, "some-namespace") @@ -181,14 +181,14 @@ func Test_BundleRenderer_ValidatesRenderOptions(t *testing.T) { { name: "accepts empty targetNamespaces (because it is ignored)", installNamespace: "install-namespace", - csv: clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), + csv: csv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), opts: []render.Option{ render.WithTargetNamespaces(), }, }, { name: "rejects nil unique name generator", installNamespace: "install-namespace", - csv: clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), + csv: csv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), opts: []render.Option{ render.WithUniqueNameGenerator(nil), }, @@ -196,7 +196,7 @@ func Test_BundleRenderer_ValidatesRenderOptions(t *testing.T) { }, { name: "rejects all namespace install if AllNamespaces install mode is not supported", installNamespace: "install-namespace", - csv: clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeSingleNamespace).Build(), + csv: csv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeSingleNamespace).Build(), opts: []render.Option{ render.WithTargetNamespaces(corev1.NamespaceAll), }, @@ -204,7 +204,7 @@ func Test_BundleRenderer_ValidatesRenderOptions(t *testing.T) { }, { name: "rejects own namespace install if only AllNamespace install mode is supported", installNamespace: "install-namespace", - csv: clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), + csv: csv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), opts: []render.Option{ render.WithTargetNamespaces("install-namespace"), }, @@ -212,7 +212,7 @@ func Test_BundleRenderer_ValidatesRenderOptions(t *testing.T) { }, { name: "rejects install out of own namespace if only OwnNamespace install mode is supported", installNamespace: "install-namespace", - csv: clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeOwnNamespace).Build(), + csv: csv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeOwnNamespace).Build(), opts: []render.Option{ render.WithTargetNamespaces("not-install-namespace"), }, @@ -220,7 +220,7 @@ func Test_BundleRenderer_ValidatesRenderOptions(t *testing.T) { }, { name: "rejects multi-namespace install if MultiNamespace install mode is not supported", installNamespace: "install-namespace", - csv: clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), + csv: csv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), opts: []render.Option{ render.WithTargetNamespaces("ns1", "ns2", "ns3"), }, @@ -228,7 +228,7 @@ func Test_BundleRenderer_ValidatesRenderOptions(t *testing.T) { }, { name: "rejects if bundle supports no install modes", installNamespace: "install-namespace", - csv: clusterserviceversion.Builder().Build(), + csv: csv.Builder().Build(), opts: []render.Option{ render.WithTargetNamespaces("some-namespace"), }, @@ -236,42 +236,42 @@ func Test_BundleRenderer_ValidatesRenderOptions(t *testing.T) { }, { name: "accepts all namespace render if AllNamespaces install mode is supported", installNamespace: "install-namespace", - csv: clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), + csv: csv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), opts: []render.Option{ render.WithTargetNamespaces(""), }, }, { name: "accepts install namespace render if SingleNamespace install mode is supported", installNamespace: "install-namespace", - csv: clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeSingleNamespace).Build(), + csv: csv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeSingleNamespace).Build(), opts: []render.Option{ render.WithTargetNamespaces("some-namespace"), }, }, { name: "accepts all install namespace render if OwnNamespace install mode is supported", installNamespace: "install-namespace", - csv: clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeOwnNamespace).Build(), + csv: csv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeOwnNamespace).Build(), opts: []render.Option{ render.WithTargetNamespaces("install-namespace"), }, }, { name: "accepts single namespace render if SingleNamespace install mode is supported", installNamespace: "install-namespace", - csv: clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeSingleNamespace).Build(), + csv: csv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeSingleNamespace).Build(), opts: []render.Option{ render.WithTargetNamespaces("some-namespace"), }, }, { name: "accepts multi namespace render if MultiNamespace install mode is supported", installNamespace: "install-namespace", - csv: clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeMultiNamespace).Build(), + csv: csv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeMultiNamespace).Build(), opts: []render.Option{ render.WithTargetNamespaces("n1", "n2", "n3"), }, }, { name: "reject multi namespace render if OwnNamespace install mode is not supported and target namespaces include install namespace", installNamespace: "install-namespace", - csv: clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeMultiNamespace).Build(), + csv: csv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeMultiNamespace).Build(), opts: []render.Option{ render.WithTargetNamespaces("n1", "n2", "n3", "install-namespace"), }, @@ -342,7 +342,7 @@ func Test_BundleRenderer_CallsResourceGenerators(t *testing.T) { } objs, err := renderer.Render( bundle.RegistryV1{ - CSV: clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), + CSV: csv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), }, "") require.NoError(t, err) require.Equal(t, []client.Object{&corev1.Namespace{}, &corev1.Service{}, &appsv1.Deployment{}}, objs) @@ -361,7 +361,7 @@ func Test_BundleRenderer_ReturnsResourceGeneratorErrors(t *testing.T) { } objs, err := renderer.Render( bundle.RegistryV1{ - CSV: clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), + CSV: csv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), }, "") require.Nil(t, objs) require.Error(t, err) @@ -404,7 +404,7 @@ func Test_WithDeploymentConfig(t *testing.T) { _, err := renderer.Render( bundle.RegistryV1{ - CSV: clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), + CSV: csv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), }, "test-namespace", render.WithDeploymentConfig(expectedConfig), @@ -427,7 +427,7 @@ func Test_WithDeploymentConfig(t *testing.T) { _, err := renderer.Render( bundle.RegistryV1{ - CSV: clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), + CSV: csv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), }, "test-namespace", ) @@ -449,7 +449,7 @@ func Test_WithDeploymentConfig(t *testing.T) { _, err := renderer.Render( bundle.RegistryV1{ - CSV: clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), + CSV: csv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces).Build(), }, "test-namespace", render.WithDeploymentConfig(nil), diff --git a/internal/operator-controller/rukpak/util/testing/clusterserviceversion/builder.go b/internal/testing/bundle/csv/builder.go similarity index 99% rename from internal/operator-controller/rukpak/util/testing/clusterserviceversion/builder.go rename to internal/testing/bundle/csv/builder.go index e7ae2195d9..8933f1aa5a 100644 --- a/internal/operator-controller/rukpak/util/testing/clusterserviceversion/builder.go +++ b/internal/testing/bundle/csv/builder.go @@ -1,4 +1,4 @@ -package clusterserviceversion +package csv import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/internal/operator-controller/rukpak/util/testing/clusterserviceversion/builder_test.go b/internal/testing/bundle/csv/builder_test.go similarity index 88% rename from internal/operator-controller/rukpak/util/testing/clusterserviceversion/builder_test.go rename to internal/testing/bundle/csv/builder_test.go index 45bad4e53c..46f887629c 100644 --- a/internal/operator-controller/rukpak/util/testing/clusterserviceversion/builder_test.go +++ b/internal/testing/bundle/csv/builder_test.go @@ -1,4 +1,4 @@ -package clusterserviceversion_test +package csv_test import ( "testing" @@ -9,12 +9,12 @@ import ( "github.com/operator-framework/api/pkg/operators/v1alpha1" - "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/util/testing/clusterserviceversion" + "github.com/operator-framework/operator-controller/internal/testing/bundle/csv" ) func Test_Builder(t *testing.T) { t.Run("builds an empty csv by default", func(t *testing.T) { - obj := clusterserviceversion.Builder().Build() + obj := csv.Builder().Build() require.Equal(t, v1alpha1.ClusterServiceVersion{ TypeMeta: metav1.TypeMeta{ Kind: "ClusterServiceVersion", @@ -24,7 +24,7 @@ func Test_Builder(t *testing.T) { }) t.Run("WithName sets csv .metadata.name", func(t *testing.T) { - obj := clusterserviceversion.Builder().WithName("some-name").Build() + obj := csv.Builder().WithName("some-name").Build() require.Equal(t, v1alpha1.ClusterServiceVersion{ TypeMeta: metav1.TypeMeta{ Kind: "ClusterServiceVersion", @@ -37,7 +37,7 @@ func Test_Builder(t *testing.T) { }) t.Run("WithStrategyDeploymentSpecs sets csv .spec.install.spec.deployments", func(t *testing.T) { - obj := clusterserviceversion.Builder().WithStrategyDeploymentSpecs( + obj := csv.Builder().WithStrategyDeploymentSpecs( v1alpha1.StrategyDeploymentSpec{ Name: "spec-one", }, @@ -69,7 +69,7 @@ func Test_Builder(t *testing.T) { }) t.Run("WithPermissions sets csv .spec.install.spec.permissions", func(t *testing.T) { - obj := clusterserviceversion.Builder().WithPermissions( + obj := csv.Builder().WithPermissions( v1alpha1.StrategyDeploymentPermissions{ ServiceAccountName: "service-account", Rules: []rbacv1.PolicyRule{ @@ -115,7 +115,7 @@ func Test_Builder(t *testing.T) { }) t.Run("WithClusterPermissions sets csv .spec.install.spec.clusterPermissions", func(t *testing.T) { - obj := clusterserviceversion.Builder().WithClusterPermissions( + obj := csv.Builder().WithClusterPermissions( v1alpha1.StrategyDeploymentPermissions{ ServiceAccountName: "service-account", Rules: []rbacv1.PolicyRule{ @@ -161,7 +161,7 @@ func Test_Builder(t *testing.T) { }) t.Run("WithClusterPermissions sets csv .spec.customresourcedefinitions.owned", func(t *testing.T) { - obj := clusterserviceversion.Builder().WithOwnedCRDs( + obj := csv.Builder().WithOwnedCRDs( v1alpha1.CRDDescription{Name: "a.crd.something"}, v1alpha1.CRDDescription{Name: "b.crd.something"}, ).Build() @@ -183,7 +183,7 @@ func Test_Builder(t *testing.T) { }) t.Run("WithInstallModeSupportFor adds all install modes to .spec.installModes and sets supported to true for the given supported install modes", func(t *testing.T) { - obj := clusterserviceversion.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces, v1alpha1.InstallModeTypeSingleNamespace).Build() + obj := csv.Builder().WithInstallModeSupportFor(v1alpha1.InstallModeTypeAllNamespaces, v1alpha1.InstallModeTypeSingleNamespace).Build() require.Equal(t, v1alpha1.ClusterServiceVersion{ TypeMeta: metav1.TypeMeta{ diff --git a/internal/operator-controller/rukpak/util/testing/bundlefs/bundlefs.go b/internal/testing/bundle/fs/bundlefs.go similarity index 99% rename from internal/operator-controller/rukpak/util/testing/bundlefs/bundlefs.go rename to internal/testing/bundle/fs/bundlefs.go index b9d2d8c25a..9f5b699865 100644 --- a/internal/operator-controller/rukpak/util/testing/bundlefs/bundlefs.go +++ b/internal/testing/bundle/fs/bundlefs.go @@ -1,4 +1,4 @@ -package bundlefs +package fs import ( "fmt" diff --git a/internal/operator-controller/rukpak/util/testing/bundlefs/bundlefs_test.go b/internal/testing/bundle/fs/bundlefs_test.go similarity index 80% rename from internal/operator-controller/rukpak/util/testing/bundlefs/bundlefs_test.go rename to internal/testing/bundle/fs/bundlefs_test.go index 74e8410f35..998df8020f 100644 --- a/internal/operator-controller/rukpak/util/testing/bundlefs/bundlefs_test.go +++ b/internal/testing/bundle/fs/bundlefs_test.go @@ -1,4 +1,4 @@ -package bundlefs_test +package fs_test import ( "testing" @@ -8,18 +8,18 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/util/testing/bundlefs" - "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/util/testing/clusterserviceversion" + "github.com/operator-framework/operator-controller/internal/testing/bundle/csv" + "github.com/operator-framework/operator-controller/internal/testing/bundle/fs" ) func Test_BundleFSBuilder(t *testing.T) { t.Run("returns empty bundle file system by default", func(t *testing.T) { - bundleFs := bundlefs.Builder().Build() + bundleFs := fs.Builder().Build() assert.Empty(t, bundleFs) }) t.Run("WithPackageName sets the bundle package annotation", func(t *testing.T) { - bundleFs := bundlefs.Builder().WithPackageName("test").Build() + bundleFs := fs.Builder().WithPackageName("test").Build() require.Contains(t, bundleFs, "metadata/annotations.yaml") require.Equal(t, []byte(`annotations: operators.operatorframework.io.bundle.channel.default.v1: "" @@ -29,7 +29,7 @@ func Test_BundleFSBuilder(t *testing.T) { }) t.Run("WithChannels sets the bundle channels annotation", func(t *testing.T) { - bundleFs := bundlefs.Builder().WithChannels("alpha", "beta", "stable").Build() + bundleFs := fs.Builder().WithChannels("alpha", "beta", "stable").Build() require.Contains(t, bundleFs, "metadata/annotations.yaml") require.Equal(t, []byte(`annotations: operators.operatorframework.io.bundle.channel.default.v1: "" @@ -39,7 +39,7 @@ func Test_BundleFSBuilder(t *testing.T) { }) t.Run("WithDefaultChannel sets the bundle default channel annotation", func(t *testing.T) { - bundleFs := bundlefs.Builder().WithDefaultChannel("stable").Build() + bundleFs := fs.Builder().WithDefaultChannel("stable").Build() require.Contains(t, bundleFs, "metadata/annotations.yaml") require.Equal(t, []byte(`annotations: operators.operatorframework.io.bundle.channel.default.v1: stable @@ -49,7 +49,7 @@ func Test_BundleFSBuilder(t *testing.T) { }) t.Run("WithBundleProperty sets the bundle properties", func(t *testing.T) { - bundleFs := bundlefs.Builder(). + bundleFs := fs.Builder(). WithBundleProperty("foo", "bar"). WithBundleProperty("key", "value"). Build() @@ -64,7 +64,7 @@ func Test_BundleFSBuilder(t *testing.T) { }) t.Run("WithBundleResource adds a resource to the manifests directory", func(t *testing.T) { - bundleFs := bundlefs.Builder().WithBundleResource("service.yaml", &corev1.Service{ + bundleFs := fs.Builder().WithBundleResource("service.yaml", &corev1.Service{ TypeMeta: metav1.TypeMeta{ APIVersion: corev1.SchemeGroupVersion.String(), Kind: "Service", @@ -85,7 +85,7 @@ status: }) t.Run("WithCSV adds a csv to the manifests directory", func(t *testing.T) { - bundleFs := bundlefs.Builder().WithCSV(clusterserviceversion.Builder().WithName("some-csv").Build()).Build() + bundleFs := fs.Builder().WithCSV(csv.Builder().WithName("some-csv").Build()).Build() require.Contains(t, bundleFs, "manifests/csv.yaml") require.Equal(t, []byte(`apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion diff --git a/kind-config/kind-config-2node.yaml b/kind-config/kind-config-2node.yaml index 5532a9932c..d87ec06b53 100644 --- a/kind-config/kind-config-2node.yaml +++ b/kind-config/kind-config-2node.yaml @@ -3,11 +3,6 @@ kind: Cluster nodes: - role: control-plane extraPortMappings: - # e2e image registry service's NodePort - - containerPort: 30000 - hostPort: 30000 - listenAddress: "127.0.0.1" - protocol: tcp # prometheus metrics service's NodePort - containerPort: 30900 hostPort: 30900 @@ -25,9 +20,6 @@ nodes: kubeletExtraArgs: node-labels: "ingress-ready=true" taints: [] - extraMounts: - - hostPath: ./hack/kind-config/containerd/certs.d - containerPath: /etc/containerd/certs.d - role: control-plane kubeadmConfigPatches: - | @@ -36,10 +28,3 @@ nodes: kubeletExtraArgs: node-labels: "ingress-ready=true" taints: [] - extraMounts: - - hostPath: ./hack/kind-config/containerd/certs.d - containerPath: /etc/containerd/certs.d -containerdConfigPatches: - - |- - [plugins."io.containerd.grpc.v1.cri".registry] - config_path = "/etc/containerd/certs.d" diff --git a/kind-config/kind-config.yaml b/kind-config/kind-config.yaml index 5b5b3b9139..612940900d 100644 --- a/kind-config/kind-config.yaml +++ b/kind-config/kind-config.yaml @@ -3,11 +3,6 @@ kind: Cluster nodes: - role: control-plane extraPortMappings: - # e2e image registry service's NodePort - - containerPort: 30000 - hostPort: 30000 - listenAddress: "127.0.0.1" - protocol: tcp # prometheus metrics service's NodePort - containerPort: 30900 hostPort: 30900 @@ -19,10 +14,3 @@ nodes: apiServer: extraArgs: enable-admission-plugins: OwnerReferencesPermissionEnforcement - extraMounts: - - hostPath: ./hack/kind-config/containerd/certs.d - containerPath: /etc/containerd/certs.d -containerdConfigPatches: - - |- - [plugins."io.containerd.grpc.v1.cri".registry] - config_path = "/etc/containerd/certs.d" diff --git a/test/e2e/README.md b/test/e2e/README.md index a8bd7ba9b6..fa47f47c7b 100644 --- a/test/e2e/README.md +++ b/test/e2e/README.md @@ -32,15 +32,13 @@ test/e2e/ └── steps/ # Step definitions and test utilities ├── steps.go # Step definition implementations ├── hooks.go # Test hooks and scenario context - └── testdata/ # Test data (RBAC templates, catalogs) + └── testdata/ # Test data (RBAC templates) ├── serviceaccount-template.yaml ├── olm-sa-helm-rbac-template.yaml ├── olm-sa-boxcutter-rbac-template.yaml ├── pvc-probe-sa-boxcutter-rbac-template.yaml ├── cluster-admin-rbac-template.yaml - ├── metrics-reader-rbac-template.yaml - ├── test-catalog-template.yaml - └── extra-catalog-template.yaml + └── metrics-reader-rbac-template.yaml ``` ## Architecture @@ -149,7 +147,7 @@ Manages test lifecycle and scenario-specific context. **Variable Substitution:** -Replaces `${TEST_NAMESPACE}`, `${NAME}`, and `${CATALOG_IMG}` with scenario-specific values. +Replaces `${TEST_NAMESPACE}`, `${NAME}`, `${SCENARIO_ID}`, `${PACKAGE:}`, and `${CATALOG:}` with scenario-specific values. ## Writing Tests @@ -203,7 +201,9 @@ Use these variables in YAML templates: - `${NAME}`: Scenario-specific ClusterExtension name (e.g., `ce-123`) - `${COS_NAME}`: Scenario-specific ClusterObjectSet name (e.g., `cos-123`; for applying ClusterObjectSets directly) - `${TEST_NAMESPACE}`: Scenario-specific namespace (e.g., `ns-123`) -- `${CATALOG_IMG}`: Catalog image reference (defaults to in-cluster registry, overridable via `CATALOG_IMG` env var) +- `${SCENARIO_ID}`: Unique scenario identifier used for resource name isolation +- `${PACKAGE:}`: Parameterized package name (e.g., `${PACKAGE:test}` expands to `test-`) +- `${CATALOG:}`: Catalog resource name (e.g., `${CATALOG:test}` expands to `test-catalog-`) ### 5. Feature Tags @@ -277,8 +277,7 @@ go test test/e2e/features_test.go --log.debug --k8s.cli=oc - `KUBECONFIG`: Path to kubeconfig file (defaults to `~/.kube/config`) - `E2E_SUMMARY_OUTPUT`: Path to write test summary (optional) -- `CATALOG_IMG`: Override default catalog image reference (optional) -- `LOCAL_REGISTRY_HOST`: Local registry host for catalog images +- `CLUSTER_REGISTRY_HOST`: In-cluster registry host for pulling catalog images ## Design Patterns @@ -293,8 +292,8 @@ Each scenario runs in its own namespace with unique resource names, ensuring com The `ScenarioCleanup` hook ensures all resources are deleted after each scenario: -- Kills background processes (e.g., kubectl port-forward) -- Deletes ClusterExtensions +- Deletes ClusterExtensions and ClusterObjectSets +- Deletes ClusterCatalogs - Deletes namespaces - Deletes added resources diff --git a/test/e2e/features/install.feature b/test/e2e/features/install.feature index 96b1cbb92f..ceb5e32c23 100644 --- a/test/e2e/features/install.feature +++ b/test/e2e/features/install.feature @@ -5,10 +5,13 @@ Feature: Install ClusterExtension Background: Given OLM is available - And ClusterCatalog "test" serves bundles - And ServiceAccount "olm-sa" with needed permissions is available in test namespace + And an image registry is available Scenario: Install latest available version + Given a catalog "test" with packages: + | package | version | channel | replaces | contents | + | test | 1.2.0 | beta | | CRD, Deployment, ConfigMap | + And ServiceAccount "olm-sa" with needed permissions is available in test namespace When ClusterExtension is applied """ apiVersion: olm.operatorframework.io/v1 @@ -22,20 +25,24 @@ Feature: Install ClusterExtension source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ Then ClusterExtension is rolled out And ClusterExtension is available - And bundle "test-operator.1.2.0" is installed in version "1.2.0" - And resource "networkpolicy/test-operator-network-policy" is installed - And resource "configmap/test-configmap" is installed - And resource "deployment/test-operator" is installed + And bundle "${PACKAGE:test}.1.2.0" is installed in version "1.2.0" + And resource "networkpolicy/test-operator-${SCENARIO_ID}-network-policy" is installed + And resource "configmap/test-configmap-${SCENARIO_ID}" is installed + And resource "deployment/test-operator-${SCENARIO_ID}" is installed @mirrored-registry - Scenario Outline: Install latest available version from mirrored registry + Scenario: Install latest available version from mirrored registry + Given a catalog "test" with packages: + | package | version | channel | replaces | contents | + | test-mirrored | 1.2.0 | beta | | CRD, Deployment, ConfigMap, ClusterRegistry(mirrored-registry.operator-controller-e2e.svc.cluster.local:5000) | + And ServiceAccount "olm-sa" with needed permissions is available in test namespace When ClusterExtension is applied """ apiVersion: olm.operatorframework.io/v1 @@ -49,26 +56,27 @@ Feature: Install ClusterExtension source: sourceType: Catalog catalog: - packageName: + packageName: ${PACKAGE:test-mirrored} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ Then ClusterExtension is rolled out And ClusterExtension is available - And bundle "-operator.1.2.0" is installed in version "1.2.0" - And resource "networkpolicy/test-operator-network-policy" is installed - And resource "configmap/test-configmap" is installed - And resource "deployment/test-operator" is installed - - Examples: - | package-name | - | test-mirrored | - | dynamic | + And bundle "${PACKAGE:test-mirrored}.1.2.0" is installed in version "1.2.0" + And resource "networkpolicy/test-operator-${SCENARIO_ID}-network-policy" is installed + And resource "configmap/test-configmap-${SCENARIO_ID}" is installed + And resource "deployment/test-operator-${SCENARIO_ID}" is installed Scenario: Report that bundle cannot be installed when it exists in multiple catalogs with same priority - Given ClusterCatalog "extra" serves bundles + Given a catalog "test" with packages: + | package | version | channel | replaces | contents | + | test | 1.2.0 | beta | | CRD, Deployment, ConfigMap | + And a catalog "extra" with packages: + | package | version | channel | replaces | contents | + | test | 1.2.0 | beta | | CRD, Deployment, ConfigMap | + And ServiceAccount "olm-sa" with needed permissions is available in test namespace When ClusterExtension is applied """ apiVersion: olm.operatorframework.io/v1 @@ -82,14 +90,17 @@ Feature: Install ClusterExtension source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} """ - Then ClusterExtension reports Progressing as True with Reason Retrying and Message: + Then ClusterExtension reports Progressing as True with Reason Retrying and Message includes: """ - found bundles for package "test" in multiple catalogs with the same priority [extra-catalog test-catalog] + found bundles for package "${PACKAGE:test}" in multiple catalogs with the same priority """ Scenario: Report error when ServiceAccount does not exist + Given a catalog "test" with packages: + | package | version | channel | replaces | contents | + | test | 1.2.0 | beta | | CRD, Deployment, ConfigMap | When ClusterExtension is applied """ apiVersion: olm.operatorframework.io/v1 @@ -103,10 +114,10 @@ Feature: Install ClusterExtension source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ Then ClusterExtension reports Progressing as True with Reason Retrying and Message includes: """ @@ -115,7 +126,10 @@ Feature: Install ClusterExtension @SingleOwnNamespaceInstallSupport Scenario: watchNamespace config is required for extension supporting single namespace - Given ServiceAccount "olm-admin" in test namespace is cluster admin + Given a catalog "test" with packages: + | package | version | channel | replaces | contents | + | single-namespace-operator | 1.0.0 | alpha | | CRD, Deployment, InstallMode(SingleNamespace) | + And ServiceAccount "olm-admin" in test namespace is cluster admin And resource is applied """ apiVersion: v1 @@ -136,14 +150,13 @@ Feature: Install ClusterExtension source: sourceType: Catalog catalog: - packageName: single-namespace-operator + packageName: ${PACKAGE:single-namespace-operator} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ - And ClusterExtension reports Progressing as False with Reason InvalidConfiguration and Message: + And ClusterExtension reports Progressing as False with Reason InvalidConfiguration and Message includes: """ - error for resolved bundle "single-namespace-operator.1.0.0" with version "1.0.0": invalid ClusterExtension configuration: invalid configuration: required field "watchNamespace" is missing """ When ClusterExtension is updated to set config.watchNamespace field @@ -163,18 +176,21 @@ Feature: Install ClusterExtension source: sourceType: Catalog catalog: - packageName: single-namespace-operator + packageName: ${PACKAGE:single-namespace-operator} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ Then ClusterExtension reports Installed as True - And bundle "single-namespace-operator.1.0.0" is installed in version "1.0.0" - And operator "single-namespace-operator" target namespace is "single-namespace-operator-target" + And bundle "${PACKAGE:single-namespace-operator}.1.0.0" is installed in version "1.0.0" + And operator "test-operator-${SCENARIO_ID}" target namespace is "single-namespace-operator-target" @SingleOwnNamespaceInstallSupport Scenario: watchNamespace config is required for extension supporting own namespace - Given ServiceAccount "olm-admin" in test namespace is cluster admin + Given a catalog "test" with packages: + | package | version | channel | replaces | contents | + | own-namespace-operator | 1.0.0 | alpha | | CRD, Deployment, InstallMode(OwnNamespace) | + And ServiceAccount "olm-admin" in test namespace is cluster admin And ClusterExtension is applied without the watchNamespace configuration """ apiVersion: olm.operatorframework.io/v1 @@ -188,16 +204,14 @@ Feature: Install ClusterExtension source: sourceType: Catalog catalog: - packageName: own-namespace-operator + packageName: ${PACKAGE:own-namespace-operator} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ - And ClusterExtension reports Progressing as False with Reason InvalidConfiguration and Message: + And ClusterExtension reports Progressing as False with Reason InvalidConfiguration and Message includes: """ - error for resolved bundle "own-namespace-operator.1.0.0" with version - "1.0.0": invalid ClusterExtension configuration: invalid configuration: required - field "watchNamespace" is missing + invalid ClusterExtension configuration: invalid configuration: required field "watchNamespace" is missing """ And ClusterExtension is updated to include the watchNamespace configuration """ @@ -216,18 +230,14 @@ Feature: Install ClusterExtension source: sourceType: Catalog catalog: - packageName: own-namespace-operator + packageName: ${PACKAGE:own-namespace-operator} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ - And ClusterExtension reports Progressing as False with Reason InvalidConfiguration and Message: + And ClusterExtension reports Progressing as False with Reason InvalidConfiguration and Message includes: """ - error for resolved bundle "own-namespace-operator.1.0.0" with version - "1.0.0": invalid ClusterExtension configuration: invalid configuration: invalid - format for field "watchNamespace": 'some-ns' is not valid ownNamespaceInstallMode: - invalid value "some-ns": must be "${TEST_NAMESPACE}" (the namespace where the - operator is installed) because this operator only supports OwnNamespace install mode + invalid value "some-ns": must be "${TEST_NAMESPACE}" """ When ClusterExtension is updated to set watchNamespace to own namespace value """ @@ -246,18 +256,21 @@ Feature: Install ClusterExtension source: sourceType: Catalog catalog: - packageName: own-namespace-operator + packageName: ${PACKAGE:own-namespace-operator} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ Then ClusterExtension is rolled out And ClusterExtension is available - And operator "own-namespace-operator" target namespace is "${TEST_NAMESPACE}" + And operator "test-operator-${SCENARIO_ID}" target namespace is "${TEST_NAMESPACE}" @WebhookProviderCertManager Scenario: Install operator having webhooks - Given ServiceAccount "olm-admin" in test namespace is cluster admin + Given a catalog "test" with packages: + | package | version | channel | replaces | contents | + | webhook-operator | 0.0.1 | alpha | | StaticBundleDir(testdata/images/bundles/webhook-operator/v0.0.1) | + And ServiceAccount "olm-admin" in test namespace is cluster admin When ClusterExtension is applied """ apiVersion: olm.operatorframework.io/v1 @@ -271,10 +284,10 @@ Feature: Install ClusterExtension source: sourceType: Catalog catalog: - packageName: webhook-operator + packageName: ${PACKAGE:webhook-operator} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ Then ClusterExtension is rolled out And ClusterExtension is available @@ -324,7 +337,10 @@ Feature: Install ClusterExtension @SingleOwnNamespaceInstallSupport Scenario: Report failure when watchNamespace has invalid DNS-1123 name - Given ServiceAccount "olm-admin" in test namespace is cluster admin + Given a catalog "test" with packages: + | package | version | channel | replaces | contents | + | single-namespace-operator | 1.0.0 | alpha | | CRD, Deployment, InstallMode(SingleNamespace) | + And ServiceAccount "olm-admin" in test namespace is cluster admin When ClusterExtension is applied """ apiVersion: olm.operatorframework.io/v1 @@ -342,10 +358,10 @@ Feature: Install ClusterExtension source: sourceType: Catalog catalog: - packageName: single-namespace-operator + packageName: ${PACKAGE:single-namespace-operator} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ Then ClusterExtension reports Progressing as False with Reason InvalidConfiguration and Message includes: """ @@ -355,7 +371,10 @@ Feature: Install ClusterExtension @SingleOwnNamespaceInstallSupport @WebhookProviderCertManager Scenario: Reject watchNamespace for operator that does not support Single/OwnNamespace install modes - Given ServiceAccount "olm-admin" in test namespace is cluster admin + Given a catalog "test" with packages: + | package | version | channel | replaces | contents | + | webhook-operator | 0.0.1 | alpha | | StaticBundleDir(testdata/images/bundles/webhook-operator/v0.0.1) | + And ServiceAccount "olm-admin" in test namespace is cluster admin When ClusterExtension is applied """ apiVersion: olm.operatorframework.io/v1 @@ -373,10 +392,10 @@ Feature: Install ClusterExtension source: sourceType: Catalog catalog: - packageName: webhook-operator + packageName: ${PACKAGE:webhook-operator} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ Then ClusterExtension reports Progressing as False with Reason InvalidConfiguration and Message includes: """ @@ -386,7 +405,11 @@ Feature: Install ClusterExtension @BoxcutterRuntime @ProgressDeadline Scenario: Report ClusterExtension as not progressing if the rollout does not become available within given timeout - Given min value for ClusterExtension .spec.progressDeadlineMinutes is set to 1 + Given a catalog "test" with packages: + | package | version | channel | replaces | contents | + | test | 1.0.2 | alpha | | BadImage | + And ServiceAccount "olm-sa" with needed permissions is available in test namespace + And min value for ClusterExtension .spec.progressDeadlineMinutes is set to 1 And min value for ClusterObjectSet .spec.progressDeadlineMinutes is set to 1 When ClusterExtension is applied """ @@ -402,12 +425,12 @@ Feature: Install ClusterExtension source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} # bundle refers bad image references, so that the deployment never becomes available version: 1.0.2 selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ Then ClusterObjectSet "${NAME}-1" reports Progressing as False with Reason ProgressDeadlineExceeded And ClusterExtension reports Progressing as False with Reason ProgressDeadlineExceeded and Message: @@ -419,7 +442,11 @@ Feature: Install ClusterExtension @BoxcutterRuntime @ProgressDeadline Scenario: Report ClusterExtension as not progressing if the rollout does not complete within given timeout - Given min value for ClusterExtension .spec.progressDeadlineMinutes is set to 1 + Given a catalog "test" with packages: + | package | version | channel | replaces | contents | + | test | 1.0.3 | alpha | | BadImage | + And ServiceAccount "olm-sa" with needed permissions is available in test namespace + And min value for ClusterExtension .spec.progressDeadlineMinutes is set to 1 And min value for ClusterObjectSet .spec.progressDeadlineMinutes is set to 1 When ClusterExtension is applied """ @@ -435,11 +462,11 @@ Feature: Install ClusterExtension source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} version: 1.0.3 selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ Then ClusterObjectSet "${NAME}-1" reports Progressing as False with Reason ProgressDeadlineExceeded And ClusterExtension reports Progressing as False with Reason ProgressDeadlineExceeded and Message: @@ -450,6 +477,10 @@ Feature: Install ClusterExtension @BoxcutterRuntime Scenario: ClusterObjectSet is annotated with bundle properties + Given a catalog "test" with packages: + | package | version | channel | replaces | contents | + | test | 1.2.0 | beta | | CRD, Deployment, ConfigMap, Property(olm.test-property=some-value) | + And ServiceAccount "olm-sa" with needed permissions is available in test namespace When ClusterExtension is applied """ apiVersion: olm.operatorframework.io/v1 @@ -463,11 +494,11 @@ Feature: Install ClusterExtension source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} version: 1.2.0 selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ # The annotation key and value come from the bundle's metadata/properties.yaml file Then ClusterObjectSet "${NAME}-1" contains annotation "olm.properties" with value @@ -477,6 +508,10 @@ Feature: Install ClusterExtension @BoxcutterRuntime Scenario: ClusterObjectSet is labeled with owner information + Given a catalog "test" with packages: + | package | version | channel | replaces | contents | + | test | 1.2.0 | beta | | CRD, Deployment, ConfigMap | + And ServiceAccount "olm-sa" with needed permissions is available in test namespace When ClusterExtension is applied """ apiVersion: olm.operatorframework.io/v1 @@ -490,11 +525,11 @@ Feature: Install ClusterExtension source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} version: 1.2.0 selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ Then ClusterExtension is rolled out And ClusterExtension is available @@ -503,6 +538,10 @@ Feature: Install ClusterExtension @BoxcutterRuntime Scenario: ClusterObjectSet objects are externalized to immutable Secrets + Given a catalog "test" with packages: + | package | version | channel | replaces | contents | + | test | 1.2.0 | beta | | CRD, Deployment, ConfigMap | + And ServiceAccount "olm-sa" with needed permissions is available in test namespace When ClusterExtension is applied """ apiVersion: olm.operatorframework.io/v1 @@ -516,11 +555,11 @@ Feature: Install ClusterExtension source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} version: 1.2.0 selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ Then ClusterExtension is rolled out And ClusterExtension is available @@ -536,6 +575,10 @@ Feature: Install ClusterExtension @DeploymentConfig Scenario: deploymentConfig nodeSelector is applied to the operator deployment + Given a catalog "test" with packages: + | package | version | channel | replaces | contents | + | test | 1.2.0 | beta | | CRD, Deployment, ConfigMap | + And ServiceAccount "olm-sa" with needed permissions is available in test namespace When ClusterExtension is applied """ apiVersion: olm.operatorframework.io/v1 @@ -555,12 +598,12 @@ Feature: Install ClusterExtension source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ - Then resource "deployment/test-operator" matches + Then resource "deployment/test-operator-${SCENARIO_ID}" matches """ spec: template: @@ -571,6 +614,10 @@ Feature: Install ClusterExtension @BoxcutterRuntime Scenario: Install bundle with large CRD + Given a catalog "test" with packages: + | package | version | channel | replaces | contents | + | test | 1.0.0 | beta | | LargeCRD(250), Deployment | + And ServiceAccount "olm-sa" with needed permissions is available in test namespace When ClusterExtension is applied """ apiVersion: olm.operatorframework.io/v1 @@ -584,21 +631,23 @@ Feature: Install ClusterExtension source: sourceType: Catalog catalog: - packageName: large-crd-operator + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ Then ClusterExtension is rolled out And ClusterExtension is available - And bundle "large-crd-operator.1.0.0" is installed in version "1.0.0" - And resource "customresourcedefinition/largecrdtests.largecrd.operatorframework.io" is installed - And resource "deployment/large-crd-operator" is installed + And bundle "${PACKAGE:test}.1.0.0" is installed in version "1.0.0" + And resource "deployment/test-operator-${SCENARIO_ID}" is installed @BoxcutterRuntime @PreflightPermissions Scenario: Boxcutter preflight check detects missing CREATE permissions - Given ServiceAccount "olm-sa" without create permissions is available in test namespace + Given a catalog "test" with packages: + | package | version | channel | replaces | contents | + | test | 1.2.0 | beta | | CRD, Deployment, ConfigMap | + And ServiceAccount "olm-sa" without create permissions is available in test namespace And ClusterExtension is applied """ apiVersion: olm.operatorframework.io/v1 @@ -612,10 +661,10 @@ Feature: Install ClusterExtension source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ And ClusterExtension reports Progressing as True with Reason Retrying and Message includes: """ diff --git a/test/e2e/features/recover.feature b/test/e2e/features/recover.feature index b7610c5dfc..384924482d 100644 --- a/test/e2e/features/recover.feature +++ b/test/e2e/features/recover.feature @@ -2,7 +2,10 @@ Feature: Recover cluster extension from errors that might occur during its lifet Background: Given OLM is available - And ClusterCatalog "test" serves bundles + And an image registry is available + And a catalog "test" with packages: + | package | version | channel | replaces | contents | + | test | 1.2.0 | beta | | CRD, Deployment, ConfigMap | Scenario: Restore removed resource Given ServiceAccount "olm-sa" with needed permissions is available in test namespace @@ -19,15 +22,15 @@ Feature: Recover cluster extension from errors that might occur during its lifet source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ And ClusterExtension is available - And resource "configmap/test-configmap" exists - When resource "configmap/test-configmap" is removed - Then resource "configmap/test-configmap" is eventually restored + And resource "configmap/test-configmap-${SCENARIO_ID}" exists + When resource "configmap/test-configmap-${SCENARIO_ID}" is removed + Then resource "configmap/test-configmap-${SCENARIO_ID}" is eventually restored Scenario: Install ClusterExtension after target namespace becomes available Given ClusterExtension is applied @@ -43,10 +46,10 @@ Feature: Recover cluster extension from errors that might occur during its lifet source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ And ClusterExtension reports Progressing as True with Reason Retrying When ServiceAccount "olm-sa" with needed permissions is available in test namespace @@ -60,17 +63,17 @@ Feature: Recover cluster extension from errors that might occur during its lifet apiVersion: apps/v1 kind: Deployment metadata: - name: test-operator + name: test-operator-${SCENARIO_ID} namespace: ${TEST_NAMESPACE} spec: replicas: 1 selector: matchLabels: - app: test-operator + app: test-operator-${SCENARIO_ID} template: metadata: labels: - app: test-operator + app: test-operator-${SCENARIO_ID} spec: containers: - command: @@ -103,14 +106,14 @@ Feature: Recover cluster extension from errors that might occur during its lifet source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ And ClusterExtension reports Progressing as True with Reason Retrying And ClusterExtension reports Installed as False - When resource "deployment/test-operator" is removed + When resource "deployment/test-operator-${SCENARIO_ID}" is removed Then ClusterExtension is available And ClusterExtension reports Progressing as True with Reason Succeeded And ClusterExtension reports Installed as True @@ -132,18 +135,18 @@ Feature: Recover cluster extension from errors that might occur during its lifet source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ And ClusterExtension reports Progressing as True with Reason Retrying and Message includes: """ - error for resolved bundle "test-operator.1.2.0" with version "1.2.0": creating new Revision: pre-authorization failed: service account requires the following permissions to manage cluster extension: + pre-authorization failed: service account requires the following permissions to manage cluster extension: """ And ClusterExtension reports Progressing as True with Reason Retrying and Message includes: """ - Namespace:"" APIGroups:[apiextensions.k8s.io] Resources:[customresourcedefinitions] ResourceNames:[olme2etests.olm.operatorframework.io] Verbs:[delete,get,patch,update] + Namespace:"" APIGroups:[apiextensions.k8s.io] Resources:[customresourcedefinitions] ResourceNames:[e2e-${SCENARIO_ID}tests.e2e-${SCENARIO_ID}.e2e.operatorframework.io] Verbs:[delete,get,patch,update] """ When ServiceAccount "olm-sa" with needed permissions is available in test namespace Then ClusterExtension is available @@ -151,7 +154,7 @@ Feature: Recover cluster extension from errors that might occur during its lifet And ClusterExtension reports Installed as True # CATALOG DELETION RESILIENCE SCENARIOS - + Scenario: Auto-healing continues working after catalog deletion # This test proves that extensions continue to auto-heal (restore deleted resources) even when # their source catalog is unavailable. We verify this by: @@ -177,19 +180,19 @@ Feature: Recover cluster extension from errors that might occur during its lifet source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ And ClusterExtension is rolled out And ClusterExtension is available - And resource "deployment/test-operator" is available - And resource "configmap/test-configmap" is available - When ClusterCatalog "test" is deleted - And resource "configmap/test-configmap" is removed - Then resource "configmap/test-configmap" is eventually restored - And resource "deployment/test-operator" is available + And resource "deployment/test-operator-${SCENARIO_ID}" is available + And resource "configmap/test-configmap-${SCENARIO_ID}" is available + When catalog "test" is deleted + And resource "configmap/test-configmap-${SCENARIO_ID}" is removed + Then resource "configmap/test-configmap-${SCENARIO_ID}" is eventually restored + And resource "deployment/test-operator-${SCENARIO_ID}" is available Scenario: Spec changes are allowed when catalog is unavailable # This test proves that users can modify extension configuration (non-version changes) even when @@ -217,14 +220,14 @@ Feature: Recover cluster extension from errors that might occur during its lifet source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ And ClusterExtension is rolled out And ClusterExtension is available - And ClusterCatalog "test" is deleted + And catalog "test" is deleted When ClusterExtension is updated to add preflight config """ apiVersion: olm.operatorframework.io/v1 @@ -242,10 +245,10 @@ Feature: Recover cluster extension from errors that might occur during its lifet source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ And ClusterExtension latest generation has been reconciled And ClusterExtension reports Progressing as True with Reason Succeeded diff --git a/test/e2e/features/status.feature b/test/e2e/features/status.feature index 01b0bf7a96..e3621ba623 100644 --- a/test/e2e/features/status.feature +++ b/test/e2e/features/status.feature @@ -5,7 +5,10 @@ Feature: Report status of the managed ClusterExtension workload Background: Given OLM is available - And ClusterCatalog "test" serves bundles + And an image registry is available + And a catalog "test" with packages: + | package | version | channel | replaces | contents | + | test | 1.0.0 | alpha | | CRD, Deployment, ConfigMap | And ServiceAccount "olm-sa" with needed permissions is available in test namespace And ClusterExtension is applied """ @@ -20,10 +23,10 @@ Feature: Report status of the managed ClusterExtension workload source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} version: 1.0.0 """ And ClusterExtension is rolled out @@ -31,15 +34,15 @@ Feature: Report status of the managed ClusterExtension workload @BoxcutterRuntime Scenario: Report availability change when managed workload is not ready - When resource "deployment/test-operator" reports as not ready + When deployment "test-operator-${SCENARIO_ID}" reports as not ready Then ClusterExtension reports Available as False with Reason ProbeFailure And ClusterObjectSet "${NAME}-1" reports Available as False with Reason ProbeFailure @BoxcutterRuntime Scenario: Report availability change when managed workload restores its readiness - Given resource "deployment/test-operator" reports as not ready + Given deployment "test-operator-${SCENARIO_ID}" reports as not ready And ClusterExtension reports Available as False with Reason ProbeFailure And ClusterObjectSet "${NAME}-1" reports Available as False with Reason ProbeFailure - When resource "deployment/test-operator" reports as ready + When deployment "test-operator-${SCENARIO_ID}" reports as ready Then ClusterExtension is available - And ClusterObjectSet "${NAME}-1" reports Available as True with Reason ProbesSucceeded \ No newline at end of file + And ClusterObjectSet "${NAME}-1" reports Available as True with Reason ProbesSucceeded diff --git a/test/e2e/features/uninstall.feature b/test/e2e/features/uninstall.feature index 89290ada68..7401ce1663 100644 --- a/test/e2e/features/uninstall.feature +++ b/test/e2e/features/uninstall.feature @@ -5,7 +5,10 @@ Feature: Uninstall ClusterExtension Background: Given OLM is available - And ClusterCatalog "test" serves bundles + And an image registry is available + And a catalog "test" with packages: + | package | version | channel | replaces | contents | + | test | 1.2.0 | beta | | CRD, Deployment, ConfigMap | And ServiceAccount "olm-sa" with needed permissions is available in test namespace And ClusterExtension is applied """ @@ -20,12 +23,12 @@ Feature: Uninstall ClusterExtension source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ - And bundle "test-operator.1.2.0" is installed in version "1.2.0" + And bundle "${PACKAGE:test}.1.2.0" is installed in version "1.2.0" And ClusterExtension is rolled out And ClusterExtension resources are created and labeled diff --git a/test/e2e/features/update.feature b/test/e2e/features/update.feature index ab9408365e..7815ba8733 100644 --- a/test/e2e/features/update.feature +++ b/test/e2e/features/update.feature @@ -5,7 +5,15 @@ Feature: Update ClusterExtension Background: Given OLM is available - And ClusterCatalog "test" serves bundles + And an image registry is available + And a catalog "test" with packages: + | package | version | channel | replaces | contents | + | test | 1.0.0 | alpha | | CRD, Deployment, ConfigMap | + | test | 1.0.0 | beta | | | + | test | 1.0.1 | beta | 1.0.0 | CRD, Deployment, ConfigMap | + | test | 1.0.2 | alpha | 1.0.0 | BadImage | + | test | 1.0.4 | beta | | CRD, Deployment, ConfigMap | + | test | 1.2.0 | beta | 1.0.1 | CRD, Deployment, ConfigMap | And ServiceAccount "olm-sa" with needed permissions is available in test namespace Scenario: Update to a successor version @@ -22,10 +30,10 @@ Feature: Update ClusterExtension source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} version: 1.0.0 """ And ClusterExtension is rolled out @@ -33,7 +41,7 @@ Feature: Update ClusterExtension When ClusterExtension is updated to version "1.0.1" Then ClusterExtension is rolled out And ClusterExtension is available - And bundle "test-operator.1.0.1" is installed in version "1.0.1" + And bundle "${PACKAGE:test}.1.0.1" is installed in version "1.0.1" Scenario: Cannot update extension to non successor version Given ClusterExtension is applied @@ -49,10 +57,10 @@ Feature: Update ClusterExtension source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} version: 1.0.0 """ And ClusterExtension is rolled out @@ -70,15 +78,15 @@ Feature: Update ClusterExtension source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} version: 1.2.0 """ Then ClusterExtension reports Progressing as True with Reason Retrying and Message: """ - error upgrading from currently installed version "1.0.0": no bundles found for package "test" matching version "1.2.0" + error upgrading from currently installed version "1.0.0": no bundles found for package "${PACKAGE:test}" matching version "1.2.0" """ Scenario: Force update to non successor version @@ -95,10 +103,10 @@ Feature: Update ClusterExtension source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} version: 1.0.0 """ And ClusterExtension is rolled out @@ -116,16 +124,16 @@ Feature: Update ClusterExtension source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} version: 1.2.0 upgradeConstraintPolicy: SelfCertified """ Then ClusterExtension is rolled out And ClusterExtension is available - And bundle "test-operator.1.2.0" is installed in version "1.2.0" + And bundle "${PACKAGE:test}.1.2.0" is installed in version "1.2.0" @catalog-updates Scenario: Auto update when new version becomes available in the new catalog image ref @@ -142,20 +150,23 @@ Feature: Update ClusterExtension source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ And ClusterExtension is rolled out And ClusterExtension is available - And bundle "test-operator.1.2.0" is installed in version "1.2.0" - When ClusterCatalog "test" is updated to version "v2" - Then bundle "test-operator.1.3.0" is installed in version "1.3.0" - + And bundle "${PACKAGE:test}.1.2.0" is installed in version "1.2.0" + And catalog "test" version "v2" with packages: + | package | version | channel | replaces | contents | + | test | 1.3.0 | beta | 1.2.0 | CRD, Deployment, ConfigMap | + When catalog "test" is updated to version "v2" + Then bundle "${PACKAGE:test}.1.3.0" is installed in version "1.3.0" + Scenario: Auto update when new version becomes available in the same catalog image ref - Given "test" catalog image version "v1" is also tagged as "latest" - And ClusterCatalog "test" is updated to version "latest" + Given catalog "test" image version "v1" is also tagged as "latest" + And catalog "test" is updated to version "latest" And ClusterExtension is applied """ apiVersion: olm.operatorframework.io/v1 @@ -169,16 +180,19 @@ Feature: Update ClusterExtension source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ And ClusterExtension is rolled out And ClusterExtension is available - And bundle "test-operator.1.2.0" is installed in version "1.2.0" - When ClusterCatalog "test" image version "v2" is also tagged as "latest" - Then bundle "test-operator.1.3.0" is installed in version "1.3.0" + And bundle "${PACKAGE:test}.1.2.0" is installed in version "1.2.0" + And catalog "test" version "v2" with packages: + | package | version | channel | replaces | contents | + | test | 1.3.0 | beta | 1.2.0 | CRD, Deployment, ConfigMap | + When catalog "test" image version "v2" is also tagged as "latest" + Then bundle "${PACKAGE:test}.1.3.0" is installed in version "1.3.0" @BoxcutterRuntime Scenario: Update to a version with identical bundle content creates a new revision @@ -195,20 +209,20 @@ Feature: Update ClusterExtension source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} version: 1.0.0 upgradeConstraintPolicy: SelfCertified """ And ClusterExtension is rolled out And ClusterExtension is available - And bundle "test-operator.1.0.0" is installed in version "1.0.0" + And bundle "${PACKAGE:test}.1.0.0" is installed in version "1.0.0" When ClusterExtension is updated to version "1.0.4" Then ClusterExtension is rolled out And ClusterExtension is available - And bundle "test-operator.1.0.4" is installed in version "1.0.4" + And bundle "${PACKAGE:test}.1.0.4" is installed in version "1.0.4" @BoxcutterRuntime Scenario: Detect collision when a second ClusterExtension installs the same package after an upgrade @@ -225,10 +239,10 @@ Feature: Update ClusterExtension source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} version: 1.0.0 """ And ClusterExtension is rolled out @@ -236,7 +250,7 @@ Feature: Update ClusterExtension When ClusterExtension is updated to version "1.0.1" Then ClusterExtension is rolled out And ClusterExtension is available - And bundle "test-operator.1.0.1" is installed in version "1.0.1" + And bundle "${PACKAGE:test}.1.0.1" is installed in version "1.0.1" And the current ClusterExtension is tracked for cleanup When ClusterExtension is applied """ @@ -251,10 +265,10 @@ Feature: Update ClusterExtension source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} version: 1.0.1 """ Then ClusterExtension reports Progressing as True with Reason Retrying and Message includes: @@ -277,17 +291,17 @@ Feature: Update ClusterExtension source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} version: 1.0.0 upgradeConstraintPolicy: SelfCertified """ And ClusterExtension is rolled out And ClusterExtension is available When ClusterExtension is updated to version "1.2.0" - Then bundle "test-operator.1.2.0" is installed in version "1.2.0" + Then bundle "${PACKAGE:test}.1.2.0" is installed in version "1.2.0" And ClusterExtension is rolled out And ClusterExtension is available And ClusterExtension reports "${NAME}-2" as active revision @@ -311,10 +325,10 @@ Feature: Update ClusterExtension source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} version: 1.0.0 upgradeConstraintPolicy: SelfCertified """ @@ -324,4 +338,3 @@ Feature: Update ClusterExtension Then ClusterExtension reports "${NAME}-1, ${NAME}-2" as active revisions And ClusterObjectSet "${NAME}-2" reports Progressing as True with Reason RollingOut And ClusterObjectSet "${NAME}-2" reports Available as False with Reason ProbeFailure - diff --git a/test/e2e/features/user-managed-fields.feature b/test/e2e/features/user-managed-fields.feature index 6c830bbe34..cdd00317c2 100644 --- a/test/e2e/features/user-managed-fields.feature +++ b/test/e2e/features/user-managed-fields.feature @@ -6,7 +6,10 @@ Feature: Preserve user-managed fields on deployed resources Background: Given OLM is available - And ClusterCatalog "test" serves bundles + And an image registry is available + And a catalog "test" with packages: + | package | version | channel | replaces | contents | + | test | 1.2.0 | beta | | CRD, Deployment, ConfigMap | And ServiceAccount "olm-sa" with needed permissions is available in test namespace And ClusterExtension is applied """ @@ -21,42 +24,42 @@ Feature: Preserve user-managed fields on deployed resources source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} """ And ClusterExtension is rolled out And ClusterExtension is available - And resource "deployment/test-operator" is available + And resource "deployment/test-operator-${SCENARIO_ID}" is available Scenario: User-added annotations and labels coexist with bundle-defined labels after reconciliation # The bundle defines labels on the deployment via the CSV spec; verify they are present - Given resource "deployment/test-operator" has labels - | key | value | - | app.kubernetes.io/name | test-operator | - When annotations are added to "deployment/test-operator" + Given resource "deployment/test-operator-${SCENARIO_ID}" has labels + | key | value | + | app.kubernetes.io/name | test-operator-${SCENARIO_ID} | + When annotations are added to "deployment/test-operator-${SCENARIO_ID}" | key | value | | example.com/custom-annotation | my-value | - And labels are added to "deployment/test-operator" + And labels are added to "deployment/test-operator-${SCENARIO_ID}" | key | value | | example.com/custom-label | my-value | And ClusterExtension reconciliation is triggered And ClusterExtension has been reconciled the latest generation - Then resource "deployment/test-operator" has annotations + Then resource "deployment/test-operator-${SCENARIO_ID}" has annotations | key | value | | example.com/custom-annotation | my-value | - And resource "deployment/test-operator" has labels - | key | value | - | example.com/custom-label | my-value | - | app.kubernetes.io/name | test-operator | + And resource "deployment/test-operator-${SCENARIO_ID}" has labels + | key | value | + | example.com/custom-label | my-value | + | app.kubernetes.io/name | test-operator-${SCENARIO_ID} | Scenario: Deployment rollout restart persists after OLM reconciliation - When rollout restart is performed on "deployment/test-operator" - Then deployment "test-operator" pod template has annotation "kubectl.kubernetes.io/restartedAt" - And deployment "test-operator" rollout is complete - And deployment "test-operator" has 2 replica sets + When rollout restart is performed on "deployment/test-operator-${SCENARIO_ID}" + Then deployment "test-operator-${SCENARIO_ID}" pod template has annotation "kubectl.kubernetes.io/restartedAt" + And deployment "test-operator-${SCENARIO_ID}" rollout is complete + And deployment "test-operator-${SCENARIO_ID}" has 2 replica sets When ClusterExtension reconciliation is triggered And ClusterExtension has been reconciled the latest generation - Then deployment "test-operator" pod template has annotation "kubectl.kubernetes.io/restartedAt" - And deployment "test-operator" rollout is complete + Then deployment "test-operator-${SCENARIO_ID}" pod template has annotation "kubectl.kubernetes.io/restartedAt" + And deployment "test-operator-${SCENARIO_ID}" rollout is complete diff --git a/test/e2e/features_test.go b/test/e2e/features_test.go index 8e38128794..4cea3f945f 100644 --- a/test/e2e/features_test.go +++ b/test/e2e/features_test.go @@ -18,7 +18,7 @@ var opts = godog.Options{ Format: "pretty", Paths: []string{"features"}, Output: colors.Colored(os.Stdout), - Concurrency: 1, + Concurrency: 100, NoColors: true, } diff --git a/test/e2e/steps/hooks.go b/test/e2e/steps/hooks.go index 5d73bcbed2..6a9bb8c10e 100644 --- a/test/e2e/steps/hooks.go +++ b/test/e2e/steps/hooks.go @@ -8,6 +8,7 @@ import ( "os/exec" "regexp" "strconv" + "sync" "github.com/cucumber/godog" "github.com/go-logr/logr" @@ -32,10 +33,10 @@ type scenarioContext struct { namespace string clusterExtensionName string clusterObjectSetName string - clusterCatalogName string + catalogs map[string]string // user-chosen name -> ClusterCatalog resource name + catalogPackageNames map[string]string // original package name -> parameterized name addedResources []resource removedResources []unstructured.Unstructured - backGroundCmds []*exec.Cmd metricsResponse map[string]string leaderPods map[string]string // component name -> leader pod name @@ -158,6 +159,9 @@ func CreateScenarioContext(ctx context.Context, sc *godog.Scenario) (context.Con namespace: fmt.Sprintf("ns-%s", sc.Id), clusterExtensionName: fmt.Sprintf("ce-%s", sc.Id), clusterObjectSetName: fmt.Sprintf("cos-%s", sc.Id), + catalogs: make(map[string]string), + catalogPackageNames: make(map[string]string), + metricsResponse: make(map[string]string), leaderPods: make(map[string]string), } return context.WithValue(ctx, scenarioContextKey, scCtx), nil @@ -177,11 +181,6 @@ func stderrOutput(err error) string { func ScenarioCleanup(ctx context.Context, _ *godog.Scenario, err error) (context.Context, error) { sc := scenarioCtx(ctx) - for _, bgCmd := range sc.backGroundCmds { - if p := bgCmd.Process; p != nil { - _ = p.Kill() - } - } if err != nil { return ctx, err } @@ -193,9 +192,16 @@ func ScenarioCleanup(ctx context.Context, _ *godog.Scenario, err error) (context if sc.clusterObjectSetName != "" { forDeletion = append(forDeletion, resource{name: sc.clusterObjectSetName, kind: "clusterobjectset"}) } + for _, catalogName := range sc.catalogs { + forDeletion = append(forDeletion, resource{name: catalogName, kind: "clustercatalog"}) + } forDeletion = append(forDeletion, resource{name: sc.namespace, kind: "namespace"}) + + var wg sync.WaitGroup for _, r := range forDeletion { + wg.Add(1) go func(res resource) { + defer wg.Done() args := []string{"delete", res.kind, res.name, "--ignore-not-found=true"} if res.namespace != "" { args = append(args, "-n", res.namespace) @@ -205,5 +211,6 @@ func ScenarioCleanup(ctx context.Context, _ *godog.Scenario, err error) (context } }(r) } + wg.Wait() return ctx, nil } diff --git a/test/e2e/steps/steps.go b/test/e2e/steps/steps.go index c9748d99d3..28efddb19f 100644 --- a/test/e2e/steps/steps.go +++ b/test/e2e/steps/steps.go @@ -15,6 +15,7 @@ import ( "path/filepath" "reflect" "runtime" + "strconv" "strings" "sync" "time" @@ -36,11 +37,16 @@ import ( k8sresource "k8s.io/cli-runtime/pkg/resource" "k8s.io/component-base/featuregate" "k8s.io/utils/ptr" + ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/yaml" + "github.com/operator-framework/api/pkg/operators/v1alpha1" + ocv1 "github.com/operator-framework/operator-controller/api/v1" "github.com/operator-framework/operator-controller/internal/operator-controller/features" + "github.com/operator-framework/operator-controller/test/internal/catalog" + testregistry "github.com/operator-framework/operator-controller/test/internal/registry" ) const ( @@ -54,24 +60,40 @@ var ( kubeconfigPath string k8sCli string deployImageRegistry = sync.OnceValue(func() error { - if os.Getenv("KIND_CLUSTER_NAME") == "" { + // Only deploy the registry on kind clusters + providerID, err := k8sClient("get", "nodes", "-o", "jsonpath={.items[0].spec.providerID}") + if err != nil || !strings.HasPrefix(providerID, "kind://") { return nil } - cmd := exec.Command("bash", "-c", "make image-registry") - dir, _ := os.LookupEnv("ROOT_DIR") - if dir == "" { - return fmt.Errorf("ROOT_DIR environment variable not set") + + cfg, err := ctrl.GetConfig() + if err != nil { + return fmt.Errorf("failed to get kubeconfig: %w", err) } - cmd.Dir = dir - cmd.Env = append(os.Environ(), fmt.Sprintf("KUBECONFIG=%s", kubeconfigPath)) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - return cmd.Run() + return testregistry.Deploy(context.Background(), cfg, testregistry.DefaultNamespace, testregistry.DefaultName) + }) + startRegistryPortForward = sync.OnceValues(func() (string, error) { + if err := deployImageRegistry(); err != nil { + return "", err + } + cfg, err := ctrl.GetConfig() + if err != nil { + return "", fmt.Errorf("failed to get kubeconfig: %w", err) + } + // Port-forward lives for the duration of the test process; + // the stop function is not needed because the goroutine is + // cleaned up on process exit. + localAddr, _, err := testregistry.PortForward(context.Background(), cfg, testregistry.DefaultNamespace, testregistry.DefaultName) + if err != nil { + return "", fmt.Errorf("failed to start port-forward to registry: %w", err) + } + return localAddr, nil }) ) func RegisterSteps(sc *godog.ScenarioContext) { sc.Step(`^OLM is available$`, OLMisAvailable) + sc.Step(`^(?i)an image registry is available$`, ImageRegistryIsAvailable) sc.Step(`^(?i)bundle "([^"]+)" is installed in version "([^"]+)"$`, BundleInstalled) sc.Step(`^(?i)ClusterExtension is applied(?:\s+.*)?$`, ResourceIsApplied) @@ -112,7 +134,7 @@ func RegisterSteps(sc *godog.ScenarioContext) { sc.Step(`^(?i)resource "([^"]+)" is (?:eventually not found|not installed)$`, ResourceEventuallyNotFound) sc.Step(`^(?i)resource "([^"]+)" exists$`, ResourceAvailable) sc.Step(`^(?i)resource is applied$`, ResourceIsApplied) - sc.Step(`^(?i)resource "deployment/test-operator" reports as (not ready|ready)$`, MarkTestOperatorNotReady) + sc.Step(`^(?i)deployment "([^"]+)" reports as (not ready|ready)$`, MarkDeploymentReadiness) sc.Step(`^(?i)resource apply fails with error msg containing "([^"]+)"$`, ResourceApplyFails) sc.Step(`^(?i)resource "([^"]+)" is eventually restored$`, ResourceRestored) @@ -135,13 +157,11 @@ func RegisterSteps(sc *godog.ScenarioContext) { sc.Step(`^(?i)ServiceAccount "([^"]+)" in test namespace has permissions to fetch "([^"]+)" metrics$`, ServiceAccountWithFetchMetricsPermissions) sc.Step(`^(?i)ServiceAccount "([^"]+)" sends request to "([^"]+)" endpoint of "([^"]+)" service$`, SendMetricsRequest) - sc.Step(`^"([^"]+)" catalog is updated to version "([^"]+)"$`, CatalogIsUpdatedToVersion) - sc.Step(`^(?i)ClusterCatalog "([^"]+)" is updated to version "([^"]+)"$`, CatalogIsUpdatedToVersion) - sc.Step(`^"([^"]+)" catalog serves bundles$`, CatalogServesBundles) - sc.Step(`^(?i)ClusterCatalog "([^"]+)" serves bundles$`, CatalogServesBundles) - sc.Step(`^"([^"]+)" catalog image version "([^"]+)" is also tagged as "([^"]+)"$`, TagCatalogImage) - sc.Step(`^(?i)ClusterCatalog "([^"]+)" image version "([^"]+)" is also tagged as "([^"]+)"$`, TagCatalogImage) - sc.Step(`^(?i)ClusterCatalog "([^"]+)" is deleted$`, CatalogIsDeleted) + sc.Step(`^(?i)catalog "([^"]+)" is deleted$`, ScenarioCatalogIsDeleted) + sc.Step(`^(?i)catalog "([^"]+)" is updated to version "([^"]+)"$`, ScenarioCatalogIsUpdatedToVersion) + sc.Step(`^(?i)catalog "([^"]+)" version "([^"]+)" with packages:$`, CatalogVersionWithPackages) + sc.Step(`^(?i)catalog "([^"]+)" image version "([^"]+)" is also tagged as "([^"]+)"$`, ScenarioCatalogTagImage) + sc.Step(`^(?i)a catalog "([^"]+)" with packages:$`, CatalogWithPackages) sc.Step(`^(?i)operator "([^"]+)" target namespace is "([^"]+)"$`, OperatorTargetNamespace) sc.Step(`^(?i)Prometheus metrics are returned in the response$`, PrometheusMetricsAreReturned) @@ -155,8 +175,9 @@ func RegisterSteps(sc *godog.ScenarioContext) { sc.Step(`^(?i)OLM is upgraded$`, OLMIsUpgraded) sc.Step(`^(?i)(catalogd|operator-controller) is ready to reconcile resources$`, ComponentIsReadyToReconcile) sc.Step(`^(?i)all (ClusterCatalog|ClusterExtension) resources are reconciled$`, allResourcesAreReconciled) - sc.Step(`^(?i)(ClusterCatalog|ClusterExtension) is reconciled$`, ResourceTypeIsReconciled) - sc.Step(`^(?i)ClusterCatalog reports ([[:alnum:]]+) as ([[:alnum:]]+) with Reason ([[:alnum:]]+)$`, ClusterCatalogReportsCondition) + sc.Step(`^(?i)ClusterExtension is reconciled$`, ClusterExtensionIsReconciled) + sc.Step(`^(?i)catalog "([^"]+)" is reconciled$`, ScenarioCatalogIsReconciled) + sc.Step(`^(?i)catalog "([^"]+)" reports ([[:alnum:]]+) as ([[:alnum:]]+) with Reason ([[:alnum:]]+)$`, ScenarioCatalogReportsCondition) } func init() { @@ -194,6 +215,43 @@ func k8scliWithInput(yaml string, args ...string) (string, error) { return string(b), err } +// projectRootDir finds the project root by walking up from the source file until go.mod is found. +func projectRootDir() string { + _, thisFile, _, _ := runtime.Caller(0) + dir := filepath.Dir(thisFile) + for { + if _, err := os.Stat(filepath.Join(dir, "go.mod")); err == nil { + return dir + } + parent := filepath.Dir(dir) + if parent == dir { + panic("could not find project root (no go.mod found)") + } + dir = parent + } +} + +// registryHosts returns the local and in-cluster registry addresses. +// The local address is obtained by port-forwarding to the in-cluster registry, +// which works regardless of the cluster's network topology. +func registryHosts() (string, string, error) { + local, err := startRegistryPortForward() + if err != nil { + return "", "", fmt.Errorf("failed to get local registry address: %w", err) + } + cluster := os.Getenv("CLUSTER_REGISTRY_HOST") + if cluster == "" { + cluster = "docker-registry.operator-controller-e2e.svc.cluster.local:5000" + } + return local, cluster, nil +} + +// ImageRegistryIsAvailable ensures the in-cluster image registry is deployed and ready. +// This is needed for scenarios that build and push per-scenario catalog images. +func ImageRegistryIsAvailable() error { + return deployImageRegistry() +} + // OLMisAvailable waits for the OLM operator-controller deployment to become available. Polls with timeout. func OLMisAvailable(ctx context.Context) error { require.Eventually(godog.T(ctx), func() bool { @@ -209,6 +267,7 @@ func OLMisAvailable(ctx context.Context) error { // BundleInstalled waits for the ClusterExtension to report the specified bundle name and version as installed. Polls with timeout. func BundleInstalled(ctx context.Context, name, version string) error { sc := scenarioCtx(ctx) + name = substituteScenarioVars(name, sc) waitFor(ctx, func() bool { v, err := k8sClient("get", "clusterextension", sc.clusterExtensionName, "-o", "jsonpath={.status.install.bundle}") if err != nil { @@ -236,10 +295,13 @@ func substituteScenarioVars(content string, sc *scenarioContext) string { "TEST_NAMESPACE": sc.namespace, "NAME": sc.clusterExtensionName, "COS_NAME": sc.clusterObjectSetName, - "CATALOG_IMG": "docker-registry.operator-controller-e2e.svc.cluster.local:5000/e2e/test-catalog:v1", + "SCENARIO_ID": sc.id, } - if v, found := os.LookupEnv("CATALOG_IMG"); found { - vars["CATALOG_IMG"] = v + for orig, param := range sc.catalogPackageNames { + vars[fmt.Sprintf("PACKAGE:%s", orig)] = param + } + for name, catalogName := range sc.catalogs { + vars[fmt.Sprintf("CATALOG:%s", name)] = catalogName } return templateContent(content, vars) } @@ -865,13 +927,10 @@ func ClusterObjectSetReferredSecretsContainLabels(ctx context.Context, revisionN sc := scenarioCtx(ctx) revisionName = substituteScenarioVars(strings.TrimSpace(revisionName), sc) - expected, err := parseKeyValueTable(table) + expected, err := parseKeyValueTable(table, sc) if err != nil { return fmt.Errorf("invalid labels table: %w", err) } - for k, v := range expected { - expected[k] = substituteScenarioVars(v, sc) - } waitFor(ctx, func() bool { secrets, err := listReferredSecrets(ctx, revisionName) @@ -1169,17 +1228,33 @@ func applyPermissionsToServiceAccount(ctx context.Context, serviceAccount, rbacT }, keyValue...) _, thisFile, _, _ := runtime.Caller(0) - yaml, err := templateYaml(filepath.Join(filepath.Dir(thisFile), "testdata", rbacTemplate), vars) + rbacYaml, err := templateYaml(filepath.Join(filepath.Dir(thisFile), "testdata", rbacTemplate), vars) if err != nil { return fmt.Errorf("failed to template RBAC yaml: %v", err) } // Apply the RBAC configuration - _, err = k8scliWithInput(yaml, "apply", "-f", "-") + _, err = k8scliWithInput(rbacYaml, "apply", "-f", "-") if err != nil { return fmt.Errorf("failed to apply RBAC configuration: %v: %s", err, stderrOutput(err)) } + // Track cluster-scoped RBAC resources for cleanup + for _, doc := range strings.Split(rbacYaml, "---") { + doc = strings.TrimSpace(doc) + if doc == "" { + continue + } + res, err := toUnstructured(doc) + if err != nil { + continue + } + kind := res.GetKind() + if kind == "ClusterRole" || kind == "ClusterRoleBinding" { + sc.addedResources = append(sc.addedResources, resource{name: res.GetName(), kind: strings.ToLower(kind)}) + } + } + return nil } @@ -1219,6 +1294,7 @@ func ServiceAccountWithoutCreatePermissionsIsAvailableInTestNamespace(ctx contex // ServiceAccountWithNeededPermissionsIsAvailableInGivenNamespace creates a ServiceAccount and enables creation of any cluster extension on behalf of this account. func ServiceAccountWithNeededPermissionsIsAvailableInGivenNamespace(ctx context.Context, serviceAccount string, ns string) error { sc := scenarioCtx(ctx) + ns = substituteScenarioVars(ns, sc) sc.addedResources = append(sc.addedResources, resource{name: ns, kind: "namespace"}) if err := applyServiceAccount(ctx, serviceAccount, "TEST_NAMESPACE", ns); err != nil { return err @@ -1349,9 +1425,58 @@ func SendMetricsRequest(ctx context.Context, serviceAccount string, endpoint str return nil } -// CatalogIsUpdatedToVersion patches the ClusterCatalog's image reference to the specified version tag. -func CatalogIsUpdatedToVersion(name, version string) error { - ref, err := k8sClient("get", "clustercatalog", fmt.Sprintf("%s-catalog", name), "-o", "jsonpath={.spec.source.image.ref}") +// ScenarioCatalogIsDeleted deletes a named per-scenario ClusterCatalog and waits for it to be removed. +func ScenarioCatalogIsDeleted(ctx context.Context, catalogUserName string) error { + sc := scenarioCtx(ctx) + catalogName, ok := sc.catalogs[catalogUserName] + if !ok { + return fmt.Errorf("no catalog %q has been created for this scenario", catalogUserName) + } + _, err := k8sClient("delete", "clustercatalog", catalogName, "--ignore-not-found=true", "--wait=true") + if err != nil { + return fmt.Errorf("failed to delete catalog %q: %v", catalogUserName, err) + } + return nil +} + +// CatalogVersionWithPackages builds an additional version of a per-scenario catalog image. +// It pushes a new catalog image with the specified tag but does NOT update the ClusterCatalog. +// Use ScenarioCatalogIsUpdatedToVersion to patch the ClusterCatalog to use the new version. +func CatalogVersionWithPackages(ctx context.Context, catalogUserName, version string, table *godog.Table) error { + sc := scenarioCtx(ctx) + + pkgOpts, err := parseCatalogTable(table) + if err != nil { + return err + } + + cat := catalog.NewCatalog(catalogUserName, sc.id, pkgOpts...) + localRegistry, clusterRegistry, err := registryHosts() + if err != nil { + return err + } + + result, err := cat.Build(ctx, version, localRegistry, clusterRegistry) + if err != nil { + return fmt.Errorf("failed to build catalog version %s: %w", version, err) + } + + // Accumulate package names (bundles may differ between versions) + for orig, param := range result.PackageNames { + sc.catalogPackageNames[orig] = param + } + + return nil +} + +// ScenarioCatalogIsUpdatedToVersion patches a named per-scenario ClusterCatalog's image ref to a new version tag. +func ScenarioCatalogIsUpdatedToVersion(ctx context.Context, catalogUserName, version string) error { + sc := scenarioCtx(ctx) + catalogName, ok := sc.catalogs[catalogUserName] + if !ok { + return fmt.Errorf("no catalog %q has been created for this scenario", catalogUserName) + } + ref, err := k8sClient("get", "clustercatalog", catalogName, "-o", "jsonpath={.spec.source.image.ref}") if err != nil { return err } @@ -1373,48 +1498,196 @@ func CatalogIsUpdatedToVersion(name, version string) error { if err != nil { return err } - _, err = k8sClient("patch", "clustercatalog", fmt.Sprintf("%s-catalog", name), "--type", "merge", "-p", string(pb)) + _, err = k8sClient("patch", "clustercatalog", catalogName, "--type", "merge", "-p", string(pb)) return err } -// CatalogServesBundles applies the ClusterCatalog YAML template to create a catalog that serves bundles. -func CatalogServesBundles(ctx context.Context, catalogName string) error { - if err := deployImageRegistry(); err != nil { +// ScenarioCatalogTagImage tags an existing per-scenario catalog image with a new tag. +func ScenarioCatalogTagImage(ctx context.Context, catalogUserName, oldTag, newTag string) error { + localRegistry, _, err := registryHosts() + if err != nil { return err } sc := scenarioCtx(ctx) - sc.clusterCatalogName = fmt.Sprintf("%s-catalog", catalogName) + imageRef := fmt.Sprintf("%s/e2e/%s-catalog-%s:%s", localRegistry, catalogUserName, sc.id, oldTag) + return crane.Tag(imageRef, newTag, crane.Insecure) +} - _, thisFile, _, _ := runtime.Caller(0) - yamlContent, err := os.ReadFile(filepath.Join(filepath.Dir(thisFile), "testdata", fmt.Sprintf("%s-catalog-template.yaml", catalogName))) - if err != nil { - return fmt.Errorf("failed to read catalog yaml: %v", err) +// parseCatalogTable parses a Gherkin data table into catalog.PackageOption slices. +// Table columns: package | version | channel | replaces | contents +func parseCatalogTable(table *godog.Table) ([]catalog.PackageOption, error) { + type bundleKey struct { + pkg string + version string + } + type bundleEntry struct { + opts []catalog.BundleOption + } + type channelEntry struct { + version string + replaces string } - _, err = k8scliWithInput(substituteScenarioVars(string(yamlContent), sc), "apply", "-f", "-") - if err != nil { - return fmt.Errorf("failed to apply catalog: %v", err) + bundleDefs := make(map[bundleKey]*bundleEntry) + var bundleOrder []bundleKey + packageChannels := make(map[string]map[string][]channelEntry) + var packageOrder []string + packageSeen := make(map[string]bool) + + for _, row := range table.Rows[1:] { // skip header + pkg := row.Cells[0].Value + version := row.Cells[1].Value + channel := row.Cells[2].Value + replaces := row.Cells[3].Value + contents := row.Cells[4].Value + + if !packageSeen[pkg] { + packageOrder = append(packageOrder, pkg) + packageSeen[pkg] = true + } + + bk := bundleKey{pkg: pkg, version: version} + if _, exists := bundleDefs[bk]; exists { + if strings.TrimSpace(contents) != "" { + return nil, fmt.Errorf("duplicate bundle %s/%s: contents must be empty for repeated versions", pkg, version) + } + } else { + opts := parseContents(contents) + bundleDefs[bk] = &bundleEntry{opts: opts} + bundleOrder = append(bundleOrder, bk) + } + + if packageChannels[pkg] == nil { + packageChannels[pkg] = make(map[string][]channelEntry) + } + packageChannels[pkg][channel] = append(packageChannels[pkg][channel], channelEntry{ + version: version, + replaces: replaces, + }) } - return nil -} + var pkgOpts []catalog.PackageOption + for _, pkgName := range packageOrder { + var opts []catalog.PackageOption -// TagCatalogImage adds a new tag to a catalog container image in the local registry using crane. -func TagCatalogImage(name, oldTag, newTag string) error { - imageRef := fmt.Sprintf("%s/%s", os.Getenv("LOCAL_REGISTRY_HOST"), fmt.Sprintf("e2e/%s-catalog:%s", name, oldTag)) - return crane.Tag(imageRef, newTag, crane.Insecure) + for _, bk := range bundleOrder { + if bk.pkg == pkgName { + opts = append(opts, catalog.Bundle(bk.version, bundleDefs[bk].opts...)) + } + } + + for chName, entries := range packageChannels[pkgName] { + var chOpts []catalog.ChannelOption + for _, e := range entries { + if e.replaces != "" { + chOpts = append(chOpts, catalog.Entry(e.version, catalog.Replaces(e.replaces))) + } else { + chOpts = append(chOpts, catalog.Entry(e.version)) + } + } + opts = append(opts, catalog.Channel(chName, chOpts...)) + } + + pkgOpts = append(pkgOpts, catalog.WithPackage(pkgName, opts...)) + } + return pkgOpts, nil } -// CatalogIsDeleted deletes the named ClusterCatalog resource and waits for it to be removed. -func CatalogIsDeleted(ctx context.Context, catalogName string) error { - catalogFullName := fmt.Sprintf("%s-catalog", catalogName) - _, err := k8sClient("delete", "clustercatalog", catalogFullName, "--ignore-not-found=true", "--wait=true") +// CatalogWithPackages builds a per-scenario catalog from a Gherkin data table. +// Table columns: package | version | channel | replaces | contents +func CatalogWithPackages(ctx context.Context, catalogUserName string, table *godog.Table) error { + sc := scenarioCtx(ctx) + + pkgOpts, err := parseCatalogTable(table) + if err != nil { + return err + } + + cat := catalog.NewCatalog(catalogUserName, sc.id, pkgOpts...) + localRegistry, clusterRegistry, err := registryHosts() + if err != nil { + return err + } + + result, err := cat.Build(ctx, "v1", localRegistry, clusterRegistry) if err != nil { - return fmt.Errorf("failed to delete catalog: %v", err) + return fmt.Errorf("failed to build catalog: %w", err) } + + sc.catalogs[catalogUserName] = result.CatalogName + for orig, param := range result.PackageNames { + sc.catalogPackageNames[orig] = param + } + + catalogYAML := fmt.Sprintf(`apiVersion: olm.operatorframework.io/v1 +kind: ClusterCatalog +metadata: + name: %s +spec: + priority: 0 + source: + type: Image + image: + pollIntervalMinutes: 1 + ref: %s +`, result.CatalogName, result.CatalogImageRef) + + if _, err := k8scliWithInput(catalogYAML, "apply", "-f", "-"); err != nil { + return fmt.Errorf("failed to apply ClusterCatalog: %w", err) + } + return nil } +func parseContents(contents string) []catalog.BundleOption { + contents = strings.TrimSpace(contents) + if contents == "" { + return nil + } + if strings.EqualFold(contents, "BadImage") { + return []catalog.BundleOption{catalog.BadImage()} + } + var opts []catalog.BundleOption + for _, part := range strings.Split(contents, ",") { + part = strings.TrimSpace(part) + switch { + case part == "CRD": + opts = append(opts, catalog.WithCRD()) + case part == "Deployment": + opts = append(opts, catalog.WithDeployment()) + case part == "ConfigMap": + opts = append(opts, catalog.WithConfigMap()) + case strings.HasPrefix(part, "Property(") && strings.HasSuffix(part, ")"): + // Property(type=value) + inner := part[len("Property(") : len(part)-1] + if k, v, ok := strings.Cut(inner, "="); ok { + opts = append(opts, catalog.WithBundleProperty(k, v)) + } + case strings.HasPrefix(part, "InstallMode(") && strings.HasSuffix(part, ")"): + // InstallMode(SingleNamespace) or InstallMode(OwnNamespace) + mode := part[len("InstallMode(") : len(part)-1] + opts = append(opts, catalog.WithInstallMode(v1alpha1.InstallModeType(mode))) + case strings.HasPrefix(part, "LargeCRD(") && strings.HasSuffix(part, ")"): + // LargeCRD(250) + countStr := part[len("LargeCRD(") : len(part)-1] + count, err := strconv.Atoi(countStr) + if err == nil { + opts = append(opts, catalog.WithLargeCRD(count)) + } + case strings.HasPrefix(part, "ClusterRegistry(") && strings.HasSuffix(part, ")"): + // ClusterRegistry(mirrored-registry.operator-controller-e2e.svc.cluster.local:5000) + host := part[len("ClusterRegistry(") : len(part)-1] + opts = append(opts, catalog.WithClusterRegistry(host)) + case strings.HasPrefix(part, "StaticBundleDir(") && strings.HasSuffix(part, ")"): + // StaticBundleDir(testdata/images/bundles/webhook-operator/v0.0.1) + dir := part[len("StaticBundleDir(") : len(part)-1] + absDir := filepath.Join(projectRootDir(), dir) + opts = append(opts, catalog.StaticBundleDir(absDir)) + } + } + return opts +} + // PrometheusMetricsAreReturned validates that each pod's stored metrics response is non-empty and parses as valid Prometheus text format. func PrometheusMetricsAreReturned(ctx context.Context) error { sc := scenarioCtx(ctx) @@ -1437,6 +1710,7 @@ func PrometheusMetricsAreReturned(ctx context.Context) error { // OperatorTargetNamespace asserts that the operator deployment has the expected olm.targetNamespaces annotation. func OperatorTargetNamespace(ctx context.Context, operator, namespace string) error { sc := scenarioCtx(ctx) + operator = substituteScenarioVars(operator, sc) namespace = substituteScenarioVars(namespace, sc) raw, err := k8sClient("get", "deployment", "-n", sc.namespace, operator, "-o", "json") if err != nil { @@ -1453,10 +1727,11 @@ func OperatorTargetNamespace(ctx context.Context, operator, namespace string) er return nil } -// MarkTestOperatorNotReady controls the test-operator's readiness probe by removing or creating the readiness file in its pod. -func MarkTestOperatorNotReady(ctx context.Context, state string) error { +// MarkDeploymentReadiness controls a deployment's readiness probe by removing or creating the readiness file in its pod. +func MarkDeploymentReadiness(ctx context.Context, deploymentName, state string) error { sc := scenarioCtx(ctx) - v, err := k8sClient("get", "deployment", "-n", sc.namespace, "test-operator", "-o", "jsonpath={.spec.selector.matchLabels}") + deploymentName = substituteScenarioVars(deploymentName, sc) + v, err := k8sClient("get", "deployment", "-n", sc.namespace, deploymentName, "-o", "jsonpath={.spec.selector.matchLabels}") if err != nil { return err } @@ -1761,7 +2036,7 @@ func AnnotationsAreAdded(ctx context.Context, resourceName string, table *godog. sc := scenarioCtx(ctx) resourceName = substituteScenarioVars(resourceName, sc) - pairs, err := parseKeyValueTable(table) + pairs, err := parseKeyValueTable(table, sc) if err != nil { return fmt.Errorf("invalid annotations table: %w", err) } @@ -1789,7 +2064,7 @@ func LabelsAreAdded(ctx context.Context, resourceName string, table *godog.Table sc := scenarioCtx(ctx) resourceName = substituteScenarioVars(resourceName, sc) - pairs, err := parseKeyValueTable(table) + pairs, err := parseKeyValueTable(table, sc) if err != nil { return fmt.Errorf("invalid labels table: %w", err) } @@ -1817,7 +2092,7 @@ func ResourceHasAnnotations(ctx context.Context, resourceName string, table *god sc := scenarioCtx(ctx) resourceName = substituteScenarioVars(resourceName, sc) - expected, err := parseKeyValueTable(table) + expected, err := parseKeyValueTable(table, sc) if err != nil { return fmt.Errorf("invalid annotations table: %w", err) } @@ -1866,7 +2141,7 @@ func ResourceHasLabels(ctx context.Context, resourceName string, table *godog.Ta sc := scenarioCtx(ctx) resourceName = substituteScenarioVars(resourceName, sc) - expected, err := parseKeyValueTable(table) + expected, err := parseKeyValueTable(table, sc) if err != nil { return fmt.Errorf("invalid labels table: %w", err) } @@ -1914,7 +2189,8 @@ func nestedString(obj map[string]interface{}, keys ...string) (string, bool) { // parseKeyValueTable extracts key-value pairs from a godog data table. // The table must have a header row with "key" and "value" columns. -func parseKeyValueTable(table *godog.Table) (map[string]string, error) { +// If sc is non-nil, variable substitution is applied to both keys and values. +func parseKeyValueTable(table *godog.Table, sc *scenarioContext) (map[string]string, error) { if len(table.Rows) < 2 { return nil, fmt.Errorf("table must have a header row and at least one data row") } @@ -1943,7 +2219,13 @@ func parseKeyValueTable(table *godog.Table) (map[string]string, error) { if len(row.Cells) <= maxIdx { return nil, fmt.Errorf("table row %d has %d cells, expected at least %d", rowIdx+2, len(row.Cells), maxIdx+1) } - result[row.Cells[keyIdx].Value] = row.Cells[valueIdx].Value + key := row.Cells[keyIdx].Value + value := row.Cells[valueIdx].Value + if sc != nil { + key = substituteScenarioVars(key, sc) + value = substituteScenarioVars(value, sc) + } + result[key] = value } return result, nil } diff --git a/test/e2e/steps/testdata/extra-catalog-template.yaml b/test/e2e/steps/testdata/extra-catalog-template.yaml deleted file mode 100644 index a43d9b3246..0000000000 --- a/test/e2e/steps/testdata/extra-catalog-template.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: olm.operatorframework.io/v1 -kind: ClusterCatalog -metadata: - name: extra-catalog -spec: - priority: 0 - source: - type: Image - image: - pollIntervalMinutes: 1 - ref: ${CATALOG_IMG} diff --git a/test/e2e/steps/testdata/test-catalog-template.yaml b/test/e2e/steps/testdata/test-catalog-template.yaml deleted file mode 100644 index 7e46872f38..0000000000 --- a/test/e2e/steps/testdata/test-catalog-template.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: olm.operatorframework.io/v1 -kind: ClusterCatalog -metadata: - name: test-catalog -spec: - priority: 0 - source: - type: Image - image: - pollIntervalMinutes: 1 - ref: ${CATALOG_IMG} diff --git a/test/e2e/steps/upgrade_steps.go b/test/e2e/steps/upgrade_steps.go index 3868479a84..0c82437a2a 100644 --- a/test/e2e/steps/upgrade_steps.go +++ b/test/e2e/steps/upgrade_steps.go @@ -144,26 +144,15 @@ func reconcileEndingCheck(leaderPod, resourceName string) func() bool { } } -// ResourceTypeIsReconciled waits for the component's deployment to be ready and -// then verifies that the scenario's resource of the given type has been reconciled +// ClusterExtensionIsReconciled waits for the ClusterExtension to be reconciled // by checking the leader pod's logs for a "reconcile ending" entry. -func ResourceTypeIsReconciled(ctx context.Context, resourceType string) error { +func ClusterExtensionIsReconciled(ctx context.Context) error { sc := scenarioCtx(ctx) - component, ok := resourceTypeToComponent[resourceType] - if !ok { - return fmt.Errorf("unknown resource type: %s", resourceType) - } - - var resourceName string - switch resourceType { - case "ClusterCatalog": - resourceName = sc.clusterCatalogName - case "ClusterExtension": - resourceName = sc.clusterExtensionName - } + component := "operator-controller" + resourceName := sc.clusterExtensionName if resourceName == "" { - return fmt.Errorf("no %s found in scenario context", resourceType) + return fmt.Errorf("no ClusterExtension found in scenario context") } if err := ComponentIsReadyToReconcile(ctx, component); err != nil { @@ -172,13 +161,6 @@ func ResourceTypeIsReconciled(ctx context.Context, resourceType string) error { leaderPod := sc.leaderPods[component] waitFor(ctx, reconcileEndingCheck(leaderPod, resourceName)) - - // For ClusterCatalog, also verify that lastUnpacked is after the leader pod's creation. - // This mitigates flakiness caused by https://github.com/operator-framework/operator-controller/issues/1626 - if resourceType == "ClusterCatalog" { - waitFor(ctx, clusterCatalogUnpackedAfterPodCreation(resourceName, leaderPod)) - } - return nil } @@ -254,11 +236,38 @@ func allResourcesAreReconciled(ctx context.Context, resourceType string) error { return nil } -// ClusterCatalogReportsCondition waits for the ClusterCatalog to have the specified condition type, status, and reason. -func ClusterCatalogReportsCondition(ctx context.Context, conditionType, conditionStatus, conditionReason string) error { +// ScenarioCatalogIsReconciled waits for a named per-scenario ClusterCatalog to be reconciled by checking leader pod logs. +func ScenarioCatalogIsReconciled(ctx context.Context, catalogUserName string) error { + sc := scenarioCtx(ctx) + catalogName, ok := sc.catalogs[catalogUserName] + if !ok { + return fmt.Errorf("no catalog %q has been created for this scenario", catalogUserName) + } + + component := "catalogd" + if err := ComponentIsReadyToReconcile(ctx, component); err != nil { + return err + } + + leaderPod, ok := sc.leaderPods[component] + if !ok { + return fmt.Errorf("leader pod not found for component %s", component) + } + + waitFor(ctx, reconcileEndingCheck(leaderPod, catalogName)) + + // Also verify that lastUnpacked is after the leader pod's creation. + // This mitigates flakiness caused by https://github.com/operator-framework/operator-controller/issues/1626 + waitFor(ctx, clusterCatalogUnpackedAfterPodCreation(catalogName, leaderPod)) + return nil +} + +// ScenarioCatalogReportsCondition waits for a named per-scenario ClusterCatalog to have the specified condition. +func ScenarioCatalogReportsCondition(ctx context.Context, catalogUserName, conditionType, conditionStatus, conditionReason string) error { sc := scenarioCtx(ctx) - if sc.clusterCatalogName == "" { - return fmt.Errorf("cluster catalog name not set; run 'ClusterCatalog serves bundles' first") + catalogName, ok := sc.catalogs[catalogUserName] + if !ok { + return fmt.Errorf("no catalog %q has been created for this scenario", catalogUserName) } - return waitForCondition(ctx, "clustercatalog", sc.clusterCatalogName, conditionType, conditionStatus, &conditionReason, nil) + return waitForCondition(ctx, "clustercatalog", catalogName, conditionType, conditionStatus, &conditionReason, nil) } diff --git a/test/extension-developer-e2e/extension_developer_test.go b/test/extension-developer-e2e/extension_developer_test.go index a71f1f83d6..652d9614b5 100644 --- a/test/extension-developer-e2e/extension_developer_test.go +++ b/test/extension-developer-e2e/extension_developer_test.go @@ -1,12 +1,18 @@ package extensione2e import ( + "bytes" "context" "fmt" + "io" "os" + "os/exec" "testing" "time" + "github.com/google/go-containerregistry/pkg/crane" + "github.com/google/go-containerregistry/pkg/name" + "github.com/google/go-containerregistry/pkg/v1/tarball" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" corev1 "k8s.io/api/core/v1" @@ -19,22 +25,87 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" ocv1 "github.com/operator-framework/operator-controller/api/v1" + testregistry "github.com/operator-framework/operator-controller/test/internal/registry" ) +const ( + catalogTag = "e2e/test-catalog:v1" + regPkgName = "registry-operator" +) + +func TestMain(m *testing.M) { + ctx := context.Background() + cfg := ctrl.GetConfigOrDie() + if err := testregistry.Deploy(ctx, cfg, testregistry.DefaultNamespace, testregistry.DefaultName); err != nil { + panic(fmt.Sprintf("failed to deploy image registry: %v", err)) + } + + // Port-forward lives for the duration of the test process; + // the stop function is not needed because the goroutine is + // cleaned up on process exit. + localAddr, _, err := testregistry.PortForward(ctx, cfg, testregistry.DefaultNamespace, testregistry.DefaultName) + if err != nil { + panic(fmt.Sprintf("failed to port-forward to registry: %v", err)) + } + + clusterRegistryHost := os.Getenv("CLUSTER_REGISTRY_HOST") + if clusterRegistryHost == "" { + panic("CLUSTER_REGISTRY_HOST environment variable must be set") + } + + // Set env vars for setup.sh — single source of truth + os.Setenv("CATALOG_TAG", catalogTag) + os.Setenv("REG_PKG_NAME", regPkgName) + + cmd := exec.Command("./setup.sh") //nolint:gosec // test-only setup script + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { + panic(fmt.Sprintf("failed to run setup.sh: %v", err)) + } + + // Push images via crane through the port-forward. + // setup.sh tags images with CLUSTER_REGISTRY_HOST. We export them + // from the container runtime via "save" and push through the + // port-forward with crane. + containerRuntime := os.Getenv("CONTAINER_RUNTIME") + bundlePath := "bundles/registry-v1/registry-bundle:v0.0.1" + for _, path := range []string{bundlePath, catalogTag} { + srcRef := fmt.Sprintf("%s/%s", clusterRegistryHost, path) + saveCmd := exec.Command(containerRuntime, "save", srcRef) //nolint:gosec + tarData, err := saveCmd.Output() + if err != nil { + panic(fmt.Sprintf("failed to save image %s: %v", srcRef, err)) + } + tag, err := name.NewTag(srcRef) + if err != nil { + panic(fmt.Sprintf("failed to parse tag %s: %v", srcRef, err)) + } + img, err := tarball.Image(func() (io.ReadCloser, error) { + return io.NopCloser(bytes.NewReader(tarData)), nil + }, &tag) + if err != nil { + panic(fmt.Sprintf("failed to load image %s from tarball: %v", srcRef, err)) + } + pushRef := fmt.Sprintf("%s/%s", localAddr, path) + if err := crane.Push(img, pushRef, crane.Insecure); err != nil { + panic(fmt.Sprintf("failed to push image %s: %v", pushRef, err)) + } + } + + os.Exit(m.Run()) +} + func TestExtensionDeveloper(t *testing.T) { t.Parallel() cfg := ctrl.GetConfigOrDie() scheme := runtime.NewScheme() - require.NoError(t, ocv1.AddToScheme(scheme)) require.NoError(t, ocv1.AddToScheme(scheme)) require.NoError(t, corev1.AddToScheme(scheme)) require.NoError(t, rbacv1.AddToScheme(scheme)) - require.NotEmpty(t, os.Getenv("CATALOG_IMG"), "environment variable CATALOG_IMG must be set") - require.NotEmpty(t, os.Getenv("REG_PKG_NAME"), "environment variable REG_PKG_NAME must be set") - c, err := client.New(cfg, client.Options{Scheme: scheme}) require.NoError(t, err) @@ -48,7 +119,7 @@ func TestExtensionDeveloper(t *testing.T) { Source: ocv1.CatalogSource{ Type: ocv1.SourceTypeImage, Image: &ocv1.ImageSource{ - Ref: os.Getenv("CATALOG_IMG"), + Ref: os.Getenv("CLUSTER_REGISTRY_HOST") + "/" + catalogTag, }, }, }, @@ -73,7 +144,7 @@ func TestExtensionDeveloper(t *testing.T) { Source: ocv1.SourceConfig{ SourceType: "Catalog", Catalog: &ocv1.CatalogFilter{ - PackageName: os.Getenv("REG_PKG_NAME"), + PackageName: regPkgName, }, }, Namespace: installNamespace, diff --git a/test/extension-developer-e2e/setup.sh b/test/extension-developer-e2e/setup.sh index 293341b33b..9293ef420c 100755 --- a/test/extension-developer-e2e/setup.sh +++ b/test/extension-developer-e2e/setup.sh @@ -8,38 +8,30 @@ help="setup.sh is used to build extensions using the operator-sdk and build the image + bundle image, and create a FBC image for the following bundle formats: - registry+v1 -This script will ensure that all images built are loaded onto -a KinD cluster with the name specified in the arguments. +Images are built and tagged locally; pushing to the registry is +handled by the Go test code via crane + port-forward. The following environment variables are required for configuring this script: -- \$E2E_TEST_CATALOG_V1 - the tag for the catalog image that contains the registry+v1 bundle. -- \$REG_PKG_NAME - the name of the package for the extension that uses the registry+v1 bundle format. -setup.sh also takes 5 arguments. +- \$OPERATOR_SDK - path to the operator-sdk binary. +- \$CONTAINER_RUNTIME - container runtime to use (e.g. docker, podman). +- \$CLUSTER_REGISTRY_HOST - registry address accessible from inside the cluster. +- \$CATALOG_TAG - OCI tag for the catalog image (e.g. e2e/test-catalog:v1). +- \$REG_PKG_NAME - the name of the package for the extension. Usage: - setup.sh [OPERATOR_SDK] [CONTAINER_RUNTIME] [KUSTOMIZE] [LOCAL_REGISTRY_HOST] [CLUSTER_REGISTRY_HOST] + setup.sh " ######################################## # Input validation ######################################## -if [[ "$#" -ne 5 ]]; then - echo "Illegal number of arguments passed" - echo "${help}" - exit 1 -fi - -if [[ -z "${E2E_TEST_CATALOG_V1}" ]]; then - echo "\$E2E_TEST_CATALOG_V1 is required to be set" - echo "${help}" - exit 1 -fi - -if [[ -z "${REG_PKG_NAME}" ]]; then - echo "\$REG_PKG_NAME is required to be set" - echo "${help}" - exit 1 -fi +for var in OPERATOR_SDK CONTAINER_RUNTIME CLUSTER_REGISTRY_HOST CATALOG_TAG REG_PKG_NAME; do + if [[ -z "${!var:-}" ]]; then + echo "\$$var is required to be set" + echo "${help}" + exit 1 + fi +done ######################################## # Setup temp dir and local variables @@ -54,28 +46,15 @@ DOMAIN=oc-opdev-e2e.operatorframework.io REG_DIR="${TMP_ROOT}/registry" mkdir -p "${REG_DIR}" -operator_sdk=$1 -container_tool=$2 -kustomize=$3 -# The path we use to push the image from _outside_ the cluster -local_registry_host=$4 -# The path we use _inside_ the cluster -cluster_registry_host=$5 - -tls_flag="" -if [[ "$container_tool" == "podman" ]]; then - echo "Using podman container runtime; adding tls disable flag" - tls_flag="--tls-verify=false" -fi - -catalog_push_tag="${local_registry_host}/${E2E_TEST_CATALOG_V1}" +operator_sdk="${OPERATOR_SDK}" +container_tool="${CONTAINER_RUNTIME}" +cluster_registry_host="${CLUSTER_REGISTRY_HOST}" + +catalog_tag="${cluster_registry_host}/${CATALOG_TAG}" reg_pkg_name="${REG_PKG_NAME}" reg_img="${DOMAIN}/registry:v0.0.1" -reg_bundle_path="bundles/registry-v1/registry-bundle:v0.0.1" - -reg_bundle_img="${cluster_registry_host}/${reg_bundle_path}" -reg_bundle_push_tag="${local_registry_host}/${reg_bundle_path}" +reg_bundle_img="${cluster_registry_host}/bundles/registry-v1/registry-bundle:v0.0.1" ######################################## # Create the registry+v1 based extension @@ -102,13 +81,18 @@ reg_bundle_push_tag="${local_registry_host}/${reg_bundle_path}" --resource --controller && \ export OPERATOR_SDK="${operator_sdk}" && \ make generate manifests && \ + sed -i -e 's/$(CONTAINER_TOOL) build/$(CONTAINER_TOOL) build --provenance=false/' Makefile && \ make docker-build IMG="${reg_img}" && \ sed -i -e 's/$(OPERATOR_SDK) generate kustomize manifests -q/$(OPERATOR_SDK) generate kustomize manifests -q --interactive=false/g' Makefile && \ make bundle IMG="${reg_img}" VERSION=0.0.1 && \ - make bundle-build BUNDLE_IMG="${reg_bundle_push_tag}" - ${container_tool} push ${reg_bundle_push_tag} ${tls_flag} + make bundle-build BUNDLE_IMG="${reg_bundle_img}" ) +# Push is handled by the Go test via crane + port-forward, +# because docker push goes through the Docker daemon which +# may be in a different network context (e.g. colima VM). + + ############################### # Create the FBC that contains # the registry+v1 extensions @@ -153,5 +137,6 @@ cat < "${TMP_ROOT}"/catalog/index.yaml } EOF -${container_tool} build -f "${TMP_ROOT}/catalog.Dockerfile" -t "${catalog_push_tag}" "${TMP_ROOT}/" -${container_tool} push ${catalog_push_tag} ${tls_flag} +${container_tool} build --provenance=false -f "${TMP_ROOT}/catalog.Dockerfile" -t "${catalog_tag}" "${TMP_ROOT}/" + +# Push is handled by the Go test via crane + port-forward. diff --git a/test/helpers/feature_gates.go b/test/helpers/feature_gates.go deleted file mode 100644 index bd8362448f..0000000000 --- a/test/helpers/feature_gates.go +++ /dev/null @@ -1,108 +0,0 @@ -// Package utils provides helper functions for e2e tests, including -// feature gate detection and validation utilities. -package utils - -import ( - "strings" - "sync" - "testing" - - "github.com/stretchr/testify/require" - appsv1 "k8s.io/api/apps/v1" - "k8s.io/component-base/featuregate" - "sigs.k8s.io/controller-runtime/pkg/client" - - catdfeatures "github.com/operator-framework/operator-controller/internal/catalogd/features" - opconfeatures "github.com/operator-framework/operator-controller/internal/operator-controller/features" -) - -var ( - featureGateStatus map[string]bool - featureGateStatusOnce sync.Once -) - -const ( - fgPrefix = "--feature-gates=" -) - -// SkipIfFeatureGateDisabled skips the test if the specified feature gate is disabled. -// It queries the OLM deployments to detect feature gate settings and falls back to -// programmatic defaults if the feature gate is not explicitly configured. -func SkipIfFeatureGateDisabled(t *testing.T, fg string) { - if !isFeatureGateEnabled(t, fg) { - t.Skipf("Feature-gate %q disabled", fg) - } -} - -func isFeatureGateEnabled(t *testing.T, fg string) bool { - gatherFeatureGates(t) - enabled, ok := featureGateStatus[fg] - if ok { - return enabled - } - - // Not found (i.e. not explicitly set), so we need to find the programmed default. - // Because feature-gates are organized by catd/opcon, we need to check each individually. - // To avoid a panic, we need to check if it's a known gate first. - mfgs := []featuregate.MutableFeatureGate{ - catdfeatures.CatalogdFeatureGate, - opconfeatures.OperatorControllerFeatureGate, - } - f := featuregate.Feature(fg) - for _, mfg := range mfgs { - known := mfg.GetAll() - if _, ok := known[f]; ok { - e := mfg.Enabled(f) - t.Logf("Feature-gate %q not found in arguments, defaulting to %v", fg, e) - return e - } - } - - t.Fatalf("Unknown feature-gate: %q", fg) - return false // unreachable, but required for compilation -} - -func processFeatureGate(t *testing.T, featureGateValue string) { - fgvs := strings.Split(featureGateValue, ",") - for _, fg := range fgvs { - v := strings.Split(fg, "=") - require.Len(t, v, 2, "invalid feature-gate format: %q (expected name=value)", fg) - switch v[1] { - case "true": - featureGateStatus[v[0]] = true - t.Logf("Feature-gate %q enabled", v[0]) - case "false": - featureGateStatus[v[0]] = false - t.Logf("Feature-gate %q disabled", v[0]) - default: - t.Fatalf("invalid feature-gate value: %q (expected true or false)", fg) - } - } -} - -func gatherFeatureGatesFromDeployment(t *testing.T, dep *appsv1.Deployment) { - for _, con := range dep.Spec.Template.Spec.Containers { - for _, arg := range con.Args { - if strings.HasPrefix(arg, fgPrefix) { - processFeatureGate(t, strings.TrimPrefix(arg, fgPrefix)) - } - } - } -} - -func gatherFeatureGates(t *testing.T) { - featureGateStatusOnce.Do(func() { - featureGateStatus = make(map[string]bool) - - depList := &appsv1.DeploymentList{} - err := c.List(t.Context(), depList, client.MatchingLabels{ - "app.kubernetes.io/part-of": "olm", - }) - require.NoError(t, err) - require.Len(t, depList.Items, 2) - - for _, d := range depList.Items { - gatherFeatureGatesFromDeployment(t, &d) - } - }) -} diff --git a/test/helpers/helpers.go b/test/helpers/helpers.go deleted file mode 100644 index af142c6e34..0000000000 --- a/test/helpers/helpers.go +++ /dev/null @@ -1,391 +0,0 @@ -package utils - -import ( - "context" - "fmt" - "os" - "testing" - "time" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - corev1 "k8s.io/api/core/v1" - rbacv1 "k8s.io/api/rbac/v1" - apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" - "k8s.io/apimachinery/pkg/api/errors" - apimeta "k8s.io/apimachinery/pkg/api/meta" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/types" - "k8s.io/apimachinery/pkg/util/rand" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/client-go/rest" - "k8s.io/utils/ptr" - ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/client" - - ocv1 "github.com/operator-framework/operator-controller/api/v1" - "github.com/operator-framework/operator-controller/internal/operator-controller/scheme" -) - -var ( - cfg *rest.Config - c client.Client -) - -const ( - pollDuration = time.Minute - pollInterval = time.Second - testCatalogName = "test-catalog" - testCatalogRefEnvVar = "CATALOG_IMG" -) - -func CreateNamespace(ctx context.Context, name string) (*corev1.Namespace, error) { - ns := &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - } - err := c.Create(ctx, ns) - if err != nil { - return nil, err - } - return ns, nil -} - -func CreateServiceAccount(ctx context.Context, name types.NamespacedName, clusterExtensionName string) (*corev1.ServiceAccount, error) { - sa := &corev1.ServiceAccount{ - ObjectMeta: metav1.ObjectMeta{ - Name: name.Name, - Namespace: name.Namespace, - }, - } - err := c.Create(ctx, sa) - if err != nil { - return nil, err - } - - return sa, CreateClusterRoleAndBindingForSA(ctx, name.Name, sa, clusterExtensionName) -} - -func CreateClusterRoleAndBindingForSA(ctx context.Context, name string, sa *corev1.ServiceAccount, clusterExtensionName string) error { - cr := &rbacv1.ClusterRole{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - Rules: []rbacv1.PolicyRule{ - { - APIGroups: []string{ - "olm.operatorframework.io", - }, - Resources: []string{ - "clusterextensions/finalizers", - }, - Verbs: []string{ - "update", - }, - ResourceNames: []string{clusterExtensionName}, - }, - { - APIGroups: []string{ - "", - }, - Resources: []string{ - "configmaps", - "secrets", // for helm - "services", - "serviceaccounts", - }, - Verbs: []string{ - "create", - "update", - "delete", - "patch", - "get", - "list", - "watch", - }, - }, - { - APIGroups: []string{ - "apiextensions.k8s.io", - }, - Resources: []string{ - "customresourcedefinitions", - }, - Verbs: []string{ - "create", - "update", - "delete", - "patch", - "get", - "list", - "watch", - }, - }, - { - APIGroups: []string{ - "apps", - }, - Resources: []string{ - "deployments", - }, - Verbs: []string{ - "create", - "update", - "delete", - "patch", - "get", - "list", - "watch", - }, - }, - { - APIGroups: []string{ - "rbac.authorization.k8s.io", - }, - Resources: []string{ - "clusterroles", - "roles", - "clusterrolebindings", - "rolebindings", - }, - Verbs: []string{ - "create", - "update", - "delete", - "patch", - "get", - "list", - "watch", - "bind", - "escalate", - }, - }, - { - APIGroups: []string{ - "networking.k8s.io", - }, - Resources: []string{ - "networkpolicies", - }, - Verbs: []string{ - "get", - "list", - "watch", - "create", - "update", - "patch", - "delete", - }, - }, - }, - } - err := c.Create(ctx, cr) - if err != nil { - return err - } - crb := &rbacv1.ClusterRoleBinding{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - Subjects: []rbacv1.Subject{ - { - Kind: "ServiceAccount", - Name: sa.Name, - Namespace: sa.Namespace, - }, - }, - RoleRef: rbacv1.RoleRef{ - APIGroup: "rbac.authorization.k8s.io", - Kind: "ClusterRole", - Name: name, - }, - } - err = c.Create(ctx, crb) - if err != nil { - return err - } - - return nil -} - -func TestInit(t *testing.T) (*ocv1.ClusterExtension, *ocv1.ClusterCatalog, *corev1.ServiceAccount, *corev1.Namespace) { - ce, cc := TestInitClusterExtensionClusterCatalog(t) - sa, ns := TestInitServiceAccountNamespace(t, ce.Name) - return ce, cc, sa, ns -} - -func TestInitClusterExtensionClusterCatalog(t *testing.T) (*ocv1.ClusterExtension, *ocv1.ClusterCatalog) { - ceName := fmt.Sprintf("clusterextension-%s", rand.String(8)) - catalogName := fmt.Sprintf("test-catalog-%s", rand.String(8)) - - ce := &ocv1.ClusterExtension{ - ObjectMeta: metav1.ObjectMeta{ - Name: ceName, - }, - } - - cc, err := CreateTestCatalog(context.Background(), catalogName, os.Getenv(testCatalogRefEnvVar)) - require.NoError(t, err) - - ValidateCatalogUnpackWithName(t, catalogName) - - return ce, cc -} - -func TestInitServiceAccountNamespace(t *testing.T, clusterExtensionName string) (*corev1.ServiceAccount, *corev1.Namespace) { - var err error - - ns, err := CreateNamespace(context.Background(), clusterExtensionName) - require.NoError(t, err) - - name := types.NamespacedName{ - Name: clusterExtensionName, - Namespace: ns.GetName(), - } - - sa, err := CreateServiceAccount(context.Background(), name, clusterExtensionName) - require.NoError(t, err) - - return sa, ns -} - -// ValidateCatalogUnpack validates that the test catalog with the default name has unpacked successfully. -// Deprecated: Use ValidateCatalogUnpackWithName for tests that use unique catalog names. -func ValidateCatalogUnpack(t *testing.T) { - ValidateCatalogUnpackWithName(t, testCatalogName) -} - -// ValidateCatalogUnpackWithName validates that a catalog with the given name has unpacked successfully. -func ValidateCatalogUnpackWithName(t *testing.T, catalogName string) { - catalog := &ocv1.ClusterCatalog{} - t.Log("Ensuring ClusterCatalog has Status.Condition of Progressing with a status == True and reason == Succeeded") - require.EventuallyWithT(t, func(ct *assert.CollectT) { - err := c.Get(context.Background(), types.NamespacedName{Name: catalogName}, catalog) - require.NoError(ct, err) - cond := apimeta.FindStatusCondition(catalog.Status.Conditions, ocv1.TypeProgressing) - require.NotNil(ct, cond) - require.Equal(ct, metav1.ConditionTrue, cond.Status) - require.Equal(ct, ocv1.ReasonSucceeded, cond.Reason) - }, pollDuration, pollInterval) - - t.Log("Checking that catalog has the expected metadata label") - require.NotNil(t, catalog.Labels) - require.Contains(t, catalog.Labels, "olm.operatorframework.io/metadata.name") - require.Equal(t, catalogName, catalog.Labels["olm.operatorframework.io/metadata.name"]) - - t.Log("Ensuring ClusterCatalog has Status.Condition of Type = Serving with status == True") - require.EventuallyWithT(t, func(ct *assert.CollectT) { - err := c.Get(context.Background(), types.NamespacedName{Name: catalogName}, catalog) - require.NoError(ct, err) - cond := apimeta.FindStatusCondition(catalog.Status.Conditions, ocv1.TypeServing) - require.NotNil(ct, cond) - require.Equal(ct, metav1.ConditionTrue, cond.Status) - require.Equal(ct, ocv1.ReasonAvailable, cond.Reason) - }, pollDuration, pollInterval) -} - -func EnsureNoExtensionResources(t *testing.T, clusterExtensionName string) { - ls := labels.Set{"olm.operatorframework.io/owner-name": clusterExtensionName} - - // CRDs may take an extra long time to be deleted, and may run into the following error: - // Condition=Terminating Status=True Reason=InstanceDeletionFailed Message="could not list instances: storage is (re)initializing" - t.Logf("By waiting for CustomResourceDefinitions of %q to be deleted", clusterExtensionName) - require.EventuallyWithT(t, func(ct *assert.CollectT) { - list := &apiextensionsv1.CustomResourceDefinitionList{} - err := c.List(context.Background(), list, client.MatchingLabelsSelector{Selector: ls.AsSelector()}) - require.NoError(ct, err) - require.Empty(ct, list.Items) - }, 5*pollDuration, pollInterval) - - t.Logf("By waiting for ClusterRoleBindings of %q to be deleted", clusterExtensionName) - require.EventuallyWithT(t, func(ct *assert.CollectT) { - list := &rbacv1.ClusterRoleBindingList{} - err := c.List(context.Background(), list, client.MatchingLabelsSelector{Selector: ls.AsSelector()}) - require.NoError(ct, err) - require.Empty(ct, list.Items) - }, 2*pollDuration, pollInterval) - - t.Logf("By waiting for ClusterRoles of %q to be deleted", clusterExtensionName) - require.EventuallyWithT(t, func(ct *assert.CollectT) { - list := &rbacv1.ClusterRoleList{} - err := c.List(context.Background(), list, client.MatchingLabelsSelector{Selector: ls.AsSelector()}) - require.NoError(ct, err) - require.Empty(ct, list.Items) - }, 2*pollDuration, pollInterval) -} - -func TestCleanup(t *testing.T, cat *ocv1.ClusterCatalog, clusterExtension *ocv1.ClusterExtension, sa *corev1.ServiceAccount, ns *corev1.Namespace) { - if cat != nil { - t.Logf("By deleting ClusterCatalog %q", cat.Name) - require.NoError(t, c.Delete(context.Background(), cat)) - require.Eventually(t, func() bool { - err := c.Get(context.Background(), types.NamespacedName{Name: cat.Name}, &ocv1.ClusterCatalog{}) - return errors.IsNotFound(err) - }, pollDuration, pollInterval) - } - - if clusterExtension != nil { - t.Logf("By deleting ClusterExtension %q", clusterExtension.Name) - require.NoError(t, c.Delete(context.Background(), clusterExtension)) - require.Eventually(t, func() bool { - err := c.Get(context.Background(), types.NamespacedName{Name: clusterExtension.Name}, &ocv1.ClusterExtension{}) - return errors.IsNotFound(err) - }, pollDuration, pollInterval) - EnsureNoExtensionResources(t, clusterExtension.Name) - } - - if sa != nil { - t.Logf("By deleting ServiceAccount %q", sa.Name) - require.NoError(t, c.Delete(context.Background(), sa)) - require.Eventually(t, func() bool { - err := c.Get(context.Background(), types.NamespacedName{Name: sa.Name, Namespace: sa.Namespace}, &corev1.ServiceAccount{}) - return errors.IsNotFound(err) - }, pollDuration, pollInterval) - } - - if ns != nil { - t.Logf("By deleting Namespace %q", ns.Name) - require.NoError(t, c.Delete(context.Background(), ns)) - require.Eventually(t, func() bool { - err := c.Get(context.Background(), types.NamespacedName{Name: ns.Name}, &corev1.Namespace{}) - return errors.IsNotFound(err) - }, pollDuration, pollInterval) - } -} - -// CreateTestCatalog will create a new catalog on the test cluster, provided -// the context, catalog name, and the image reference. It returns the created catalog -// or an error if any errors occurred while creating the catalog. -// Note that catalogd will automatically create the label: -// -// "olm.operatorframework.io/metadata.name": name -func CreateTestCatalog(ctx context.Context, name string, imageRef string) (*ocv1.ClusterCatalog, error) { - catalog := &ocv1.ClusterCatalog{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - Spec: ocv1.ClusterCatalogSpec{ - Source: ocv1.CatalogSource{ - Type: ocv1.SourceTypeImage, - Image: &ocv1.ImageSource{ - Ref: imageRef, - PollIntervalMinutes: ptr.To(1), - }, - }, - }, - } - - err := c.Create(ctx, catalog) - return catalog, err -} - -func init() { - cfg = ctrl.GetConfigOrDie() - - var err error - utilruntime.Must(apiextensionsv1.AddToScheme(scheme.Scheme)) - c, err = client.New(cfg, client.Options{Scheme: scheme.Scheme}) - utilruntime.Must(err) -} diff --git a/test/internal/catalog/bundle.go b/test/internal/catalog/bundle.go new file mode 100644 index 0000000000..03fa92c931 --- /dev/null +++ b/test/internal/catalog/bundle.go @@ -0,0 +1,475 @@ +package catalog + +import ( + "fmt" + "os" + "path/filepath" + "strings" + "testing/fstest" + + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + networkingv1 "k8s.io/api/networking/v1" + rbacv1 "k8s.io/api/rbac/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/util/intstr" + "k8s.io/utils/ptr" + + "github.com/operator-framework/api/pkg/operators/v1alpha1" + + bundlecsv "github.com/operator-framework/operator-controller/internal/testing/bundle/csv" + bundlefs "github.com/operator-framework/operator-controller/internal/testing/bundle/fs" +) + +// BundleOption configures what manifests a bundle contains. +type BundleOption func(*bundleConfig) + +type bundleProperty struct { + propertyType string + value string +} + +type bundleConfig struct { + hasCRD bool + hasDeployment bool + hasConfigMap bool + badContainerImage bool + properties []bundleProperty + installModes []v1alpha1.InstallModeType // if nil, defaults to AllNamespaces + SingleNamespace + largeCRDFieldCount int // if > 0, generate a CRD with this many fields + staticBundleDir string // if set, read bundle from this directory (no parameterization) + clusterRegistryOverride string // if set, use this host in the FBC image ref instead of the default +} + +// bundleSpec is the resolved bundle: version + file map ready for crane.Image(). +type bundleSpec struct { + version string + files map[string][]byte + clusterRegistryOverride string // if set, use this host in the FBC image ref +} + +// WithCRD includes a CRD in the bundle. +func WithCRD() BundleOption { + return func(c *bundleConfig) { c.hasCRD = true } +} + +// WithDeployment includes a deployment (with CSV, script ConfigMap, and NetworkPolicy) in the bundle. +func WithDeployment() BundleOption { + return func(c *bundleConfig) { c.hasDeployment = true } +} + +// WithConfigMap includes an additional test ConfigMap in the bundle. +func WithConfigMap() BundleOption { + return func(c *bundleConfig) { c.hasConfigMap = true } +} + +// WithInstallMode sets the supported install modes for the bundle's CSV. +// If not called, defaults to AllNamespaces + SingleNamespace. +// Mode names: AllNamespaces, SingleNamespace, OwnNamespace, MultiNamespace. +func WithInstallMode(modes ...v1alpha1.InstallModeType) BundleOption { + return func(c *bundleConfig) { + c.installModes = append(c.installModes, modes...) + } +} + +// WithLargeCRD includes a CRD with many fields to test large bundle handling. +func WithLargeCRD(fieldCount int) BundleOption { + return func(c *bundleConfig) { + c.hasCRD = true + c.largeCRDFieldCount = fieldCount + } +} + +// WithClusterRegistry overrides the cluster registry hostname used in the FBC image +// reference for this bundle. The bundle is still pushed to the main local registry, +// but the FBC entry tells the cluster to pull from the specified hostname. +// This is used for testing registry mirroring via registries.conf. +func WithClusterRegistry(host string) BundleOption { + return func(c *bundleConfig) { + c.clusterRegistryOverride = host + } +} + +// StaticBundleDir reads pre-built bundle manifests from the given directory. +// The bundle content is NOT parameterized — resource names remain as-is. +// Use this for bundles with real operator binaries that can't have their +// CRD names changed (e.g. webhook-operator). +func StaticBundleDir(dir string) BundleOption { + return func(c *bundleConfig) { + c.staticBundleDir = dir + } +} + +// WithBundleProperty adds a property to the bundle's metadata/properties.yaml. +func WithBundleProperty(propertyType, value string) BundleOption { + return func(c *bundleConfig) { + c.properties = append(c.properties, bundleProperty{propertyType: propertyType, value: value}) + } +} + +// BadImage produces a bundle with CRD and deployment but uses "wrong/image" as +// the container image, causing ImagePullBackOff at runtime. +func BadImage() BundleOption { + return func(c *bundleConfig) { + c.hasCRD = true + c.hasDeployment = true + c.badContainerImage = true + } +} + +// buildBundle generates the manifest files for a single bundle using the existing +// CSV builder and bundle FS builder. All resource names embed scenarioID for uniqueness. +func buildBundle(scenarioID, packageName, version string, opts []BundleOption) bundleSpec { + cfg := &bundleConfig{} + for _, o := range opts { + o(cfg) + } + + // Static bundle: read files from disk without parameterization + if cfg.staticBundleDir != "" { + files, err := readBundleDir(cfg.staticBundleDir) + if err != nil { + panic(fmt.Errorf("failed to read static bundle dir %s: %w", cfg.staticBundleDir, err)) + } + return bundleSpec{ + version: version, + files: files, + clusterRegistryOverride: cfg.clusterRegistryOverride, + } + } + + crdGroup := fmt.Sprintf("e2e-%s.e2e.operatorframework.io", scenarioID) + crdPlural := fmt.Sprintf("e2e-%stests", scenarioID) + crdKind := "E2ETest" + crdName := fmt.Sprintf("%s.%s", crdPlural, crdGroup) + deploymentName := fmt.Sprintf("test-operator-%s", scenarioID) + saName := fmt.Sprintf("bundle-manager-%s", scenarioID) + scriptCMName := fmt.Sprintf("httpd-script-%s", scenarioID) + + containerImage := "busybox:1.36" + if cfg.badContainerImage { + containerImage = "wrong/image" + } + + // Build the CSV using the existing CSV builder + var installModes []v1alpha1.InstallModeType + if len(cfg.installModes) == 0 { + installModes = []v1alpha1.InstallModeType{v1alpha1.InstallModeTypeAllNamespaces, v1alpha1.InstallModeTypeSingleNamespace} + } else { + installModes = append(installModes, cfg.installModes...) + } + csvBuilder := bundlecsv.Builder(). + WithName(fmt.Sprintf("%s.v%s", packageName, version)). + WithInstallModeSupportFor(installModes...) + + if cfg.hasCRD { + csvBuilder = csvBuilder.WithOwnedCRDs(v1alpha1.CRDDescription{ + Name: crdName, + Kind: crdKind, + Version: "v1", + DisplayName: crdKind, + Description: "E2E Test Resource", + }) + } + + if cfg.hasDeployment { + csvBuilder = csvBuilder. + WithStrategyDeploymentSpecs(buildDeploymentSpec( + deploymentName, scenarioID, version, saName, scriptCMName, containerImage, + )). + WithPermissions(v1alpha1.StrategyDeploymentPermissions{ + ServiceAccountName: saName, + Rules: []rbacv1.PolicyRule{ + { + APIGroups: []string{""}, + Resources: []string{"configmaps", "serviceaccounts"}, + Verbs: []string{"get", "list", "watch", "create", "update", "patch", "delete"}, + }, + { + APIGroups: []string{"networking.k8s.io"}, + Resources: []string{"networkpolicies"}, + Verbs: []string{"get", "list", "create", "update", "delete"}, + }, + { + APIGroups: []string{"coordination.k8s.io"}, + Resources: []string{"leases"}, + Verbs: []string{"get", "list", "watch", "create", "update", "patch", "delete"}, + }, + { + APIGroups: []string{""}, + Resources: []string{"events"}, + Verbs: []string{"create", "patch"}, + }, + }, + }). + WithClusterPermissions(v1alpha1.StrategyDeploymentPermissions{ + ServiceAccountName: saName, + Rules: []rbacv1.PolicyRule{ + { + APIGroups: []string{"authentication.k8s.io"}, + Resources: []string{"tokenreviews"}, + Verbs: []string{"create"}, + }, + { + APIGroups: []string{"authorization.k8s.io"}, + Resources: []string{"subjectaccessreviews"}, + Verbs: []string{"create"}, + }, + }, + }) + } + + // Build the bundle FS using the existing FS builder + fsBuilder := bundlefs.Builder(). + WithPackageName(packageName). + WithCSV(csvBuilder.Build()) + + // Add script ConfigMap for the deployment + if cfg.hasDeployment { + fsBuilder = fsBuilder. + WithBundleResource("script-configmap.yaml", &corev1.ConfigMap{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "v1", + Kind: "ConfigMap", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: scriptCMName, + }, + Data: map[string]string{ + "httpd.sh": "#!/bin/sh\necho true > /var/www/started\necho true > /var/www/ready\necho true > /var/www/live\nexec httpd -f -h /var/www -p 80\n", + }, + }). + WithBundleResource("networkpolicy.yaml", &networkingv1.NetworkPolicy{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "networking.k8s.io/v1", + Kind: "NetworkPolicy", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: fmt.Sprintf("%s-network-policy", deploymentName), + }, + Spec: networkingv1.NetworkPolicySpec{ + PodSelector: metav1.LabelSelector{}, + PolicyTypes: []networkingv1.PolicyType{networkingv1.PolicyTypeIngress}, + }, + }) + } + + // Add test ConfigMap if requested + if cfg.hasConfigMap { + testCMName := fmt.Sprintf("test-configmap-%s", scenarioID) + fsBuilder = fsBuilder.WithBundleResource("bundle-configmap.yaml", &corev1.ConfigMap{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "v1", + Kind: "ConfigMap", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: testCMName, + }, + Data: map[string]string{ + "version": version, + "name": testCMName, + }, + }) + } + + // Add CRD as a bundle resource + if cfg.hasCRD { + fsBuilder = fsBuilder.WithBundleResource("crd.yaml", buildCRD(crdName, crdGroup, crdKind, crdPlural, scenarioID, cfg.largeCRDFieldCount)) + } + + // Add bundle properties + for _, p := range cfg.properties { + fsBuilder = fsBuilder.WithBundleProperty(p.propertyType, p.value) + } + + bundleFS := fsBuilder.Build() + return bundleSpec{ + version: version, + files: mapFSToFileMap(bundleFS), + clusterRegistryOverride: cfg.clusterRegistryOverride, + } +} + +// buildDeploymentSpec creates the StrategyDeploymentSpec for the CSV. +func buildDeploymentSpec( + deploymentName, scenarioID, version, saName, scriptCMName, containerImage string, +) v1alpha1.StrategyDeploymentSpec { + return v1alpha1.StrategyDeploymentSpec{ + Name: deploymentName, + Label: labels.Set{ + "app.kubernetes.io/name": deploymentName, + "app.kubernetes.io/version": version, + "app.kubernetes.io/component": "controller", + }, + Spec: appsv1.DeploymentSpec{ + Replicas: ptr.To(int32(1)), + Selector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "app": scenarioID, + }, + }, + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + "app": scenarioID, + }, + }, + Spec: corev1.PodSpec{ + ServiceAccountName: saName, + TerminationGracePeriodSeconds: ptr.To(int64(0)), + Volumes: []corev1.Volume{ + { + Name: "scripts", + VolumeSource: corev1.VolumeSource{ + ConfigMap: &corev1.ConfigMapVolumeSource{ + LocalObjectReference: corev1.LocalObjectReference{ + Name: scriptCMName, + }, + DefaultMode: ptr.To(int32(0755)), + }, + }, + }, + }, + Containers: []corev1.Container{ + { + Name: "busybox-httpd-container", + Image: containerImage, + Command: []string{"/scripts/httpd.sh"}, + Ports: []corev1.ContainerPort{ + {ContainerPort: 80}, + }, + VolumeMounts: []corev1.VolumeMount{ + { + Name: "scripts", + MountPath: "/scripts", + ReadOnly: true, + }, + }, + StartupProbe: &corev1.Probe{ + ProbeHandler: corev1.ProbeHandler{ + HTTPGet: &corev1.HTTPGetAction{ + Path: "/started", + Port: intstr.FromInt32(80), + }, + }, + FailureThreshold: 30, + PeriodSeconds: 10, + }, + LivenessProbe: &corev1.Probe{ + ProbeHandler: corev1.ProbeHandler{ + HTTPGet: &corev1.HTTPGetAction{ + Path: "/live", + Port: intstr.FromInt32(80), + }, + }, + FailureThreshold: 1, + PeriodSeconds: 2, + }, + ReadinessProbe: &corev1.Probe{ + ProbeHandler: corev1.ProbeHandler{ + HTTPGet: &corev1.HTTPGetAction{ + Path: "/ready", + Port: intstr.FromInt32(80), + }, + }, + InitialDelaySeconds: 1, + PeriodSeconds: 1, + }, + }, + }, + }, + }, + }, + } +} + +// buildCRD creates a CustomResourceDefinition as a client.Object for use with WithBundleResource. +// If largeCRDFieldCount > 0, the CRD spec will contain that many string fields with long descriptions. +func buildCRD(name, group, kind, plural, scenarioID string, largeCRDFieldCount int) *apiextensionsv1.CustomResourceDefinition { + specProperties := map[string]apiextensionsv1.JSONSchemaProps{ + "testField": {Type: "string"}, + } + if largeCRDFieldCount > 0 { + longDescBase := "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. " + longDesc := strings.Repeat(longDescBase, 20) // ~4KB per field, matching the original test fixture + for i := range largeCRDFieldCount { + specProperties[fmt.Sprintf("field%04d", i)] = apiextensionsv1.JSONSchemaProps{ + Type: "string", + Description: longDesc, + } + } + } + + return &apiextensionsv1.CustomResourceDefinition{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "apiextensions.k8s.io/v1", + Kind: "CustomResourceDefinition", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: apiextensionsv1.CustomResourceDefinitionSpec{ + Group: group, + Names: apiextensionsv1.CustomResourceDefinitionNames{ + Kind: kind, + ListKind: kind + "List", + Plural: plural, + Singular: "e2e-" + scenarioID + "test", + }, + Scope: apiextensionsv1.ClusterScoped, + Versions: []apiextensionsv1.CustomResourceDefinitionVersion{ + { + Name: "v1", + Served: true, + Storage: true, + Schema: &apiextensionsv1.CustomResourceValidation{ + OpenAPIV3Schema: &apiextensionsv1.JSONSchemaProps{ + Type: "object", + Properties: map[string]apiextensionsv1.JSONSchemaProps{ + "spec": { + Type: "object", + Properties: specProperties, + }, + }, + }, + }, + }, + }, + }, + } +} + +// mapFSToFileMap converts an fstest.MapFS to map[string][]byte for use with crane.Image(). +func mapFSToFileMap(mfs fstest.MapFS) map[string][]byte { + files := make(map[string][]byte, len(mfs)) + for path, file := range mfs { + files[path] = file.Data + } + return files +} + +// readBundleDir reads all files from a bundle directory into a map[string][]byte. +func readBundleDir(dir string) (map[string][]byte, error) { + files := make(map[string][]byte) + err := filepath.WalkDir(dir, func(path string, d os.DirEntry, err error) error { + if err != nil { + return err + } + if d.IsDir() { + return nil + } + rel, err := filepath.Rel(dir, path) + if err != nil { + return err + } + data, err := os.ReadFile(path) + if err != nil { + return err + } + files[rel] = data + return nil + }) + return files, err +} diff --git a/test/internal/catalog/catalog.go b/test/internal/catalog/catalog.go new file mode 100644 index 0000000000..ed0b91047f --- /dev/null +++ b/test/internal/catalog/catalog.go @@ -0,0 +1,232 @@ +package catalog + +import ( + "context" + "fmt" + "strings" + + "github.com/google/go-containerregistry/pkg/crane" + v1 "github.com/google/go-containerregistry/pkg/v1" + "github.com/google/go-containerregistry/pkg/v1/mutate" +) + +// Catalog is a builder for constructing per-scenario FBC catalogs +// with parameterized package names and OCI image references. +type Catalog struct { + name string // user-chosen catalog name (e.g. "test", "extra") + scenarioID string + packages []packageSpec +} + +type packageSpec struct { + name string + bundles []bundleDef + channels []channelDef +} + +type bundleDef struct { + version string + opts []BundleOption +} + +type channelDef struct { + name string + entries []entryDef +} + +type entryDef struct { + version string + replaces string +} + +// PackageOption configures a package within a catalog. +type PackageOption func(*packageSpec) + +// ChannelOption configures a channel entry. +type ChannelOption func(*entryDef) + +// NewCatalog creates a new per-scenario catalog builder. +func NewCatalog(name, scenarioID string, opts ...PackageOption) *Catalog { + c := &Catalog{name: name, scenarioID: scenarioID} + for _, o := range opts { + pkg := packageSpec{} + o(&pkg) + c.packages = append(c.packages, pkg) + } + return c +} + +// WithPackage defines a package in the catalog. +func WithPackage(name string, opts ...PackageOption) PackageOption { + return func(p *packageSpec) { + p.name = name + for _, o := range opts { + o(p) + } + } +} + +// Bundle defines a bundle version with its content options. +func Bundle(version string, opts ...BundleOption) PackageOption { + return func(p *packageSpec) { + p.bundles = append(p.bundles, bundleDef{version: version, opts: opts}) + } +} + +// Channel defines a channel with its entries. +func Channel(name string, entries ...ChannelOption) PackageOption { + return func(p *packageSpec) { + ch := channelDef{name: name} + for _, e := range entries { + entry := entryDef{} + e(&entry) + ch.entries = append(ch.entries, entry) + } + p.channels = append(p.channels, ch) + } +} + +// Entry defines a channel entry for a specific version. +func Entry(version string, opts ...ChannelOption) ChannelOption { + return func(e *entryDef) { + e.version = version + for _, o := range opts { + o(e) + } + } +} + +// Replaces declares the version this entry replaces. +func Replaces(version string) ChannelOption { + return func(e *entryDef) { + e.replaces = version + } +} + +// BuildResult contains the outputs of a successful catalog build. +type BuildResult struct { + // CatalogImageRef is the in-cluster image reference for the ClusterCatalog source. + CatalogImageRef string + // CatalogName is the name to use for the ClusterCatalog resource. + CatalogName string + // PackageNames maps original package names to their scenario-parameterized names. + PackageNames map[string]string +} + +// Build generates all bundle images and the catalog image, pushes them to the registry, +// and returns the image refs needed to create a ClusterCatalog. +// +// tag is the image tag for the catalog image (e.g. "v1", "latest"). +// localRegistry is the registry address accessible from the test process (obtained via port-forward). +// clusterRegistry is the registry address accessible from inside the cluster +// (e.g. docker-registry.operator-controller-e2e.svc.cluster.local:5000). +func (c *Catalog) Build(_ context.Context, tag, localRegistry, clusterRegistry string) (*BuildResult, error) { + packageNames := make(map[string]string) + var fbcDocs []string + + for _, pkg := range c.packages { + paramPkgName := fmt.Sprintf("%s-%s", pkg.name, c.scenarioID) + packageNames[pkg.name] = paramPkgName + + bundleImageRefs := make(map[string]string) // version -> cluster image ref + + // Build and push each bundle image + for _, bd := range pkg.bundles { + spec := buildBundle(c.scenarioID, paramPkgName, bd.version, bd.opts) + + img, err := crane.Image(spec.files) + if err != nil { + return nil, fmt.Errorf("failed to create bundle image for %s:%s: %w", paramPkgName, bd.version, err) + } + + labels := map[string]string{ + "operators.operatorframework.io.bundle.mediatype.v1": "registry+v1", + "operators.operatorframework.io.bundle.manifests.v1": "manifests/", + "operators.operatorframework.io.bundle.metadata.v1": "metadata/", + "operators.operatorframework.io.bundle.package.v1": paramPkgName, + "operators.operatorframework.io.bundle.channels.v1": "default", + } + img, err = mutate.Config(img, v1.Config{Labels: labels}) + if err != nil { + return nil, fmt.Errorf("failed to set bundle labels for %s:%s: %w", paramPkgName, bd.version, err) + } + + tag := fmt.Sprintf("%s/bundles/%s:v%s", localRegistry, paramPkgName, bd.version) + if err := crane.Push(img, tag, crane.Insecure); err != nil { + return nil, fmt.Errorf("failed to push bundle image %s: %w", tag, err) + } + bundleClusterRegistry := clusterRegistry + if spec.clusterRegistryOverride != "" { + bundleClusterRegistry = spec.clusterRegistryOverride + } + bundleImageRefs[bd.version] = fmt.Sprintf("%s/bundles/%s:v%s", bundleClusterRegistry, paramPkgName, bd.version) + } + + // Generate FBC for this package + defaultChannel := "default" + if len(pkg.channels) > 0 { + defaultChannel = pkg.channels[0].name + } + fbcDocs = append(fbcDocs, fmt.Sprintf(`schema: olm.package +name: %s +defaultChannel: %s`, paramPkgName, defaultChannel)) + + for _, ch := range pkg.channels { + var entries []string + for _, e := range ch.entries { + entry := fmt.Sprintf(" - name: %s.%s", paramPkgName, e.version) + if e.replaces != "" { + entry += fmt.Sprintf("\n replaces: %s.%s", paramPkgName, e.replaces) + } + entries = append(entries, entry) + } + fbcDocs = append(fbcDocs, fmt.Sprintf(`schema: olm.channel +name: %s +package: %s +entries: +%s`, ch.name, paramPkgName, strings.Join(entries, "\n"))) + } + + for _, bd := range pkg.bundles { + imageRef := bundleImageRefs[bd.version] + fbcDocs = append(fbcDocs, fmt.Sprintf(`schema: olm.bundle +name: %s.%s +package: %s +image: %s +properties: + - type: olm.package + value: + packageName: %s + version: %s`, paramPkgName, bd.version, paramPkgName, imageRef, paramPkgName, bd.version)) + } + } + + // Build catalog image + fbcContent := strings.Join(fbcDocs, "\n---\n") + catalogFiles := map[string][]byte{ + "configs/catalog.yaml": []byte(fbcContent), + } + catalogImg, err := crane.Image(catalogFiles) + if err != nil { + return nil, fmt.Errorf("failed to create catalog image: %w", err) + } + catalogImg, err = mutate.Config(catalogImg, v1.Config{ + Labels: map[string]string{ + "operators.operatorframework.io.index.configs.v1": "/configs", + }, + }) + if err != nil { + return nil, fmt.Errorf("failed to set catalog labels: %w", err) + } + + catalogTag := fmt.Sprintf("%s/e2e/%s-catalog-%s:%s", localRegistry, c.name, c.scenarioID, tag) + if err := crane.Push(catalogImg, catalogTag, crane.Insecure); err != nil { + return nil, fmt.Errorf("failed to push catalog image %s: %w", catalogTag, err) + } + + return &BuildResult{ + CatalogImageRef: fmt.Sprintf("%s/e2e/%s-catalog-%s:%s", clusterRegistry, c.name, c.scenarioID, tag), + CatalogName: fmt.Sprintf("%s-catalog-%s", c.name, c.scenarioID), + PackageNames: packageNames, + }, nil +} diff --git a/test/internal/catalog/catalog_test.go b/test/internal/catalog/catalog_test.go new file mode 100644 index 0000000000..894f6af4ed --- /dev/null +++ b/test/internal/catalog/catalog_test.go @@ -0,0 +1,168 @@ +package catalog + +import ( + "strings" + "testing" +) + +func TestBuildBundle_WithCRDAndDeployment(t *testing.T) { + b := buildBundle("abc123", "test-abc123", "1.0.0", []BundleOption{WithCRD(), WithDeployment(), WithConfigMap()}) + + if b.version != "1.0.0" { + t.Errorf("expected version 1.0.0, got %s", b.version) + } + + // Check CRD has parameterized names + crd, ok := b.files["manifests/crd.yaml"] + if !ok { + t.Fatal("expected manifests/crd.yaml") + } + if !strings.Contains(string(crd), "e2e-abc123.e2e.operatorframework.io") { + t.Error("CRD group should contain scenario ID") + } + if !strings.Contains(string(crd), "e2e-abc123tests") { + t.Error("CRD plural should contain scenario ID") + } + + // Check CSV references parameterized deployment name + csv, ok := b.files["manifests/csv.yaml"] + if !ok { + t.Fatal("expected manifests/csv.yaml") + } + if !strings.Contains(string(csv), "test-operator-abc123") { + t.Error("CSV deployment name should contain scenario ID") + } + if !strings.Contains(string(csv), "busybox:1.36") { + t.Error("CSV should use busybox:1.36 as container image") + } + + // Check script ConfigMap + scriptCM, ok := b.files["manifests/script-configmap.yaml"] + if !ok { + t.Fatal("expected manifests/script-configmap.yaml") + } + if !strings.Contains(string(scriptCM), "httpd-script-abc123") { + t.Error("script ConfigMap name should contain scenario ID") + } + + // Check test ConfigMap + cm, ok := b.files["manifests/bundle-configmap.yaml"] + if !ok { + t.Fatal("expected manifests/bundle-configmap.yaml") + } + if !strings.Contains(string(cm), "test-configmap-abc123") { + t.Error("test ConfigMap name should contain scenario ID") + } + + // Check metadata/annotations.yaml exists and contains package name + ann, ok := b.files["metadata/annotations.yaml"] + if !ok { + t.Fatal("expected metadata/annotations.yaml") + } + if !strings.Contains(string(ann), "test-abc123") { + t.Error("annotations should contain package name") + } + + // Check NetworkPolicy + np, ok := b.files["manifests/networkpolicy.yaml"] + if !ok { + t.Fatal("expected manifests/networkpolicy.yaml") + } + if !strings.Contains(string(np), "test-operator-abc123-network-policy") { + t.Error("NetworkPolicy name should contain scenario ID") + } +} + +func TestBuildBundle_BadImage(t *testing.T) { + b := buildBundle("bad1", "test-bad1", "1.0.2", []BundleOption{BadImage()}) + + // BadImage bundles should have CSV with wrong/image + csv, ok := b.files["manifests/csv.yaml"] + if !ok { + t.Fatal("BadImage bundle should have CSV") + } + if !strings.Contains(string(csv), "wrong/image") { + t.Error("BadImage CSV should reference wrong/image") + } + + // BadImage should also set hasCRD=true + if _, ok := b.files["manifests/crd.yaml"]; !ok { + t.Error("BadImage bundle should have CRD") + } +} + +func TestBuildBundle_NoCRD(t *testing.T) { + b := buildBundle("nocrd", "test-nocrd", "1.0.0", []BundleOption{WithDeployment()}) + if _, ok := b.files["manifests/crd.yaml"]; ok { + t.Error("should not have CRD when WithCRD not specified") + } + if _, ok := b.files["manifests/csv.yaml"]; !ok { + t.Error("should have CSV when WithDeployment specified") + } +} + +func TestCatalog_FBCGeneration(t *testing.T) { + cat := NewCatalog("test", "sc1", + WithPackage("test", + Bundle("1.0.0", WithCRD(), WithDeployment(), WithConfigMap()), + Bundle("1.2.0", WithCRD(), WithDeployment()), + Channel("alpha", Entry("1.0.0")), + Channel("beta", Entry("1.0.0"), Entry("1.2.0", Replaces("1.0.0"))), + ), + ) + + if len(cat.packages) != 1 { + t.Fatalf("expected 1 package, got %d", len(cat.packages)) + } + pkg := cat.packages[0] + if pkg.name != "test" { + t.Errorf("expected package name 'test', got %q", pkg.name) + } + if len(pkg.bundles) != 2 { + t.Errorf("expected 2 bundles, got %d", len(pkg.bundles)) + } + if len(pkg.channels) != 2 { + t.Errorf("expected 2 channels, got %d", len(pkg.channels)) + } + + // Verify alpha channel has 1 entry + alpha := pkg.channels[0] + if alpha.name != "alpha" { + t.Errorf("expected channel 'alpha', got %q", alpha.name) + } + if len(alpha.entries) != 1 { + t.Errorf("expected 1 alpha entry, got %d", len(alpha.entries)) + } + + // Verify beta channel has replaces edge + beta := pkg.channels[1] + if len(beta.entries) != 2 { + t.Fatalf("expected 2 beta entries, got %d", len(beta.entries)) + } + if beta.entries[1].replaces != "1.0.0" { + t.Errorf("expected entry 1.2.0 to replace 1.0.0, got %q", beta.entries[1].replaces) + } +} + +func TestCatalog_MultiplePackages(t *testing.T) { + cat := NewCatalog("test", "sc2", + WithPackage("foo", + Bundle("1.0.0", WithCRD(), WithDeployment()), + Channel("stable", Entry("1.0.0")), + ), + WithPackage("bar", + Bundle("2.0.0", WithCRD(), WithDeployment()), + Channel("stable", Entry("2.0.0")), + ), + ) + + if len(cat.packages) != 2 { + t.Fatalf("expected 2 packages, got %d", len(cat.packages)) + } + if cat.packages[0].name != "foo" { + t.Errorf("expected first package 'foo', got %q", cat.packages[0].name) + } + if cat.packages[1].name != "bar" { + t.Errorf("expected second package 'bar', got %q", cat.packages[1].name) + } +} diff --git a/test/internal/registry/registry.go b/test/internal/registry/registry.go new file mode 100644 index 0000000000..05b15bc2ed --- /dev/null +++ b/test/internal/registry/registry.go @@ -0,0 +1,220 @@ +// Package registry provides functions to deploy an OCI image registry +// in a Kubernetes cluster for e2e testing. +package registry + +import ( + "context" + "fmt" + "io" + "net/http" + "time" + + certmanagerv1 "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1" + cmapplyconfig "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1" + cmmetaapplyconfig "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1" + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/intstr" + "k8s.io/apimachinery/pkg/util/wait" + appsv1ac "k8s.io/client-go/applyconfigurations/apps/v1" + corev1ac "k8s.io/client-go/applyconfigurations/core/v1" + metav1ac "k8s.io/client-go/applyconfigurations/meta/v1" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" + "k8s.io/client-go/tools/portforward" + "k8s.io/client-go/transport/spdy" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +const ( + DefaultNamespace = "operator-controller-e2e" + DefaultName = "docker-registry" +) + +// Deploy ensures the image registry namespace, TLS certificate, deployment, +// and service exist in the cluster. It is idempotent — if the resources +// already exist, they are updated in place via server-side apply. +func Deploy(ctx context.Context, cfg *rest.Config, namespace, name string) error { + scheme := runtime.NewScheme() + if err := corev1.AddToScheme(scheme); err != nil { + return fmt.Errorf("failed to add core/v1 to scheme: %w", err) + } + if err := appsv1.AddToScheme(scheme); err != nil { + return fmt.Errorf("failed to add apps/v1 to scheme: %w", err) + } + if err := certmanagerv1.AddToScheme(scheme); err != nil { + return fmt.Errorf("failed to add cert-manager/v1 to scheme: %w", err) + } + c, err := client.New(cfg, client.Options{Scheme: scheme}) + if err != nil { + return fmt.Errorf("failed to create client: %w", err) + } + + secretName := fmt.Sprintf("%s-registry", namespace) + fieldOwner := client.FieldOwner("e2e-test") + + // Apply namespace + if err := c.Apply(ctx, corev1ac.Namespace(namespace), fieldOwner, client.ForceOwnership); err != nil { + return fmt.Errorf("failed to apply namespace: %w", err) + } + + // Apply TLS certificate + cert := cmapplyconfig.Certificate(secretName, namespace). + WithSpec(cmapplyconfig.CertificateSpec(). + WithSecretName(secretName). + WithIsCA(true). + WithDNSNames( + fmt.Sprintf("%s.%s.svc", name, namespace), + fmt.Sprintf("%s.%s.svc.cluster.local", name, namespace), + ). + WithPrivateKey(cmapplyconfig.CertificatePrivateKey(). + WithRotationPolicy(certmanagerv1.RotationPolicyAlways). + WithAlgorithm(certmanagerv1.ECDSAKeyAlgorithm). + WithSize(256), + ). + WithIssuerRef(cmmetaapplyconfig.IssuerReference(). + WithName("olmv1-ca"). + WithKind("ClusterIssuer"). + WithGroup("cert-manager.io"), + ), + ) + if err := c.Apply(ctx, cert, fieldOwner, client.ForceOwnership); err != nil { + return fmt.Errorf("failed to apply certificate: %w", err) + } + + // Apply deployment + deploy := appsv1ac.Deployment(name, namespace). + WithLabels(map[string]string{"app": "registry"}). + WithSpec(appsv1ac.DeploymentSpec(). + WithReplicas(1). + WithSelector(metav1ac.LabelSelector(). + WithMatchLabels(map[string]string{"app": "registry"}), + ). + WithTemplate(corev1ac.PodTemplateSpec(). + WithLabels(map[string]string{"app": "registry"}). + WithSpec(corev1ac.PodSpec(). + WithContainers(corev1ac.Container(). + WithName("registry"). + WithImage("registry:3"). + WithImagePullPolicy(corev1.PullIfNotPresent). + WithVolumeMounts(corev1ac.VolumeMount(). + WithName("certs-vol"). + WithMountPath("/certs"), + ). + WithEnv( + corev1ac.EnvVar().WithName("REGISTRY_HTTP_TLS_CERTIFICATE").WithValue("/certs/tls.crt"), + corev1ac.EnvVar().WithName("REGISTRY_HTTP_TLS_KEY").WithValue("/certs/tls.key"), + ), + ). + WithVolumes(corev1ac.Volume(). + WithName("certs-vol"). + WithSecret(corev1ac.SecretVolumeSource(). + WithSecretName(secretName), + ), + ), + ), + ), + ) + if err := c.Apply(ctx, deploy, fieldOwner, client.ForceOwnership); err != nil { + return fmt.Errorf("failed to apply deployment: %w", err) + } + + // Apply service + svc := corev1ac.Service(name, namespace). + WithSpec(corev1ac.ServiceSpec(). + WithSelector(map[string]string{"app": "registry"}). + WithPorts(corev1ac.ServicePort(). + WithName("http"). + WithPort(5000). + WithTargetPort(intstr.FromInt32(5000)), + ), + ) + if err := c.Apply(ctx, svc, fieldOwner, client.ForceOwnership); err != nil { + return fmt.Errorf("failed to apply service: %w", err) + } + + // Wait for the deployment to be available + d := &appsv1.Deployment{} + deployKey := client.ObjectKey{Namespace: namespace, Name: name} + if err := wait.PollUntilContextTimeout(ctx, time.Second, 60*time.Second, true, func(ctx context.Context) (bool, error) { + if err := c.Get(ctx, deployKey, d); err != nil { + return false, nil + } + for _, cond := range d.Status.Conditions { + if cond.Type == appsv1.DeploymentAvailable && cond.Status == corev1.ConditionTrue { + return true, nil + } + } + return false, nil + }); err != nil { + return fmt.Errorf("timed out waiting for registry deployment to become available: %w", err) + } + + return nil +} + +// PortForward establishes a port-forward to the registry pod and returns +// the local address (e.g. "localhost:12345") that can be used to push images. +// The returned stop function should be called to clean up the port-forward. +func PortForward(ctx context.Context, cfg *rest.Config, namespace, name string) (string, func(), error) { + clientset, err := kubernetes.NewForConfig(cfg) + if err != nil { + return "", nil, fmt.Errorf("failed to create kubernetes client: %w", err) + } + + pods, err := clientset.CoreV1().Pods(namespace).List(ctx, metav1.ListOptions{ + LabelSelector: "app=registry", + FieldSelector: "status.phase=Running", + }) + if err != nil { + return "", nil, fmt.Errorf("failed to list registry pods: %w", err) + } + if len(pods.Items) == 0 { + return "", nil, fmt.Errorf("no running registry pods found in %s", namespace) + } + podName := pods.Items[0].Name + + transport, upgrader, err := spdy.RoundTripperFor(cfg) + if err != nil { + return "", nil, fmt.Errorf("failed to create SPDY round tripper: %w", err) + } + + req := clientset.CoreV1().RESTClient().Post(). + Resource("pods"). + Namespace(namespace). + Name(podName). + SubResource("portforward") + + dialer := spdy.NewDialer(upgrader, &http.Client{Transport: transport}, "POST", req.URL()) + + stopChan := make(chan struct{}) + readyChan := make(chan struct{}) + + fw, err := portforward.New(dialer, []string{"0:5000"}, stopChan, readyChan, io.Discard, io.Discard) + if err != nil { + return "", nil, fmt.Errorf("failed to create port forwarder: %w", err) + } + + errChan := make(chan error, 1) + go func() { + errChan <- fw.ForwardPorts() + }() + + select { + case <-readyChan: + ports, err := fw.GetPorts() + if err != nil { + close(stopChan) + return "", nil, fmt.Errorf("failed to get forwarded ports: %w", err) + } + localPort := ports[0].Local + return fmt.Sprintf("localhost:%d", localPort), func() { close(stopChan) }, nil + case err := <-errChan: + return "", nil, fmt.Errorf("port-forward failed: %w", err) + case <-ctx.Done(): + close(stopChan) + return "", nil, ctx.Err() + } +} diff --git a/test/upgrade-e2e/features/operator-upgrade.feature b/test/upgrade-e2e/features/operator-upgrade.feature index 117211b612..25bc6d6791 100644 --- a/test/upgrade-e2e/features/operator-upgrade.feature +++ b/test/upgrade-e2e/features/operator-upgrade.feature @@ -6,25 +6,29 @@ Feature: Operator upgrade verification Background: Given the latest stable OLM release is installed - And ClusterCatalog "test" serves bundles - And ServiceAccount "olm-sa" with permissions to install extensions is available in "upgrade-ns" namespace + And an image registry is available + And a catalog "test" with packages: + | package | version | channel | replaces | contents | + | test | 1.0.0 | beta | | CRD, Deployment, ConfigMap | + | test | 1.0.1 | beta | 1.0.0 | CRD, Deployment, ConfigMap | + And ServiceAccount "olm-sa" with permissions to install extensions is available in "${TEST_NAMESPACE}" namespace And ClusterExtension is applied """ apiVersion: olm.operatorframework.io/v1 kind: ClusterExtension metadata: - name: upgrade-ce + name: ${NAME} spec: - namespace: upgrade-ns + namespace: ${TEST_NAMESPACE} serviceAccount: name: olm-sa source: sourceType: Catalog catalog: - packageName: test + packageName: ${PACKAGE:test} selector: matchLabels: - "olm.operatorframework.io/metadata.name": test-catalog + "olm.operatorframework.io/metadata.name": ${CATALOG:test} version: 1.0.0 """ And ClusterExtension is available @@ -33,12 +37,12 @@ Feature: Operator upgrade verification And operator-controller is ready to reconcile resources Scenario: ClusterCatalog continues unpacking after OLM upgrade - When ClusterCatalog is reconciled - Then ClusterCatalog reports Progressing as True with Reason Succeeded - And ClusterCatalog reports Serving as True with Reason Available + When catalog "test" is reconciled + Then catalog "test" reports Progressing as True with Reason Succeeded + And catalog "test" reports Serving as True with Reason Available Scenario: ClusterExtension remains functional after OLM upgrade Given ClusterExtension is reconciled When ClusterExtension is updated to version "1.0.1" Then ClusterExtension is available - And bundle "test-operator.1.0.1" is installed in version "1.0.1" + And bundle "${PACKAGE:test}.1.0.1" is installed in version "1.0.1" diff --git a/testdata/Dockerfile b/testdata/Dockerfile deleted file mode 100644 index 0bee4012bf..0000000000 --- a/testdata/Dockerfile +++ /dev/null @@ -1,9 +0,0 @@ -FROM gcr.io/distroless/static:nonroot - -WORKDIR / - -COPY push/bin/push push - -COPY images images - -USER 65532:65532 diff --git a/testdata/build-test-registry.sh b/testdata/build-test-registry.sh index e2dcc09148..81ff61b10c 100755 --- a/testdata/build-test-registry.sh +++ b/testdata/build-test-registry.sh @@ -1,138 +1,4 @@ #!/bin/bash - -set -o errexit -set -o nounset -set -o pipefail - -help=" -build-test-registry.sh is a script to stand up an image registry within a cluster. -Usage: - build-test-registry.sh [NAMESPACE] [NAME] [IMAGE] - -Argument Descriptions: - - NAMESPACE is the namespace that should be created and is the namespace in which the image registry will be created - - NAME is the name that should be used for the image registry Deployment and Service - - IMAGE is the name of the image that should be used to run the image registry -" - -if [[ "$#" -ne 3 ]]; then - echo "Illegal number of arguments passed" - echo "${help}" - exit 1 -fi - -namespace=$1 -name=$2 -image=$3 - -kubectl apply -f - << EOF -apiVersion: v1 -kind: Namespace -metadata: - name: ${namespace} ---- -apiVersion: cert-manager.io/v1 -kind: Certificate -metadata: - name: ${namespace}-registry - namespace: ${namespace} -spec: - secretName: ${namespace}-registry - isCA: true - dnsNames: - - ${name}.${namespace}.svc - - ${name}.${namespace}.svc.cluster.local - - ${name}-controller-manager-metrics-service.${namespace}.svc - - ${name}-controller-manager-metrics-service.${namespace}.svc.cluster.local - privateKey: - rotationPolicy: Always - algorithm: ECDSA - size: 256 - issuerRef: - name: olmv1-ca - kind: ClusterIssuer - group: cert-manager.io ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: ${name} - namespace: ${namespace} - labels: - app: registry -spec: - replicas: 1 - selector: - matchLabels: - app: registry - template: - metadata: - labels: - app: registry - spec: - containers: - - name: registry - image: registry:3 - imagePullPolicy: IfNotPresent - volumeMounts: - - name: certs-vol - mountPath: "/certs" - env: - - name: REGISTRY_HTTP_TLS_CERTIFICATE - value: "/certs/tls.crt" - - name: REGISTRY_HTTP_TLS_KEY - value: "/certs/tls.key" - volumes: - - name: certs-vol - secret: - secretName: ${namespace}-registry ---- -apiVersion: v1 -kind: Service -metadata: - name: ${name} - namespace: ${namespace} -spec: - selector: - app: registry - ports: - - name: http - port: 5000 - targetPort: 5000 - nodePort: 30000 - type: NodePort -EOF - -kubectl wait --for=condition=Available -n "${namespace}" "deploy/${name}" --timeout=60s - -kubectl apply -f - << EOF -apiVersion: batch/v1 -kind: Job -metadata: - name: ${name}-push - namespace: "${namespace}" -spec: - template: - spec: - restartPolicy: Never - containers: - - name: push - image: ${image} - command: - - /push - args: - - "--registry-address=${name}.${namespace}.svc:5000" - - "--images-path=/images" - volumeMounts: - - name: certs-vol - mountPath: "/certs" - env: - - name: SSL_CERT_DIR - value: "/certs/" - volumes: - - name: certs-vol - secret: - secretName: ${namespace}-registry -EOF - -kubectl wait --for=condition=Complete -n "${namespace}" "job/${name}-push" --timeout=60s +# No-op: test registry is now deployed dynamically by Go test code. +# This stub exists for backward compatibility with downstream CI. +exit 0 diff --git a/testdata/images/bundles/large-crd-operator/v1.0.0/manifests/largecrd.operatorframework.io_largecrdtests.yaml b/testdata/images/bundles/large-crd-operator/v1.0.0/manifests/largecrd.operatorframework.io_largecrdtests.yaml deleted file mode 100644 index 90ea044676..0000000000 --- a/testdata/images/bundles/large-crd-operator/v1.0.0/manifests/largecrd.operatorframework.io_largecrdtests.yaml +++ /dev/null @@ -1,775 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.16.1 - name: largecrdtests.largecrd.operatorframework.io -spec: - group: largecrd.operatorframework.io - names: - kind: LargeCrdTest - listKind: LargeCrdTestList - plural: largecrdtests - singular: largecrdtest - scope: Cluster - versions: - - name: v1 - served: true - storage: true - schema: - openAPIV3Schema: - type: object - properties: - spec: - type: object - properties: - field0000: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0001: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0002: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0003: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0004: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0005: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0006: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0007: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0008: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0009: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0010: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0011: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0012: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0013: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0014: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0015: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0016: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0017: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0018: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0019: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0020: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0021: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0022: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0023: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0024: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0025: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0026: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0027: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0028: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0029: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0030: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0031: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0032: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0033: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0034: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0035: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0036: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0037: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0038: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0039: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0040: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0041: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0042: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0043: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0044: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0045: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0046: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0047: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0048: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0049: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0050: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0051: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0052: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0053: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0054: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0055: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0056: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0057: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0058: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0059: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0060: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0061: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0062: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0063: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0064: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0065: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0066: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0067: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0068: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0069: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0070: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0071: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0072: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0073: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0074: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0075: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0076: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0077: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0078: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0079: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0080: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0081: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0082: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0083: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0084: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0085: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0086: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0087: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0088: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0089: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0090: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0091: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0092: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0093: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0094: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0095: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0096: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0097: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0098: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0099: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0100: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0101: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0102: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0103: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0104: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0105: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0106: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0107: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0108: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0109: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0110: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0111: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0112: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0113: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0114: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0115: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0116: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0117: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0118: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0119: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0120: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0121: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0122: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0123: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0124: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0125: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0126: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0127: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0128: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0129: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0130: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0131: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0132: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0133: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0134: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0135: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0136: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0137: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0138: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0139: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0140: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0141: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0142: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0143: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0144: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0145: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0146: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0147: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0148: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0149: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0150: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0151: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0152: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0153: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0154: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0155: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0156: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0157: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0158: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0159: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0160: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0161: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0162: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0163: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0164: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0165: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0166: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0167: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0168: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0169: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0170: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0171: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0172: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0173: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0174: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0175: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0176: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0177: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0178: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0179: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0180: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0181: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0182: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0183: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0184: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0185: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0186: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0187: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0188: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0189: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0190: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0191: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0192: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0193: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0194: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0195: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0196: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0197: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0198: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0199: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0200: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0201: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0202: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0203: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0204: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0205: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0206: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0207: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0208: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0209: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0210: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0211: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0212: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0213: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0214: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0215: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0216: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0217: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0218: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0219: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0220: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0221: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0222: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0223: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0224: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0225: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0226: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0227: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0228: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0229: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0230: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0231: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0232: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0233: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0234: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0235: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0236: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0237: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0238: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0239: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0240: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0241: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0242: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0243: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0244: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0245: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0246: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0247: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0248: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" - field0249: - type: string - description: "This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to validate that the OLM installation pipeline correctly handles bundles containing large Custom Resource Definitions. The field accepts a string value that represents a configuration parameter for the operator deployment. This field provides configuration for the large CRD test operator. It is used to valida" diff --git a/testdata/images/bundles/large-crd-operator/v1.0.0/manifests/largecrdoperator.clusterserviceversion.yaml b/testdata/images/bundles/large-crd-operator/v1.0.0/manifests/largecrdoperator.clusterserviceversion.yaml deleted file mode 100644 index b5528ea51a..0000000000 --- a/testdata/images/bundles/large-crd-operator/v1.0.0/manifests/largecrdoperator.clusterserviceversion.yaml +++ /dev/null @@ -1,165 +0,0 @@ -apiVersion: operators.coreos.com/v1alpha1 -kind: ClusterServiceVersion -metadata: - annotations: - alm-examples: |- - [ - { - "apiVersion": "largecrd.operatorframework.io/v1", - "kind": "LargeCrdTest", - "metadata": { - "labels": { - "app.kubernetes.io/managed-by": "kustomize", - "app.kubernetes.io/name": "large-crd-operator" - }, - "name": "largecrdtest-sample" - }, - "spec": null - } - ] - capabilities: Basic Install - createdAt: "2024-10-24T19:21:40Z" - operators.operatorframework.io/builder: operator-sdk-v1.34.1 - operators.operatorframework.io/project_layout: go.kubebuilder.io/v4 - name: large-crd-operator.v1.0.0 - namespace: placeholder -spec: - apiservicedefinitions: {} - customresourcedefinitions: - owned: - - description: LargeCrdTest is a test CRD with a large schema - displayName: LargeCrdTest - kind: LargeCrdTest - name: largecrdtests.largecrd.operatorframework.io - version: v1 - description: OLM E2E Large CRD Testing Operator - displayName: large-crd-operator - icon: - - base64data: "" - mediatype: "" - install: - spec: - deployments: - - label: - app.kubernetes.io/component: controller - app.kubernetes.io/name: large-crd-operator - app.kubernetes.io/version: 1.0.0 - name: large-crd-operator - spec: - replicas: 1 - selector: - matchLabels: - app: largecrdtest - template: - metadata: - labels: - app: largecrdtest - spec: - serviceAccountName: simple-bundle-manager - terminationGracePeriodSeconds: 0 - volumes: - - name: scripts - configMap: - name: httpd-script - defaultMode: 0755 - containers: - - name: busybox-httpd-container - image: busybox:1.37 - command: ["/scripts/httpd.sh"] - ports: - - containerPort: 80 - volumeMounts: - - name: scripts - mountPath: /scripts - readOnly: true - startupProbe: - httpGet: - path: /started - port: 80 - failureThreshold: 30 - periodSeconds: 10 - livenessProbe: - httpGet: - path: /live - port: 80 - failureThreshold: 1 - periodSeconds: 2 - readinessProbe: - httpGet: - path: /ready - port: 80 - initialDelaySeconds: 1 - periodSeconds: 1 - clusterPermissions: - - rules: - - apiGroups: - - authentication.k8s.io - resources: - - tokenreviews - verbs: - - create - - apiGroups: - - authorization.k8s.io - resources: - - subjectaccessreviews - verbs: - - create - serviceAccountName: simple-bundle-manager - permissions: - - rules: - - apiGroups: - - "" - resources: - - configmaps - - serviceaccounts - verbs: - - get - - list - - watch - - create - - update - - patch - - delete - - apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete - - apiGroups: - - "" - resources: - - events - verbs: - - create - - patch - serviceAccountName: simple-bundle-manager - strategy: deployment - installModes: - - supported: false - type: OwnNamespace - - supported: true - type: SingleNamespace - - supported: false - type: MultiNamespace - - supported: true - type: AllNamespaces - keywords: - - registry - links: - - name: large-crd-operator - url: https://large-crd-operator.domain - maintainers: - - email: main#large-crd-operator.domain - name: Large CRD Operator - maturity: beta - provider: - name: Large CRD Operator - url: https://large-crd-operator.domain - version: 1.0.0 diff --git a/testdata/images/bundles/large-crd-operator/v1.0.0/manifests/script.configmap.yaml b/testdata/images/bundles/large-crd-operator/v1.0.0/manifests/script.configmap.yaml deleted file mode 100644 index bfbfe27b93..0000000000 --- a/testdata/images/bundles/large-crd-operator/v1.0.0/manifests/script.configmap.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: httpd-script -data: - httpd.sh: | - #!/bin/sh - echo "Version 1.0.0" - echo true > /var/www/started - echo true > /var/www/ready - echo true > /var/www/live - exec httpd -f -h /var/www -p 80 diff --git a/testdata/images/bundles/large-crd-operator/v1.0.0/metadata/annotations.yaml b/testdata/images/bundles/large-crd-operator/v1.0.0/metadata/annotations.yaml deleted file mode 100644 index 41c621e339..0000000000 --- a/testdata/images/bundles/large-crd-operator/v1.0.0/metadata/annotations.yaml +++ /dev/null @@ -1,10 +0,0 @@ -annotations: - # Core bundle annotations. - operators.operatorframework.io.bundle.mediatype.v1: registry+v1 - operators.operatorframework.io.bundle.manifests.v1: manifests/ - operators.operatorframework.io.bundle.metadata.v1: metadata/ - operators.operatorframework.io.bundle.package.v1: large-crd-operator - operators.operatorframework.io.bundle.channels.v1: beta - operators.operatorframework.io.metrics.builder: operator-sdk-v1.28.0 - operators.operatorframework.io.metrics.mediatype.v1: metrics+v1 - operators.operatorframework.io.metrics.project_layout: unknown diff --git a/testdata/images/bundles/own-namespace-operator/v1.0.0/manifests/olm.operatorframework.com_ownnamespaces.yaml b/testdata/images/bundles/own-namespace-operator/v1.0.0/manifests/olm.operatorframework.com_ownnamespaces.yaml deleted file mode 100644 index 305e3c73e8..0000000000 --- a/testdata/images/bundles/own-namespace-operator/v1.0.0/manifests/olm.operatorframework.com_ownnamespaces.yaml +++ /dev/null @@ -1,27 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.16.1 - name: ownnamespaces.olm.operatorframework.io -spec: - group: olm.operatorframework.io - names: - kind: OwnNamespace - listKind: OwnNamespaceList - plural: ownnamespaces - singular: ownnamespace - scope: Cluster - versions: - - name: v1 - served: true - storage: true - schema: - openAPIV3Schema: - type: object - properties: - spec: - type: object - properties: - testField: - type: string diff --git a/testdata/images/bundles/own-namespace-operator/v1.0.0/manifests/ownnamespaceoperator.clusterserviceversion.yaml b/testdata/images/bundles/own-namespace-operator/v1.0.0/manifests/ownnamespaceoperator.clusterserviceversion.yaml deleted file mode 100644 index de0af1d40a..0000000000 --- a/testdata/images/bundles/own-namespace-operator/v1.0.0/manifests/ownnamespaceoperator.clusterserviceversion.yaml +++ /dev/null @@ -1,151 +0,0 @@ -apiVersion: operators.coreos.com/v1alpha1 -kind: ClusterServiceVersion -metadata: - annotations: - alm-examples: |- - [ - { - "apiVersion": "ownnamespaces.olm.operatorframework.io/v1", - "kind": "OwnNamespace", - "metadata": { - "labels": { - "app.kubernetes.io/managed-by": "kustomize", - "app.kubernetes.io/name": "test" - }, - "name": "test-sample" - }, - "spec": null - } - ] - capabilities: Basic Install - createdAt: "2024-10-24T19:21:40Z" - operators.operatorframework.io/builder: operator-sdk-v1.34.1 - operators.operatorframework.io/project_layout: go.kubebuilder.io/v4 - name: ownnamespaceoperator.v1.0.0 - namespace: placeholder -spec: - apiservicedefinitions: {} - customresourcedefinitions: - owned: - - description: A dummy resource for an operator that only supports own namespace install mode - displayName: OwnNamespace - kind: OwnNamespace - name: ownnamespaces.olm.operatorframework.io - version: v1 - description: OLM OwnNamespace Testing Operator - displayName: test-operator - icon: - - base64data: "" - mediatype: "" - install: - spec: - deployments: - - label: - app.kubernetes.io/component: controller - app.kubernetes.io/name: own-namespace-operator - app.kubernetes.io/version: 1.0.0 - name: own-namespace-operator - spec: - replicas: 1 - selector: - matchLabels: - app: ownnamespacetest - template: - metadata: - labels: - app: ownnamespacetest - spec: - serviceAccountName: simple-bundle-manager - terminationGracePeriodSeconds: 0 - containers: - - name: busybox - image: busybox:1.36 - command: - - 'sleep' - - '1000' - securityContext: - runAsUser: 1000 - runAsNonRoot: true - clusterPermissions: - - rules: - - apiGroups: - - authentication.k8s.io - resources: - - tokenreviews - verbs: - - create - - apiGroups: - - authorization.k8s.io - resources: - - subjectaccessreviews - verbs: - - create - serviceAccountName: simple-bundle-manager - permissions: - - rules: - - apiGroups: - - "" - resources: - - configmaps - - serviceaccounts - verbs: - - get - - list - - watch - - create - - update - - patch - - delete - - apiGroups: - - networking.k8s.io - resources: - - networkpolicies - verbs: - - get - - list - - create - - update - - delete - - apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete - - apiGroups: - - "" - resources: - - events - verbs: - - create - - patch - serviceAccountName: simple-bundle-manager - strategy: deployment - installModes: - - supported: true - type: OwnNamespace - - supported: false - type: SingleNamespace - - supported: false - type: MultiNamespace - - supported: false - type: AllNamespaces - keywords: - - registry - links: - - name: simple-bundle - url: https://simple-bundle.domain - maintainers: - - email: main#simple-bundle.domain - name: Simple Bundle - maturity: beta - provider: - name: Simple Bundle - url: https://simple-bundle.domain - version: 1.0.0 diff --git a/testdata/images/bundles/own-namespace-operator/v1.0.0/metadata/annotations.yaml b/testdata/images/bundles/own-namespace-operator/v1.0.0/metadata/annotations.yaml deleted file mode 100644 index 24cf5213a1..0000000000 --- a/testdata/images/bundles/own-namespace-operator/v1.0.0/metadata/annotations.yaml +++ /dev/null @@ -1,10 +0,0 @@ -annotations: - # Core bundle annotations. - operators.operatorframework.io.bundle.mediatype.v1: registry+v1 - operators.operatorframework.io.bundle.manifests.v1: manifests/ - operators.operatorframework.io.bundle.metadata.v1: metadata/ - operators.operatorframework.io.bundle.package.v1: own-namespace-operator - operators.operatorframework.io.bundle.channels.v1: alpha - operators.operatorframework.io.metrics.builder: operator-sdk-v1.28.0 - operators.operatorframework.io.metrics.mediatype.v1: metrics+v1 - operators.operatorframework.io.metrics.project_layout: unknown diff --git a/testdata/images/bundles/single-namespace-operator/v1.0.0/manifests/olm.operatorframework.com_singlenamespaces.yaml b/testdata/images/bundles/single-namespace-operator/v1.0.0/manifests/olm.operatorframework.com_singlenamespaces.yaml deleted file mode 100644 index 5f8d305434..0000000000 --- a/testdata/images/bundles/single-namespace-operator/v1.0.0/manifests/olm.operatorframework.com_singlenamespaces.yaml +++ /dev/null @@ -1,27 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.16.1 - name: singlenamespaces.olm.operatorframework.io -spec: - group: olm.operatorframework.io - names: - kind: SingleNamespace - listKind: SingleNamespaceList - plural: singlenamespaces - singular: singlenamespace - scope: Cluster - versions: - - name: v1 - served: true - storage: true - schema: - openAPIV3Schema: - type: object - properties: - spec: - type: object - properties: - testField: - type: string diff --git a/testdata/images/bundles/single-namespace-operator/v1.0.0/manifests/singlenamespaceoperator.clusterserviceversion.yaml b/testdata/images/bundles/single-namespace-operator/v1.0.0/manifests/singlenamespaceoperator.clusterserviceversion.yaml deleted file mode 100644 index c29519eb89..0000000000 --- a/testdata/images/bundles/single-namespace-operator/v1.0.0/manifests/singlenamespaceoperator.clusterserviceversion.yaml +++ /dev/null @@ -1,151 +0,0 @@ -apiVersion: operators.coreos.com/v1alpha1 -kind: ClusterServiceVersion -metadata: - annotations: - alm-examples: |- - [ - { - "apiVersion": "singlenamespaces.olm.operatorframework.io/v1", - "kind": "SingleNamespace", - "metadata": { - "labels": { - "app.kubernetes.io/managed-by": "kustomize", - "app.kubernetes.io/name": "test" - }, - "name": "test-sample" - }, - "spec": null - } - ] - capabilities: Basic Install - createdAt: "2024-10-24T19:21:40Z" - operators.operatorframework.io/builder: operator-sdk-v1.34.1 - operators.operatorframework.io/project_layout: go.kubebuilder.io/v4 - name: singlenamespaceoperator.v1.0.0 - namespace: placeholder -spec: - apiservicedefinitions: {} - customresourcedefinitions: - owned: - - description: A dummy resource for an operator that only supports single namespace install mode - displayName: SingleNamespace - kind: SingleNamespace - name: singlenamespaces.olm.operatorframework.io - version: v1 - description: OLM SingleNamespace Testing Operator - displayName: test-operator - icon: - - base64data: "" - mediatype: "" - install: - spec: - deployments: - - label: - app.kubernetes.io/component: controller - app.kubernetes.io/name: single-namespace-operator - app.kubernetes.io/version: 1.0.0 - name: single-namespace-operator - spec: - replicas: 1 - selector: - matchLabels: - app: singlenamespacetest - template: - metadata: - labels: - app: singlenamespacetest - spec: - serviceAccountName: simple-bundle-manager - terminationGracePeriodSeconds: 0 - containers: - - name: busybox - image: busybox:1.36 - command: - - 'sleep' - - '1000' - securityContext: - runAsUser: 1000 - runAsNonRoot: true - clusterPermissions: - - rules: - - apiGroups: - - authentication.k8s.io - resources: - - tokenreviews - verbs: - - create - - apiGroups: - - authorization.k8s.io - resources: - - subjectaccessreviews - verbs: - - create - serviceAccountName: simple-bundle-manager - permissions: - - rules: - - apiGroups: - - "" - resources: - - configmaps - - serviceaccounts - verbs: - - get - - list - - watch - - create - - update - - patch - - delete - - apiGroups: - - networking.k8s.io - resources: - - networkpolicies - verbs: - - get - - list - - create - - update - - delete - - apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete - - apiGroups: - - "" - resources: - - events - verbs: - - create - - patch - serviceAccountName: simple-bundle-manager - strategy: deployment - installModes: - - supported: false - type: OwnNamespace - - supported: true - type: SingleNamespace - - supported: false - type: MultiNamespace - - supported: false - type: AllNamespaces - keywords: - - registry - links: - - name: simple-bundle - url: https://simple-bundle.domain - maintainers: - - email: main#simple-bundle.domain - name: Simple Bundle - maturity: beta - provider: - name: Simple Bundle - url: https://simple-bundle.domain - version: 1.0.0 diff --git a/testdata/images/bundles/single-namespace-operator/v1.0.0/metadata/annotations.yaml b/testdata/images/bundles/single-namespace-operator/v1.0.0/metadata/annotations.yaml deleted file mode 100644 index b7d60e6df0..0000000000 --- a/testdata/images/bundles/single-namespace-operator/v1.0.0/metadata/annotations.yaml +++ /dev/null @@ -1,10 +0,0 @@ -annotations: - # Core bundle annotations. - operators.operatorframework.io.bundle.mediatype.v1: registry+v1 - operators.operatorframework.io.bundle.manifests.v1: manifests/ - operators.operatorframework.io.bundle.metadata.v1: metadata/ - operators.operatorframework.io.bundle.package.v1: single-namespace-operator - operators.operatorframework.io.bundle.channels.v1: alpha - operators.operatorframework.io.metrics.builder: operator-sdk-v1.28.0 - operators.operatorframework.io.metrics.mediatype.v1: metrics+v1 - operators.operatorframework.io.metrics.project_layout: unknown diff --git a/testdata/images/bundles/test-operator/v1.0.0/manifests/bundle.configmap.yaml b/testdata/images/bundles/test-operator/v1.0.0/manifests/bundle.configmap.yaml deleted file mode 100644 index 74a3623ee7..0000000000 --- a/testdata/images/bundles/test-operator/v1.0.0/manifests/bundle.configmap.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: test-configmap - annotations: - shouldNotTemplate: > - The namespace is {{ $labels.namespace }}. The templated $labels.namespace is NOT expected to be processed by OLM's rendering engine for registry+v1 bundles. - -data: - version: "v1.0.0" - name: "test-configmap" diff --git a/testdata/images/bundles/test-operator/v1.0.0/manifests/dummy.configmap.yaml b/testdata/images/bundles/test-operator/v1.0.0/manifests/dummy.configmap.yaml deleted file mode 100644 index 8135b6f178..0000000000 --- a/testdata/images/bundles/test-operator/v1.0.0/manifests/dummy.configmap.yaml +++ /dev/null @@ -1,6 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: dummy-configmap -data: - why: "this config map does not exist in higher versions of the bundle - it is useful to test whether resources removed between versions are removed from the cluster as well" diff --git a/testdata/images/bundles/test-operator/v1.0.0/manifests/olm.operatorframework.com_olme2etest.yaml b/testdata/images/bundles/test-operator/v1.0.0/manifests/olm.operatorframework.com_olme2etest.yaml deleted file mode 100644 index 44e64cef79..0000000000 --- a/testdata/images/bundles/test-operator/v1.0.0/manifests/olm.operatorframework.com_olme2etest.yaml +++ /dev/null @@ -1,27 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.16.1 - name: olme2etests.olm.operatorframework.io -spec: - group: olm.operatorframework.io - names: - kind: OLME2ETest - listKind: OLME2ETestList - plural: olme2etests - singular: olme2etest - scope: Cluster - versions: - - name: v1 - served: true - storage: true - schema: - openAPIV3Schema: - type: object - properties: - spec: - type: object - properties: - testField: - type: string diff --git a/testdata/images/bundles/test-operator/v1.0.0/manifests/script.configmap.yaml b/testdata/images/bundles/test-operator/v1.0.0/manifests/script.configmap.yaml deleted file mode 100644 index a0404835a0..0000000000 --- a/testdata/images/bundles/test-operator/v1.0.0/manifests/script.configmap.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: httpd-script -data: - httpd.sh: | - #!/bin/sh - echo true > /var/www/started - echo true > /var/www/ready - echo true > /var/www/live - exec httpd -f -h /var/www -p 80 diff --git a/testdata/images/bundles/test-operator/v1.0.0/manifests/testoperator.clusterserviceversion.yaml b/testdata/images/bundles/test-operator/v1.0.0/manifests/testoperator.clusterserviceversion.yaml deleted file mode 100644 index d8cbae85a5..0000000000 --- a/testdata/images/bundles/test-operator/v1.0.0/manifests/testoperator.clusterserviceversion.yaml +++ /dev/null @@ -1,175 +0,0 @@ -apiVersion: operators.coreos.com/v1alpha1 -kind: ClusterServiceVersion -metadata: - annotations: - alm-examples: |- - [ - { - "apiVersion": "olme2etests.olm.operatorframework.io/v1", - "kind": "OLME2ETests", - "metadata": { - "labels": { - "app.kubernetes.io/managed-by": "kustomize", - "app.kubernetes.io/name": "test" - }, - "name": "test-sample" - }, - "spec": null - } - ] - capabilities: Basic Install - createdAt: "2024-10-24T19:21:40Z" - operators.operatorframework.io/builder: operator-sdk-v1.34.1 - operators.operatorframework.io/project_layout: go.kubebuilder.io/v4 - name: testoperator.v1.0.0 - namespace: placeholder -spec: - apiservicedefinitions: {} - customresourcedefinitions: - owned: - - description: Configures subsections of Alertmanager configuration specific to each namespace - displayName: OLME2ETest - kind: OLME2ETest - name: olme2etests.olm.operatorframework.io - version: v1 - description: OLM E2E Testing Operator - displayName: test-operator - icon: - - base64data: "" - mediatype: "" - install: - spec: - deployments: - - label: - app.kubernetes.io/component: controller - app.kubernetes.io/name: test-operator - app.kubernetes.io/version: 1.0.0 - name: test-operator - spec: - replicas: 1 - selector: - matchLabels: - app: olme2etest - template: - metadata: - labels: - app: olme2etest - spec: - serviceAccountName: simple-bundle-manager - terminationGracePeriodSeconds: 0 - volumes: - - name: scripts - configMap: - name: httpd-script - defaultMode: 0755 - containers: - - name: busybox-httpd-container - image: busybox:1.36 - command: ["/scripts/httpd.sh"] - ports: - - containerPort: 80 - volumeMounts: - - name: scripts - mountPath: /scripts - readOnly: true - startupProbe: - httpGet: - path: /started - port: 80 - failureThreshold: 30 - periodSeconds: 10 - livenessProbe: - httpGet: - path: /live - port: 80 - failureThreshold: 1 - periodSeconds: 2 - readinessProbe: - httpGet: - path: /ready - port: 80 - initialDelaySeconds: 1 - periodSeconds: 1 - clusterPermissions: - - rules: - - apiGroups: - - authentication.k8s.io - resources: - - tokenreviews - verbs: - - create - - apiGroups: - - authorization.k8s.io - resources: - - subjectaccessreviews - verbs: - - create - serviceAccountName: simple-bundle-manager - permissions: - - rules: - - apiGroups: - - "" - resources: - - configmaps - - serviceaccounts - verbs: - - get - - list - - watch - - create - - update - - patch - - delete - - apiGroups: - - networking.k8s.io - resources: - - networkpolicies - verbs: - - get - - list - - create - - update - - delete - - apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete - - apiGroups: - - "" - resources: - - events - verbs: - - create - - patch - serviceAccountName: simple-bundle-manager - strategy: deployment - installModes: - - supported: false - type: OwnNamespace - - supported: true - type: SingleNamespace - - supported: false - type: MultiNamespace - - supported: true - type: AllNamespaces - keywords: - - registry - links: - - name: simple-bundle - url: https://simple-bundle.domain - maintainers: - - email: main#simple-bundle.domain - name: Simple Bundle - maturity: beta - provider: - name: Simple Bundle - url: https://simple-bundle.domain - version: 1.0.0 diff --git a/testdata/images/bundles/test-operator/v1.0.0/manifests/testoperator.networkpolicy.yaml b/testdata/images/bundles/test-operator/v1.0.0/manifests/testoperator.networkpolicy.yaml deleted file mode 100644 index 20a5ea834f..0000000000 --- a/testdata/images/bundles/test-operator/v1.0.0/manifests/testoperator.networkpolicy.yaml +++ /dev/null @@ -1,8 +0,0 @@ -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: test-operator-network-policy -spec: - podSelector: {} - policyTypes: - - Ingress diff --git a/testdata/images/bundles/test-operator/v1.0.0/metadata/annotations.yaml b/testdata/images/bundles/test-operator/v1.0.0/metadata/annotations.yaml deleted file mode 100644 index 404f0f4a34..0000000000 --- a/testdata/images/bundles/test-operator/v1.0.0/metadata/annotations.yaml +++ /dev/null @@ -1,10 +0,0 @@ -annotations: - # Core bundle annotations. - operators.operatorframework.io.bundle.mediatype.v1: registry+v1 - operators.operatorframework.io.bundle.manifests.v1: manifests/ - operators.operatorframework.io.bundle.metadata.v1: metadata/ - operators.operatorframework.io.bundle.package.v1: test - operators.operatorframework.io.bundle.channels.v1: beta - operators.operatorframework.io.metrics.builder: operator-sdk-v1.28.0 - operators.operatorframework.io.metrics.mediatype.v1: metrics+v1 - operators.operatorframework.io.metrics.project_layout: unknown diff --git a/testdata/images/bundles/test-operator/v1.0.2/manifests/bundle.configmap.yaml b/testdata/images/bundles/test-operator/v1.0.2/manifests/bundle.configmap.yaml deleted file mode 100644 index 0279603bfc..0000000000 --- a/testdata/images/bundles/test-operator/v1.0.2/manifests/bundle.configmap.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: test-configmap - annotations: - shouldNotTemplate: > - The namespace is {{ $labels.namespace }}. The templated $labels.namespace is NOT expected to be processed by OLM's rendering engine for registry+v1 bundles. - -data: - version: "v1.0.2" - name: "test-configmap" diff --git a/testdata/images/bundles/test-operator/v1.0.2/manifests/olm.operatorframework.com_olme2etest.yaml b/testdata/images/bundles/test-operator/v1.0.2/manifests/olm.operatorframework.com_olme2etest.yaml deleted file mode 100644 index 44e64cef79..0000000000 --- a/testdata/images/bundles/test-operator/v1.0.2/manifests/olm.operatorframework.com_olme2etest.yaml +++ /dev/null @@ -1,27 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.16.1 - name: olme2etests.olm.operatorframework.io -spec: - group: olm.operatorframework.io - names: - kind: OLME2ETest - listKind: OLME2ETestList - plural: olme2etests - singular: olme2etest - scope: Cluster - versions: - - name: v1 - served: true - storage: true - schema: - openAPIV3Schema: - type: object - properties: - spec: - type: object - properties: - testField: - type: string diff --git a/testdata/images/bundles/test-operator/v1.0.2/manifests/testoperator.clusterserviceversion.yaml b/testdata/images/bundles/test-operator/v1.0.2/manifests/testoperator.clusterserviceversion.yaml deleted file mode 100644 index 70c85be13c..0000000000 --- a/testdata/images/bundles/test-operator/v1.0.2/manifests/testoperator.clusterserviceversion.yaml +++ /dev/null @@ -1,151 +0,0 @@ -apiVersion: operators.coreos.com/v1alpha1 -kind: ClusterServiceVersion -metadata: - annotations: - alm-examples: |- - [ - { - "apiVersion": "olme2etests.olm.operatorframework.io/v1", - "kind": "OLME2ETests", - "metadata": { - "labels": { - "app.kubernetes.io/managed-by": "kustomize", - "app.kubernetes.io/name": "test" - }, - "name": "test-sample" - }, - "spec": null - } - ] - capabilities: Basic Install - createdAt: "2024-10-24T19:21:40Z" - operators.operatorframework.io/builder: operator-sdk-v1.34.1 - operators.operatorframework.io/project_layout: go.kubebuilder.io/v4 - name: testoperator.v1.0.2 - namespace: placeholder -spec: - apiservicedefinitions: {} - customresourcedefinitions: - owned: - - description: Configures subsections of Alertmanager configuration specific to each namespace - displayName: OLME2ETest - kind: OLME2ETest - name: olme2etests.olm.operatorframework.io - version: v1 - description: OLM E2E Testing Operator with a wrong image ref - displayName: test-operator - icon: - - base64data: "" - mediatype: "" - install: - spec: - deployments: - - label: - app.kubernetes.io/component: controller - app.kubernetes.io/name: test-operator - app.kubernetes.io/version: 1.0.2 - name: test-operator - spec: - replicas: 1 - selector: - matchLabels: - app: olme2etest - template: - metadata: - labels: - app: olme2etest - spec: - serviceAccountName: simple-bundle-manager - terminationGracePeriodSeconds: 0 - volumes: - - name: scripts - configMap: - name: httpd-script - defaultMode: 0755 - containers: - - name: busybox-httpd-container - # This image ref is wrong and should trigger ImagePullBackOff condition - image: wrong/image - clusterPermissions: - - rules: - - apiGroups: - - authentication.k8s.io - resources: - - tokenreviews - verbs: - - create - - apiGroups: - - authorization.k8s.io - resources: - - subjectaccessreviews - verbs: - - create - serviceAccountName: simple-bundle-manager - permissions: - - rules: - - apiGroups: - - "" - resources: - - configmaps - - serviceaccounts - verbs: - - get - - list - - watch - - create - - update - - patch - - delete - - apiGroups: - - networking.k8s.io - resources: - - networkpolicies - verbs: - - get - - list - - create - - update - - delete - - apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete - - apiGroups: - - "" - resources: - - events - verbs: - - create - - patch - serviceAccountName: simple-bundle-manager - strategy: deployment - installModes: - - supported: false - type: OwnNamespace - - supported: true - type: SingleNamespace - - supported: false - type: MultiNamespace - - supported: true - type: AllNamespaces - keywords: - - registry - links: - - name: simple-bundle - url: https://simple-bundle.domain - maintainers: - - email: main#simple-bundle.domain - name: Simple Bundle - maturity: beta - provider: - name: Simple Bundle - url: https://simple-bundle.domain - version: 1.0.2 diff --git a/testdata/images/bundles/test-operator/v1.0.2/manifests/testoperator.networkpolicy.yaml b/testdata/images/bundles/test-operator/v1.0.2/manifests/testoperator.networkpolicy.yaml deleted file mode 100644 index 20a5ea834f..0000000000 --- a/testdata/images/bundles/test-operator/v1.0.2/manifests/testoperator.networkpolicy.yaml +++ /dev/null @@ -1,8 +0,0 @@ -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: test-operator-network-policy -spec: - podSelector: {} - policyTypes: - - Ingress diff --git a/testdata/images/bundles/test-operator/v1.0.2/metadata/annotations.yaml b/testdata/images/bundles/test-operator/v1.0.2/metadata/annotations.yaml deleted file mode 100644 index 404f0f4a34..0000000000 --- a/testdata/images/bundles/test-operator/v1.0.2/metadata/annotations.yaml +++ /dev/null @@ -1,10 +0,0 @@ -annotations: - # Core bundle annotations. - operators.operatorframework.io.bundle.mediatype.v1: registry+v1 - operators.operatorframework.io.bundle.manifests.v1: manifests/ - operators.operatorframework.io.bundle.metadata.v1: metadata/ - operators.operatorframework.io.bundle.package.v1: test - operators.operatorframework.io.bundle.channels.v1: beta - operators.operatorframework.io.metrics.builder: operator-sdk-v1.28.0 - operators.operatorframework.io.metrics.mediatype.v1: metrics+v1 - operators.operatorframework.io.metrics.project_layout: unknown diff --git a/testdata/images/bundles/test-operator/v1.0.3/manifests/bundle.configmap.yaml b/testdata/images/bundles/test-operator/v1.0.3/manifests/bundle.configmap.yaml deleted file mode 100644 index 43b73e2c70..0000000000 --- a/testdata/images/bundles/test-operator/v1.0.3/manifests/bundle.configmap.yaml +++ /dev/null @@ -1,7 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: wrong-test-configmap -# need such config map with a wrong field so that we can reach progression deadline timeouts -wrongfield: - name: "test-configmap" diff --git a/testdata/images/bundles/test-operator/v1.0.3/manifests/testoperator.clusterserviceversion.yaml b/testdata/images/bundles/test-operator/v1.0.3/manifests/testoperator.clusterserviceversion.yaml deleted file mode 100644 index 8414e78ae1..0000000000 --- a/testdata/images/bundles/test-operator/v1.0.3/manifests/testoperator.clusterserviceversion.yaml +++ /dev/null @@ -1,151 +0,0 @@ -apiVersion: operators.coreos.com/v1alpha1 -kind: ClusterServiceVersion -metadata: - annotations: - alm-examples: |- - [ - { - "apiVersion": "olme2etests.olm.operatorframework.io/v1", - "kind": "OLME2ETests", - "metadata": { - "labels": { - "app.kubernetes.io/managed-by": "kustomize", - "app.kubernetes.io/name": "test" - }, - "name": "test-sample" - }, - "spec": null - } - ] - capabilities: Basic Install - createdAt: "2024-10-24T19:21:40Z" - operators.operatorframework.io/builder: operator-sdk-v1.34.1 - operators.operatorframework.io/project_layout: go.kubebuilder.io/v4 - name: testoperator.v1.0.2 - namespace: placeholder -spec: - apiservicedefinitions: {} - customresourcedefinitions: - owned: - - description: Configures subsections of Alertmanager configuration specific to each namespace - displayName: OLME2ETest - kind: OLME2ETest - name: olme2etests.olm.operatorframework.io - version: v1 - description: OLM E2E Testing Operator with a wrong image ref - displayName: test-operator - icon: - - base64data: "" - mediatype: "" - install: - spec: - deployments: - - label: - app.kubernetes.io/component: controller - app.kubernetes.io/name: test-operator - app.kubernetes.io/version: 1.0.2 - name: test-operator - spec: - replicas: 1 - selector: - matchLabels: - app: olme2etest - template: - metadata: - labels: - app: olme2etest - spec: - serviceAccountName: simple-bundle-manager - terminationGracePeriodSeconds: 0 - volumes: - - name: scripts - configMap: - name: httpd-script - defaultMode: 0755 - containers: - - name: busybox-httpd-container - # This image ref is wrong and should trigger ImagePullBackOff condition - image: busybox:1.36 - clusterPermissions: - - rules: - - apiGroups: - - authentication.k8s.io - resources: - - tokenreviews - verbs: - - create - - apiGroups: - - authorization.k8s.io - resources: - - subjectaccessreviews - verbs: - - create - serviceAccountName: simple-bundle-manager - permissions: - - rules: - - apiGroups: - - "" - resources: - - configmaps - - serviceaccounts - verbs: - - get - - list - - watch - - create - - update - - patch - - delete - - apiGroups: - - networking.k8s.io - resources: - - networkpolicies - verbs: - - get - - list - - create - - update - - delete - - apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete - - apiGroups: - - "" - resources: - - events - verbs: - - create - - patch - serviceAccountName: simple-bundle-manager - strategy: deployment - installModes: - - supported: false - type: OwnNamespace - - supported: true - type: SingleNamespace - - supported: false - type: MultiNamespace - - supported: true - type: AllNamespaces - keywords: - - registry - links: - - name: simple-bundle - url: https://simple-bundle.domain - maintainers: - - email: main#simple-bundle.domain - name: Simple Bundle - maturity: beta - provider: - name: Simple Bundle - url: https://simple-bundle.domain - version: 1.0.2 diff --git a/testdata/images/bundles/test-operator/v1.0.3/metadata/annotations.yaml b/testdata/images/bundles/test-operator/v1.0.3/metadata/annotations.yaml deleted file mode 100644 index 404f0f4a34..0000000000 --- a/testdata/images/bundles/test-operator/v1.0.3/metadata/annotations.yaml +++ /dev/null @@ -1,10 +0,0 @@ -annotations: - # Core bundle annotations. - operators.operatorframework.io.bundle.mediatype.v1: registry+v1 - operators.operatorframework.io.bundle.manifests.v1: manifests/ - operators.operatorframework.io.bundle.metadata.v1: metadata/ - operators.operatorframework.io.bundle.package.v1: test - operators.operatorframework.io.bundle.channels.v1: beta - operators.operatorframework.io.metrics.builder: operator-sdk-v1.28.0 - operators.operatorframework.io.metrics.mediatype.v1: metrics+v1 - operators.operatorframework.io.metrics.project_layout: unknown diff --git a/testdata/images/bundles/test-operator/v1.2.0/manifests/bundle.configmap.yaml b/testdata/images/bundles/test-operator/v1.2.0/manifests/bundle.configmap.yaml deleted file mode 100644 index 22ee500908..0000000000 --- a/testdata/images/bundles/test-operator/v1.2.0/manifests/bundle.configmap.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: test-configmap - annotations: - shouldNotTemplate: > - The namespace is {{ $labels.namespace }}. The templated $labels.namespace is NOT expected to be processed by OLM's rendering engine for registry+v1 bundles. - -data: - version: "v1.2.0" - name: "test-configmap" diff --git a/testdata/images/bundles/test-operator/v1.2.0/manifests/olm.operatorframework.com_olme2etest.yaml b/testdata/images/bundles/test-operator/v1.2.0/manifests/olm.operatorframework.com_olme2etest.yaml deleted file mode 100644 index 44e64cef79..0000000000 --- a/testdata/images/bundles/test-operator/v1.2.0/manifests/olm.operatorframework.com_olme2etest.yaml +++ /dev/null @@ -1,27 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.16.1 - name: olme2etests.olm.operatorframework.io -spec: - group: olm.operatorframework.io - names: - kind: OLME2ETest - listKind: OLME2ETestList - plural: olme2etests - singular: olme2etest - scope: Cluster - versions: - - name: v1 - served: true - storage: true - schema: - openAPIV3Schema: - type: object - properties: - spec: - type: object - properties: - testField: - type: string diff --git a/testdata/images/bundles/test-operator/v1.2.0/manifests/script.configmap.yaml b/testdata/images/bundles/test-operator/v1.2.0/manifests/script.configmap.yaml deleted file mode 100644 index 6270e4ad71..0000000000 --- a/testdata/images/bundles/test-operator/v1.2.0/manifests/script.configmap.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: httpd-script -data: - httpd.sh: | - #!/bin/sh - echo "Version 1.2.0" - echo true > /var/www/started - echo true > /var/www/ready - echo true > /var/www/live - exec httpd -f -h /var/www -p 80 diff --git a/testdata/images/bundles/test-operator/v1.2.0/manifests/testoperator.clusterserviceversion.yaml b/testdata/images/bundles/test-operator/v1.2.0/manifests/testoperator.clusterserviceversion.yaml deleted file mode 100644 index 2f1aff7a59..0000000000 --- a/testdata/images/bundles/test-operator/v1.2.0/manifests/testoperator.clusterserviceversion.yaml +++ /dev/null @@ -1,175 +0,0 @@ -apiVersion: operators.coreos.com/v1alpha1 -kind: ClusterServiceVersion -metadata: - annotations: - alm-examples: |- - [ - { - "apiVersion": "olme2etests.olm.operatorframework.io/v1", - "kind": "OLME2ETests", - "metadata": { - "labels": { - "app.kubernetes.io/managed-by": "kustomize", - "app.kubernetes.io/name": "test" - }, - "name": "test-sample" - }, - "spec": null - } - ] - capabilities: Basic Install - createdAt: "2024-10-24T19:21:40Z" - operators.operatorframework.io/builder: operator-sdk-v1.34.1 - operators.operatorframework.io/project_layout: go.kubebuilder.io/v4 - name: testoperator.v1.2.0 - namespace: placeholder -spec: - apiservicedefinitions: {} - customresourcedefinitions: - owned: - - description: Configures subsections of Alertmanager configuration specific to each namespace - displayName: OLME2ETest - kind: OLME2ETest - name: olme2etests.olm.operatorframework.io - version: v1 - description: OLM E2E Testing Operator - displayName: test-operator - icon: - - base64data: "" - mediatype: "" - install: - spec: - deployments: - - label: - app.kubernetes.io/component: controller - app.kubernetes.io/name: test-operator - app.kubernetes.io/version: 1.2.0 - name: test-operator - spec: - replicas: 1 - selector: - matchLabels: - app: olme2etest - template: - metadata: - labels: - app: olme2etest - spec: - serviceAccountName: simple-bundle-manager - terminationGracePeriodSeconds: 0 - volumes: - - name: scripts - configMap: - name: httpd-script - defaultMode: 0755 - containers: - - name: busybox-httpd-container - image: busybox:1.37 - command: ["/scripts/httpd.sh"] - ports: - - containerPort: 80 - volumeMounts: - - name: scripts - mountPath: /scripts - readOnly: true - startupProbe: - httpGet: - path: /started - port: 80 - failureThreshold: 30 - periodSeconds: 10 - livenessProbe: - httpGet: - path: /live - port: 80 - failureThreshold: 1 - periodSeconds: 2 - readinessProbe: - httpGet: - path: /ready - port: 80 - initialDelaySeconds: 1 - periodSeconds: 1 - clusterPermissions: - - rules: - - apiGroups: - - authentication.k8s.io - resources: - - tokenreviews - verbs: - - create - - apiGroups: - - authorization.k8s.io - resources: - - subjectaccessreviews - verbs: - - create - serviceAccountName: simple-bundle-manager - permissions: - - rules: - - apiGroups: - - "" - resources: - - configmaps - - serviceaccounts - verbs: - - get - - list - - watch - - create - - update - - patch - - delete - - apiGroups: - - networking.k8s.io - resources: - - networkpolicies - verbs: - - get - - list - - create - - update - - delete - - apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete - - apiGroups: - - "" - resources: - - events - verbs: - - create - - patch - serviceAccountName: simple-bundle-manager - strategy: deployment - installModes: - - supported: false - type: OwnNamespace - - supported: true - type: SingleNamespace - - supported: false - type: MultiNamespace - - supported: true - type: AllNamespaces - keywords: - - registry - links: - - name: simple-bundle - url: https://simple-bundle.domain - maintainers: - - email: main#simple-bundle.domain - name: Simple Bundle - maturity: beta - provider: - name: Simple Bundle - url: https://simple-bundle.domain - version: 1.2.0 diff --git a/testdata/images/bundles/test-operator/v1.2.0/manifests/testoperator.networkpolicy.yaml b/testdata/images/bundles/test-operator/v1.2.0/manifests/testoperator.networkpolicy.yaml deleted file mode 100644 index 20a5ea834f..0000000000 --- a/testdata/images/bundles/test-operator/v1.2.0/manifests/testoperator.networkpolicy.yaml +++ /dev/null @@ -1,8 +0,0 @@ -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: test-operator-network-policy -spec: - podSelector: {} - policyTypes: - - Ingress diff --git a/testdata/images/bundles/test-operator/v1.2.0/metadata/annotations.yaml b/testdata/images/bundles/test-operator/v1.2.0/metadata/annotations.yaml deleted file mode 100644 index 404f0f4a34..0000000000 --- a/testdata/images/bundles/test-operator/v1.2.0/metadata/annotations.yaml +++ /dev/null @@ -1,10 +0,0 @@ -annotations: - # Core bundle annotations. - operators.operatorframework.io.bundle.mediatype.v1: registry+v1 - operators.operatorframework.io.bundle.manifests.v1: manifests/ - operators.operatorframework.io.bundle.metadata.v1: metadata/ - operators.operatorframework.io.bundle.package.v1: test - operators.operatorframework.io.bundle.channels.v1: beta - operators.operatorframework.io.metrics.builder: operator-sdk-v1.28.0 - operators.operatorframework.io.metrics.mediatype.v1: metrics+v1 - operators.operatorframework.io.metrics.project_layout: unknown diff --git a/testdata/images/bundles/test-operator/v1.2.0/metadata/properties.yaml b/testdata/images/bundles/test-operator/v1.2.0/metadata/properties.yaml deleted file mode 100644 index 3a2bfb2a64..0000000000 --- a/testdata/images/bundles/test-operator/v1.2.0/metadata/properties.yaml +++ /dev/null @@ -1,3 +0,0 @@ -properties: - - type: olm.test-property - value: "some-value" diff --git a/testdata/images/catalogs/test-catalog/v1/configs/.indexignore b/testdata/images/catalogs/test-catalog/v1/configs/.indexignore deleted file mode 100644 index 699fa6d33a..0000000000 --- a/testdata/images/catalogs/test-catalog/v1/configs/.indexignore +++ /dev/null @@ -1,2 +0,0 @@ -/expected_all.json -..* diff --git a/testdata/images/catalogs/test-catalog/v1/configs/catalog.yaml b/testdata/images/catalogs/test-catalog/v1/configs/catalog.yaml deleted file mode 100644 index 834c2f3165..0000000000 --- a/testdata/images/catalogs/test-catalog/v1/configs/catalog.yaml +++ /dev/null @@ -1,207 +0,0 @@ -schema: olm.package -name: test -defaultChannel: beta ---- -schema: olm.channel -name: alpha -package: test -entries: - - name: test-operator.1.0.0 - - name: test-operator.1.0.2 - - name: test-operator.1.0.3 ---- -schema: olm.channel -name: beta -package: test -entries: - - name: test-operator.1.0.0 - - name: test-operator.1.0.1 - replaces: test-operator.1.0.0 - - name: test-operator.1.0.4 - - name: test-operator.1.2.0 - replaces: test-operator.1.0.1 ---- -schema: olm.bundle -name: test-operator.1.0.0 -package: test -image: docker-registry.operator-controller-e2e.svc.cluster.local:5000/bundles/registry-v1/test-operator:v1.0.0 -properties: - - type: olm.package - value: - packageName: test - version: 1.0.0 ---- -schema: olm.bundle -name: test-operator.1.0.1 -package: test -image: docker-registry.operator-controller-e2e.svc.cluster.local:5000/bundles/registry-v1/test-operator:v1.0.0 -properties: - - type: olm.package - value: - packageName: test - version: 1.0.1 ---- -# Bundle with identical rendered content as v1.0.0 (same image). -# Used to test that upgrading between versions with identical manifests -# correctly updates the installed version status (OCPBUGS-78311). -schema: olm.bundle -name: test-operator.1.0.4 -package: test -image: docker-registry.operator-controller-e2e.svc.cluster.local:5000/bundles/registry-v1/test-operator:v1.0.0 -properties: - - type: olm.package - value: - packageName: test - version: 1.0.4 ---- -# Bundle with a wrong image ref causing image pull failure -schema: olm.bundle -name: test-operator.1.0.2 -package: test -image: docker-registry.operator-controller-e2e.svc.cluster.local:5000/bundles/registry-v1/test-operator:v1.0.2 -properties: - - type: olm.package - value: - packageName: test - version: 1.0.2 ---- -# Bundle with an invalid config map ensure that we can never successfully rollout - used to test progression deadline timeouts -schema: olm.bundle -name: test-operator.1.0.3 -package: test -image: docker-registry.operator-controller-e2e.svc.cluster.local:5000/bundles/registry-v1/test-operator:v1.0.3 -properties: - - type: olm.package - value: - packageName: test - version: 1.0.3 ---- -schema: olm.bundle -name: test-operator.1.2.0 -package: test -image: docker-registry.operator-controller-e2e.svc.cluster.local:5000/bundles/registry-v1/test-operator:v1.2.0 -properties: - - type: olm.package - value: - packageName: test - version: 1.2.0 ---- -schema: olm.package -name: test-mirrored -defaultChannel: beta ---- -schema: olm.channel -name: beta -package: test-mirrored -entries: - - name: test-mirrored-operator.1.2.0 ---- -schema: olm.bundle -name: test-mirrored-operator.1.2.0 -package: test-mirrored -image: mirrored-registry.operator-controller-e2e.svc.cluster.local:5000/bundles/registry-v1/test-operator:v1.0.0 -properties: - - type: olm.package - value: - packageName: test-mirrored - version: 1.2.0 ---- -schema: olm.package -name: dynamic -defaultChannel: beta ---- -schema: olm.channel -name: beta -package: dynamic -entries: - - name: dynamic-operator.1.2.0 ---- -schema: olm.bundle -name: dynamic-operator.1.2.0 -package: dynamic -image: dynamic-registry.operator-controller-e2e.svc.cluster.local:5000/bundles/registry-v1/test-operator:v1.0.0 -properties: - - type: olm.package - value: - packageName: dynamic - version: 1.2.0 ---- -schema: olm.package -name: webhook-operator -defaultChannel: alpha ---- -schema: olm.channel -name: alpha -package: webhook-operator -entries: - - name: webhook-operator.v0.0.1 ---- -schema: olm.bundle -name: webhook-operator.v0.0.1 -package: webhook-operator -image: docker-registry.operator-controller-e2e.svc.cluster.local:5000/bundles/registry-v1/webhook-operator:v0.0.1 -properties: - - type: olm.package - value: - packageName: webhook-operator - version: 0.0.1 ---- -schema: olm.package -name: own-namespace-operator -defaultChannel: alpha ---- -schema: olm.channel -name: alpha -package: own-namespace-operator -entries: - - name: own-namespace-operator.1.0.0 ---- -schema: olm.bundle -name: own-namespace-operator.1.0.0 -package: own-namespace-operator -image: docker-registry.operator-controller-e2e.svc.cluster.local:5000/bundles/registry-v1/own-namespace-operator:v1.0.0 -properties: - - type: olm.package - value: - packageName: own-namespace-operator - version: 1.0.0 ---- -schema: olm.package -name: single-namespace-operator -defaultChannel: alpha ---- -schema: olm.channel -name: alpha -package: single-namespace-operator -entries: - - name: single-namespace-operator.1.0.0 ---- -schema: olm.bundle -name: single-namespace-operator.1.0.0 -package: single-namespace-operator -image: docker-registry.operator-controller-e2e.svc.cluster.local:5000/bundles/registry-v1/single-namespace-operator:v1.0.0 -properties: - - type: olm.package - value: - packageName: single-namespace-operator - version: 1.0.0 ---- -schema: olm.package -name: large-crd-operator -defaultChannel: beta ---- -schema: olm.channel -name: beta -package: large-crd-operator -entries: - - name: large-crd-operator.1.0.0 ---- -schema: olm.bundle -name: large-crd-operator.1.0.0 -package: large-crd-operator -image: docker-registry.operator-controller-e2e.svc.cluster.local:5000/bundles/registry-v1/large-crd-operator:v1.0.0 -properties: - - type: olm.package - value: - packageName: large-crd-operator - version: 1.0.0 diff --git a/testdata/images/catalogs/test-catalog/v2/configs/.indexignore b/testdata/images/catalogs/test-catalog/v2/configs/.indexignore deleted file mode 100644 index 699fa6d33a..0000000000 --- a/testdata/images/catalogs/test-catalog/v2/configs/.indexignore +++ /dev/null @@ -1,2 +0,0 @@ -/expected_all.json -..* diff --git a/testdata/images/catalogs/test-catalog/v2/configs/catalog.yaml b/testdata/images/catalogs/test-catalog/v2/configs/catalog.yaml deleted file mode 100644 index 2e82b12290..0000000000 --- a/testdata/images/catalogs/test-catalog/v2/configs/catalog.yaml +++ /dev/null @@ -1,20 +0,0 @@ -schema: olm.package -name: test -defaultChannel: beta ---- -schema: olm.channel -name: beta -package: test -entries: - - name: test-operator.1.3.0 - replaces: test-operator.1.2.0 ---- -schema: olm.bundle -name: test-operator.1.3.0 -package: test -image: docker-registry.operator-controller-e2e.svc.cluster.local:5000/bundles/registry-v1/test-operator:v1.0.0 -properties: - - type: olm.package - value: - packageName: test - version: 1.3.0 diff --git a/testdata/push/README.md b/testdata/push/README.md deleted file mode 100644 index 743a984ffb..0000000000 --- a/testdata/push/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# Test Registry Image Push - -This tool builds our test bundle and catalog images via crane. It accepts two command line arguments: -``` -Usage of push: - --images-path string Image directory path (default "/images") - --registry-address string The address of the registry. (default ":12345") -``` - -`--registry-address` is the address of the registry to be pushed to. - -`--images-path` should point to the root directory of the images tree structure. The tool expects a particular directory format in order to work properly. Bundles should be placed in `/bundles`, and catalogs in `/catalogs`. From these directories the same convention should be followed: folders within `[catalogs|bundles]` are image names i.e. `test-catalog`. Within these folders is where each tag for that image should be placed. What that ends up looking like is: -```bash -$ tree ./testdata/images/ -./testdata/images/ -├── bundles -│   └── test-operator -│   └── v1.0.0 -│ ├── metadata -│       │ └── annotations.yaml -│      └── manifests -│       └── example.yaml -└── catalogs - └── test-catalog -    ├── v1 -    │   └── configs -    │   └── catalog.yaml -    └── v2 -    └── configs -    └── catalog.yaml -``` -The inside of each tag folder will be placed directly into `/` of the built container i.e. `test-catalog:v1` will have `/configs/catalog.yaml`. - -To add a new image or tag for the tool, create the folders required and populate them with the files to be mounted. Bundle images requiring metadata should contain a `metadata` folder with `annotations.yaml`. Example content: -```yaml -annotations: - # Core bundle annotations. - operators.operatorframework.io.bundle.mediatype.v1: registry+v1 - operators.operatorframework.io.bundle.manifests.v1: manifests/ - operators.operatorframework.io.bundle.metadata.v1: metadata/ - operators.operatorframework.io.bundle.package.v1: test - operators.operatorframework.io.bundle.channels.v1: beta - operators.operatorframework.io.metrics.builder: operator-sdk-v1.28.0 - operators.operatorframework.io.metrics.mediatype.v1: metrics+v1 - operators.operatorframework.io.metrics.project_layout: unknown -``` diff --git a/testdata/push/go.mod b/testdata/push/go.mod deleted file mode 100644 index 72bb1b9e86..0000000000 --- a/testdata/push/go.mod +++ /dev/null @@ -1,26 +0,0 @@ -module registry - -go 1.22.5 - -require ( - github.com/google/go-containerregistry v0.20.2 - github.com/spf13/pflag v1.0.5 - gopkg.in/yaml.v2 v2.4.0 -) - -require ( - github.com/containerd/stargz-snapshotter/estargz v0.15.1 // indirect - github.com/docker/cli v27.3.1+incompatible // indirect - github.com/docker/distribution v2.8.3+incompatible // indirect - github.com/docker/docker-credential-helpers v0.8.2 // indirect - github.com/klauspost/compress v1.17.11 // indirect - github.com/kr/pretty v0.3.1 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.1.0 // indirect - github.com/pkg/errors v0.9.1 // indirect - github.com/sirupsen/logrus v1.9.3 // indirect - github.com/vbatts/tar-split v0.11.6 // indirect - golang.org/x/sync v0.8.0 // indirect - golang.org/x/sys v0.26.0 // indirect -) diff --git a/testdata/push/go.sum b/testdata/push/go.sum deleted file mode 100644 index 6f7cce0f87..0000000000 --- a/testdata/push/go.sum +++ /dev/null @@ -1,60 +0,0 @@ -github.com/containerd/stargz-snapshotter/estargz v0.15.1 h1:eXJjw9RbkLFgioVaTG+G/ZW/0kEe2oEKCdS/ZxIyoCU= -github.com/containerd/stargz-snapshotter/estargz v0.15.1/go.mod h1:gr2RNwukQ/S9Nv33Lt6UC7xEx58C+LHRdoqbEKjz1Kk= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/docker/cli v27.3.1+incompatible h1:qEGdFBF3Xu6SCvCYhc7CzaQTlBmqDuzxPDpigSyeKQQ= -github.com/docker/cli v27.3.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= -github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo= -github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.20.2 h1:B1wPJ1SN/S7pB+ZAimcciVD+r+yV/l/DSArMxlbwseo= -github.com/google/go-containerregistry v0.20.2/go.mod h1:z38EKdKh4h7IP2gSfUUqEvalZBqs6AoLeWfUy34nQC8= -github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= -github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= -github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= -github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= -github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/vbatts/tar-split v0.11.6 h1:4SjTW5+PU11n6fZenf2IPoV8/tz3AaYHMWjf23envGs= -github.com/vbatts/tar-split v0.11.6/go.mod h1:dqKNtesIOr2j2Qv3W/cHjnvk9I8+G7oAkFDFN6TCBEI= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= -golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= -gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= diff --git a/testdata/push/push.go b/testdata/push/push.go index 13a029eda4..d14876d44e 100644 --- a/testdata/push/push.go +++ b/testdata/push/push.go @@ -1,182 +1,5 @@ +// No-op: test registry images are now built and pushed dynamically by Go test code. +// This stub exists for backward compatibility with downstream CI. package main -import ( - "flag" - "fmt" - "io/fs" - "log" - "os" - "strings" - - "github.com/google/go-containerregistry/pkg/crane" - v1 "github.com/google/go-containerregistry/pkg/v1" - "github.com/google/go-containerregistry/pkg/v1/mutate" - "github.com/spf13/pflag" - "gopkg.in/yaml.v2" -) - -const ( - bundlesSubPath string = "bundles" - catalogsSubPath string = "catalogs" -) - -func main() { - var ( - registryAddr string - imagesPath string - ) - flag.StringVar(®istryAddr, "registry-address", ":12345", "The address the registry binds to.") - flag.StringVar(&imagesPath, "images-path", "/images", "Image directory path") - pflag.CommandLine.AddGoFlagSet(flag.CommandLine) - pflag.Parse() - - log.Printf("push operation configured with images path %s and destination %s", imagesPath, registryAddr) - - bundlesFullPath := fmt.Sprintf("%s/%s", imagesPath, bundlesSubPath) - catalogsFullPath := fmt.Sprintf("%s/%s", imagesPath, catalogsSubPath) - - bundles, err := buildBundles(bundlesFullPath) - if err != nil { - log.Fatalf("failed to build bundles: %s", err.Error()) - } - catalogs, err := buildCatalogs(catalogsFullPath) - if err != nil { - log.Fatalf("failed to build catalogs: %s", err.Error()) - } - // Push the images - for name, image := range bundles { - dest := fmt.Sprintf("%s/%s", registryAddr, name) - log.Printf("pushing bundle %s to %s", name, dest) - if err := crane.Push(image, dest); err != nil { - log.Fatalf("failed to push bundle images: %s", err.Error()) - } - } - for name, image := range catalogs { - dest := fmt.Sprintf("%s/%s", registryAddr, name) - log.Printf("pushing catalog %s to %s", name, dest) - if err := crane.Push(image, fmt.Sprintf("%s/%s", registryAddr, name)); err != nil { - log.Fatalf("failed to push catalog images: %s", err.Error()) - } - } - log.Printf("finished") - os.Exit(0) -} - -func buildBundles(path string) (map[string]v1.Image, error) { - bundles, err := processImageDirTree(path) - if err != nil { - return nil, err - } - mutatedMap := make(map[string]v1.Image, 0) - // Apply required bundle labels - for key, img := range bundles { - // Replace ':' between image name and image tag for file path - metadataPath := strings.Replace(key, ":", "/", 1) - labels, err := getBundleLabels(fmt.Sprintf("%s/%s/%s", path, metadataPath, "metadata/annotations.yaml")) - if err != nil { - return nil, err - } - mutatedMap[fmt.Sprintf("bundles/registry-v1/%s", key)], err = mutate.Config(img, v1.Config{Labels: labels}) - if err != nil { - return nil, fmt.Errorf("failed to apply image labels: %w", err) - } - } - return mutatedMap, nil -} - -type bundleAnnotations struct { - annotations map[string]string -} - -func getBundleLabels(path string) (map[string]string, error) { - var metadata bundleAnnotations - yamlFile, err := os.ReadFile(path) - if err != nil { - return nil, err - } - err = yaml.Unmarshal(yamlFile, metadata) - if err != nil { - return nil, err - } - return metadata.annotations, nil -} - -func buildCatalogs(path string) (map[string]v1.Image, error) { - catalogs, err := processImageDirTree(path) - if err != nil { - return nil, err - } - mutatedMap := make(map[string]v1.Image, 0) - // Apply required catalog label - for key, img := range catalogs { - cfg := v1.Config{ - Labels: map[string]string{ - "operators.operatorframework.io.index.configs.v1": "/configs", - }, - } - mutatedMap[fmt.Sprintf("e2e/%s", key)], err = mutate.Config(img, cfg) - if err != nil { - return nil, fmt.Errorf("failed to apply image labels: %w", err) - } - } - return mutatedMap, nil -} - -func processImageDirTree(path string) (map[string]v1.Image, error) { - imageMap := make(map[string]v1.Image, 0) - images, err := os.ReadDir(path) - if err != nil { - return nil, err - } - - // Each directory in 'path' represents an image - for _, entry := range images { - entryFullPath := fmt.Sprintf("%s/%s", path, entry.Name()) - if !entry.IsDir() { - continue - } - tags, err := os.ReadDir(entryFullPath) - if err != nil { - return nil, err - } - // Each directory in the image directory represents a separate tag - for _, tag := range tags { - if !tag.IsDir() { - continue - } - tagFullPath := fmt.Sprintf("%s/%s", entryFullPath, tag.Name()) - - var fileMap map[string][]byte - fileMap, err = createFileMap(tagFullPath) - if err != nil { - return nil, fmt.Errorf("failed to read files for image: %w", err) - } - - image, err := crane.Image(fileMap) - if err != nil { - return nil, fmt.Errorf("failed to generate image: %w", err) - } - imageMap[fmt.Sprintf("%s:%s", entry.Name(), tag.Name())] = image - } - } - return imageMap, nil -} - -func createFileMap(originPath string) (map[string][]byte, error) { - fileMap := make(map[string][]byte) - if err := fs.WalkDir(os.DirFS(originPath), ".", func(path string, d fs.DirEntry, err error) error { - if err != nil { - return err - } - if d != nil && !d.IsDir() { - fileMap[path], err = os.ReadFile(fmt.Sprintf("%s/%s", originPath, path)) - if err != nil { - return err - } - } - return nil - }); err != nil { - return nil, err - } - return fileMap, nil -} +func main() {} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeauthorization.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeauthorization.go new file mode 100644 index 0000000000..e4a676505a --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeauthorization.go @@ -0,0 +1,107 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + acmev1 "github.com/cert-manager/cert-manager/pkg/apis/acme/v1" +) + +// ACMEAuthorizationApplyConfiguration represents a declarative configuration of the ACMEAuthorization type for use +// with apply. +// +// ACMEAuthorization contains data returned from the ACME server on an +// authorization that must be completed in order validate a DNS name on an ACME +// Order resource. +type ACMEAuthorizationApplyConfiguration struct { + // URL is the URL of the Authorization that must be completed + URL *string `json:"url,omitempty"` + // Identifier is the DNS name to be validated as part of this authorization + Identifier *string `json:"identifier,omitempty"` + // Wildcard will be true if this authorization is for a wildcard DNS name. + // If this is true, the identifier will be the *non-wildcard* version of + // the DNS name. + // For example, if '*.example.com' is the DNS name being validated, this + // field will be 'true' and the 'identifier' field will be 'example.com'. + Wildcard *bool `json:"wildcard,omitempty"` + // InitialState is the initial state of the ACME authorization when first + // fetched from the ACME server. + // If an Authorization is already 'valid', the Order controller will not + // create a Challenge resource for the authorization. This will occur when + // working with an ACME server that enables 'authz reuse' (such as Let's + // Encrypt's production endpoint). + // If not set and 'identifier' is set, the state is assumed to be pending + // and a Challenge will be created. + InitialState *acmev1.State `json:"initialState,omitempty"` + // Challenges specifies the challenge types offered by the ACME server. + // One of these challenge types will be selected when validating the DNS + // name and an appropriate Challenge resource will be created to perform + // the ACME challenge process. + Challenges []ACMEChallengeApplyConfiguration `json:"challenges,omitempty"` +} + +// ACMEAuthorizationApplyConfiguration constructs a declarative configuration of the ACMEAuthorization type for use with +// apply. +func ACMEAuthorization() *ACMEAuthorizationApplyConfiguration { + return &ACMEAuthorizationApplyConfiguration{} +} + +// WithURL sets the URL field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the URL field is set to the value of the last call. +func (b *ACMEAuthorizationApplyConfiguration) WithURL(value string) *ACMEAuthorizationApplyConfiguration { + b.URL = &value + return b +} + +// WithIdentifier sets the Identifier field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Identifier field is set to the value of the last call. +func (b *ACMEAuthorizationApplyConfiguration) WithIdentifier(value string) *ACMEAuthorizationApplyConfiguration { + b.Identifier = &value + return b +} + +// WithWildcard sets the Wildcard field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Wildcard field is set to the value of the last call. +func (b *ACMEAuthorizationApplyConfiguration) WithWildcard(value bool) *ACMEAuthorizationApplyConfiguration { + b.Wildcard = &value + return b +} + +// WithInitialState sets the InitialState field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the InitialState field is set to the value of the last call. +func (b *ACMEAuthorizationApplyConfiguration) WithInitialState(value acmev1.State) *ACMEAuthorizationApplyConfiguration { + b.InitialState = &value + return b +} + +// WithChallenges adds the given value to the Challenges field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Challenges field. +func (b *ACMEAuthorizationApplyConfiguration) WithChallenges(values ...*ACMEChallengeApplyConfiguration) *ACMEAuthorizationApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithChallenges") + } + b.Challenges = append(b.Challenges, *values[i]) + } + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallenge.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallenge.go new file mode 100644 index 0000000000..03c5bd0d2f --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallenge.go @@ -0,0 +1,70 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// ACMEChallengeApplyConfiguration represents a declarative configuration of the ACMEChallenge type for use +// with apply. +// +// Challenge specifies a challenge offered by the ACME server for an Order. +// An appropriate Challenge resource can be created to perform the ACME +// challenge process. +type ACMEChallengeApplyConfiguration struct { + // URL is the URL of this challenge. It can be used to retrieve additional + // metadata about the Challenge from the ACME server. + URL *string `json:"url,omitempty"` + // Token is the token that must be presented for this challenge. + // This is used to compute the 'key' that must also be presented. + Token *string `json:"token,omitempty"` + // Type is the type of challenge being offered, e.g., 'http-01', 'dns-01', + // 'tls-sni-01', etc. + // This is the raw value retrieved from the ACME server. + // Only 'http-01' and 'dns-01' are supported by cert-manager, other values + // will be ignored. + Type *string `json:"type,omitempty"` +} + +// ACMEChallengeApplyConfiguration constructs a declarative configuration of the ACMEChallenge type for use with +// apply. +func ACMEChallenge() *ACMEChallengeApplyConfiguration { + return &ACMEChallengeApplyConfiguration{} +} + +// WithURL sets the URL field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the URL field is set to the value of the last call. +func (b *ACMEChallengeApplyConfiguration) WithURL(value string) *ACMEChallengeApplyConfiguration { + b.URL = &value + return b +} + +// WithToken sets the Token field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Token field is set to the value of the last call. +func (b *ACMEChallengeApplyConfiguration) WithToken(value string) *ACMEChallengeApplyConfiguration { + b.Token = &value + return b +} + +// WithType sets the Type field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Type field is set to the value of the last call. +func (b *ACMEChallengeApplyConfiguration) WithType(value string) *ACMEChallengeApplyConfiguration { + b.Type = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolver.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolver.go new file mode 100644 index 0000000000..198039bcde --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolver.go @@ -0,0 +1,72 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// ACMEChallengeSolverApplyConfiguration represents a declarative configuration of the ACMEChallengeSolver type for use +// with apply. +// +// An ACMEChallengeSolver describes how to solve ACME challenges for the issuer it is part of. +// A selector may be provided to use different solving strategies for different DNS names. +// Only one of HTTP01 or DNS01 must be provided. +type ACMEChallengeSolverApplyConfiguration struct { + // Selector selects a set of DNSNames on the Certificate resource that + // should be solved using this challenge solver. + // If not specified, the solver will be treated as the 'default' solver + // with the lowest priority, i.e. if any other solver has a more specific + // match, it will be used instead. + Selector *CertificateDNSNameSelectorApplyConfiguration `json:"selector,omitempty"` + // Configures cert-manager to attempt to complete authorizations by + // performing the HTTP01 challenge flow. + // It is not possible to obtain certificates for wildcard domain names + // (e.g., `*.example.com`) using the HTTP01 challenge mechanism. + HTTP01 *ACMEChallengeSolverHTTP01ApplyConfiguration `json:"http01,omitempty"` + // Configures cert-manager to attempt to complete authorizations by + // performing the DNS01 challenge flow. + DNS01 *ACMEChallengeSolverDNS01ApplyConfiguration `json:"dns01,omitempty"` +} + +// ACMEChallengeSolverApplyConfiguration constructs a declarative configuration of the ACMEChallengeSolver type for use with +// apply. +func ACMEChallengeSolver() *ACMEChallengeSolverApplyConfiguration { + return &ACMEChallengeSolverApplyConfiguration{} +} + +// WithSelector sets the Selector field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Selector field is set to the value of the last call. +func (b *ACMEChallengeSolverApplyConfiguration) WithSelector(value *CertificateDNSNameSelectorApplyConfiguration) *ACMEChallengeSolverApplyConfiguration { + b.Selector = value + return b +} + +// WithHTTP01 sets the HTTP01 field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the HTTP01 field is set to the value of the last call. +func (b *ACMEChallengeSolverApplyConfiguration) WithHTTP01(value *ACMEChallengeSolverHTTP01ApplyConfiguration) *ACMEChallengeSolverApplyConfiguration { + b.HTTP01 = value + return b +} + +// WithDNS01 sets the DNS01 field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DNS01 field is set to the value of the last call. +func (b *ACMEChallengeSolverApplyConfiguration) WithDNS01(value *ACMEChallengeSolverDNS01ApplyConfiguration) *ACMEChallengeSolverApplyConfiguration { + b.DNS01 = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverdns01.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverdns01.go new file mode 100644 index 0000000000..9df5647466 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverdns01.go @@ -0,0 +1,142 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + acmev1 "github.com/cert-manager/cert-manager/pkg/apis/acme/v1" +) + +// ACMEChallengeSolverDNS01ApplyConfiguration represents a declarative configuration of the ACMEChallengeSolverDNS01 type for use +// with apply. +// +// Used to configure a DNS01 challenge provider to be used when solving DNS01 +// challenges. +// Only one DNS provider may be configured per solver. +type ACMEChallengeSolverDNS01ApplyConfiguration struct { + // CNAMEStrategy configures how the DNS01 provider should handle CNAME + // records when found in DNS zones. + CNAMEStrategy *acmev1.CNAMEStrategy `json:"cnameStrategy,omitempty"` + // Use the Akamai DNS zone management API to manage DNS01 challenge records. + Akamai *ACMEIssuerDNS01ProviderAkamaiApplyConfiguration `json:"akamai,omitempty"` + // Use the Google Cloud DNS API to manage DNS01 challenge records. + CloudDNS *ACMEIssuerDNS01ProviderCloudDNSApplyConfiguration `json:"cloudDNS,omitempty"` + // Use the Cloudflare API to manage DNS01 challenge records. + Cloudflare *ACMEIssuerDNS01ProviderCloudflareApplyConfiguration `json:"cloudflare,omitempty"` + // Use the AWS Route53 API to manage DNS01 challenge records. + Route53 *ACMEIssuerDNS01ProviderRoute53ApplyConfiguration `json:"route53,omitempty"` + // Use the Microsoft Azure DNS API to manage DNS01 challenge records. + AzureDNS *ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration `json:"azureDNS,omitempty"` + // Use the DigitalOcean DNS API to manage DNS01 challenge records. + DigitalOcean *ACMEIssuerDNS01ProviderDigitalOceanApplyConfiguration `json:"digitalocean,omitempty"` + // Use the 'ACME DNS' (https://github.com/joohoi/acme-dns) API to manage + // DNS01 challenge records. + AcmeDNS *ACMEIssuerDNS01ProviderAcmeDNSApplyConfiguration `json:"acmeDNS,omitempty"` + // Use RFC2136 ("Dynamic Updates in the Domain Name System") (https://datatracker.ietf.org/doc/rfc2136/) + // to manage DNS01 challenge records. + RFC2136 *ACMEIssuerDNS01ProviderRFC2136ApplyConfiguration `json:"rfc2136,omitempty"` + // Configure an external webhook based DNS01 challenge solver to manage + // DNS01 challenge records. + Webhook *ACMEIssuerDNS01ProviderWebhookApplyConfiguration `json:"webhook,omitempty"` +} + +// ACMEChallengeSolverDNS01ApplyConfiguration constructs a declarative configuration of the ACMEChallengeSolverDNS01 type for use with +// apply. +func ACMEChallengeSolverDNS01() *ACMEChallengeSolverDNS01ApplyConfiguration { + return &ACMEChallengeSolverDNS01ApplyConfiguration{} +} + +// WithCNAMEStrategy sets the CNAMEStrategy field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CNAMEStrategy field is set to the value of the last call. +func (b *ACMEChallengeSolverDNS01ApplyConfiguration) WithCNAMEStrategy(value acmev1.CNAMEStrategy) *ACMEChallengeSolverDNS01ApplyConfiguration { + b.CNAMEStrategy = &value + return b +} + +// WithAkamai sets the Akamai field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Akamai field is set to the value of the last call. +func (b *ACMEChallengeSolverDNS01ApplyConfiguration) WithAkamai(value *ACMEIssuerDNS01ProviderAkamaiApplyConfiguration) *ACMEChallengeSolverDNS01ApplyConfiguration { + b.Akamai = value + return b +} + +// WithCloudDNS sets the CloudDNS field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CloudDNS field is set to the value of the last call. +func (b *ACMEChallengeSolverDNS01ApplyConfiguration) WithCloudDNS(value *ACMEIssuerDNS01ProviderCloudDNSApplyConfiguration) *ACMEChallengeSolverDNS01ApplyConfiguration { + b.CloudDNS = value + return b +} + +// WithCloudflare sets the Cloudflare field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Cloudflare field is set to the value of the last call. +func (b *ACMEChallengeSolverDNS01ApplyConfiguration) WithCloudflare(value *ACMEIssuerDNS01ProviderCloudflareApplyConfiguration) *ACMEChallengeSolverDNS01ApplyConfiguration { + b.Cloudflare = value + return b +} + +// WithRoute53 sets the Route53 field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Route53 field is set to the value of the last call. +func (b *ACMEChallengeSolverDNS01ApplyConfiguration) WithRoute53(value *ACMEIssuerDNS01ProviderRoute53ApplyConfiguration) *ACMEChallengeSolverDNS01ApplyConfiguration { + b.Route53 = value + return b +} + +// WithAzureDNS sets the AzureDNS field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the AzureDNS field is set to the value of the last call. +func (b *ACMEChallengeSolverDNS01ApplyConfiguration) WithAzureDNS(value *ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration) *ACMEChallengeSolverDNS01ApplyConfiguration { + b.AzureDNS = value + return b +} + +// WithDigitalOcean sets the DigitalOcean field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DigitalOcean field is set to the value of the last call. +func (b *ACMEChallengeSolverDNS01ApplyConfiguration) WithDigitalOcean(value *ACMEIssuerDNS01ProviderDigitalOceanApplyConfiguration) *ACMEChallengeSolverDNS01ApplyConfiguration { + b.DigitalOcean = value + return b +} + +// WithAcmeDNS sets the AcmeDNS field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the AcmeDNS field is set to the value of the last call. +func (b *ACMEChallengeSolverDNS01ApplyConfiguration) WithAcmeDNS(value *ACMEIssuerDNS01ProviderAcmeDNSApplyConfiguration) *ACMEChallengeSolverDNS01ApplyConfiguration { + b.AcmeDNS = value + return b +} + +// WithRFC2136 sets the RFC2136 field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the RFC2136 field is set to the value of the last call. +func (b *ACMEChallengeSolverDNS01ApplyConfiguration) WithRFC2136(value *ACMEIssuerDNS01ProviderRFC2136ApplyConfiguration) *ACMEChallengeSolverDNS01ApplyConfiguration { + b.RFC2136 = value + return b +} + +// WithWebhook sets the Webhook field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Webhook field is set to the value of the last call. +func (b *ACMEChallengeSolverDNS01ApplyConfiguration) WithWebhook(value *ACMEIssuerDNS01ProviderWebhookApplyConfiguration) *ACMEChallengeSolverDNS01ApplyConfiguration { + b.Webhook = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01.go new file mode 100644 index 0000000000..12c30805e1 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01.go @@ -0,0 +1,63 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// ACMEChallengeSolverHTTP01ApplyConfiguration represents a declarative configuration of the ACMEChallengeSolverHTTP01 type for use +// with apply. +// +// ACMEChallengeSolverHTTP01 contains configuration detailing how to solve +// HTTP01 challenges within a Kubernetes cluster. +// Typically this is accomplished through creating 'routes' of some description +// that configure ingress controllers to direct traffic to 'solver pods', which +// are responsible for responding to the ACME server's HTTP requests. +// Only one of Ingress / Gateway can be specified. +type ACMEChallengeSolverHTTP01ApplyConfiguration struct { + // The ingress based HTTP01 challenge solver will solve challenges by + // creating or modifying Ingress resources in order to route requests for + // '/.well-known/acme-challenge/XYZ' to 'challenge solver' pods that are + // provisioned by cert-manager for each Challenge to be completed. + Ingress *ACMEChallengeSolverHTTP01IngressApplyConfiguration `json:"ingress,omitempty"` + // The Gateway API is a sig-network community API that models service networking + // in Kubernetes (https://gateway-api.sigs.k8s.io/). The Gateway solver will + // create HTTPRoutes with the specified labels in the same namespace as the challenge. + // This solver is experimental, and fields / behaviour may change in the future. + GatewayHTTPRoute *ACMEChallengeSolverHTTP01GatewayHTTPRouteApplyConfiguration `json:"gatewayHTTPRoute,omitempty"` +} + +// ACMEChallengeSolverHTTP01ApplyConfiguration constructs a declarative configuration of the ACMEChallengeSolverHTTP01 type for use with +// apply. +func ACMEChallengeSolverHTTP01() *ACMEChallengeSolverHTTP01ApplyConfiguration { + return &ACMEChallengeSolverHTTP01ApplyConfiguration{} +} + +// WithIngress sets the Ingress field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Ingress field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01ApplyConfiguration) WithIngress(value *ACMEChallengeSolverHTTP01IngressApplyConfiguration) *ACMEChallengeSolverHTTP01ApplyConfiguration { + b.Ingress = value + return b +} + +// WithGatewayHTTPRoute sets the GatewayHTTPRoute field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the GatewayHTTPRoute field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01ApplyConfiguration) WithGatewayHTTPRoute(value *ACMEChallengeSolverHTTP01GatewayHTTPRouteApplyConfiguration) *ACMEChallengeSolverHTTP01ApplyConfiguration { + b.GatewayHTTPRoute = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01gatewayhttproute.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01gatewayhttproute.go new file mode 100644 index 0000000000..63b5ef72a2 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01gatewayhttproute.go @@ -0,0 +1,92 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + apisv1 "sigs.k8s.io/gateway-api/apis/v1" +) + +// ACMEChallengeSolverHTTP01GatewayHTTPRouteApplyConfiguration represents a declarative configuration of the ACMEChallengeSolverHTTP01GatewayHTTPRoute type for use +// with apply. +// +// The ACMEChallengeSolverHTTP01GatewayHTTPRoute solver will create HTTPRoute objects for a Gateway class +// routing to an ACME challenge solver pod. +type ACMEChallengeSolverHTTP01GatewayHTTPRouteApplyConfiguration struct { + // Optional service type for Kubernetes solver service. Supported values + // are NodePort or ClusterIP. If unset, defaults to NodePort. + ServiceType *corev1.ServiceType `json:"serviceType,omitempty"` + // Custom labels that will be applied to HTTPRoutes created by cert-manager + // while solving HTTP-01 challenges. + Labels map[string]string `json:"labels,omitempty"` + // When solving an HTTP-01 challenge, cert-manager creates an HTTPRoute. + // cert-manager needs to know which parentRefs should be used when creating + // the HTTPRoute. Usually, the parentRef references a Gateway. See: + // https://gateway-api.sigs.k8s.io/api-types/httproute/#attaching-to-gateways + ParentRefs []apisv1.ParentReference `json:"parentRefs,omitempty"` + // Optional pod template used to configure the ACME challenge solver pods + // used for HTTP01 challenges. + PodTemplate *ACMEChallengeSolverHTTP01IngressPodTemplateApplyConfiguration `json:"podTemplate,omitempty"` +} + +// ACMEChallengeSolverHTTP01GatewayHTTPRouteApplyConfiguration constructs a declarative configuration of the ACMEChallengeSolverHTTP01GatewayHTTPRoute type for use with +// apply. +func ACMEChallengeSolverHTTP01GatewayHTTPRoute() *ACMEChallengeSolverHTTP01GatewayHTTPRouteApplyConfiguration { + return &ACMEChallengeSolverHTTP01GatewayHTTPRouteApplyConfiguration{} +} + +// WithServiceType sets the ServiceType field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ServiceType field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01GatewayHTTPRouteApplyConfiguration) WithServiceType(value corev1.ServiceType) *ACMEChallengeSolverHTTP01GatewayHTTPRouteApplyConfiguration { + b.ServiceType = &value + return b +} + +// WithLabels puts the entries into the Labels field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Labels field, +// overwriting an existing map entries in Labels field with the same key. +func (b *ACMEChallengeSolverHTTP01GatewayHTTPRouteApplyConfiguration) WithLabels(entries map[string]string) *ACMEChallengeSolverHTTP01GatewayHTTPRouteApplyConfiguration { + if b.Labels == nil && len(entries) > 0 { + b.Labels = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Labels[k] = v + } + return b +} + +// WithParentRefs adds the given value to the ParentRefs field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the ParentRefs field. +func (b *ACMEChallengeSolverHTTP01GatewayHTTPRouteApplyConfiguration) WithParentRefs(values ...apisv1.ParentReference) *ACMEChallengeSolverHTTP01GatewayHTTPRouteApplyConfiguration { + for i := range values { + b.ParentRefs = append(b.ParentRefs, values[i]) + } + return b +} + +// WithPodTemplate sets the PodTemplate field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the PodTemplate field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01GatewayHTTPRouteApplyConfiguration) WithPodTemplate(value *ACMEChallengeSolverHTTP01IngressPodTemplateApplyConfiguration) *ACMEChallengeSolverHTTP01GatewayHTTPRouteApplyConfiguration { + b.PodTemplate = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingress.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingress.go new file mode 100644 index 0000000000..d2a097ff3b --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingress.go @@ -0,0 +1,108 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + corev1 "k8s.io/api/core/v1" +) + +// ACMEChallengeSolverHTTP01IngressApplyConfiguration represents a declarative configuration of the ACMEChallengeSolverHTTP01Ingress type for use +// with apply. +type ACMEChallengeSolverHTTP01IngressApplyConfiguration struct { + // Optional service type for Kubernetes solver service. Supported values + // are NodePort or ClusterIP. If unset, defaults to NodePort. + ServiceType *corev1.ServiceType `json:"serviceType,omitempty"` + // This field configures the field `ingressClassName` on the created Ingress + // resources used to solve ACME challenges that use this challenge solver. + // This is the recommended way of configuring the ingress class. Only one of + // `class`, `name` or `ingressClassName` may be specified. + IngressClassName *string `json:"ingressClassName,omitempty"` + // This field configures the annotation `kubernetes.io/ingress.class` when + // creating Ingress resources to solve ACME challenges that use this + // challenge solver. Only one of `class`, `name` or `ingressClassName` may + // be specified. + Class *string `json:"class,omitempty"` + // The name of the ingress resource that should have ACME challenge solving + // routes inserted into it in order to solve HTTP01 challenges. + // This is typically used in conjunction with ingress controllers like + // ingress-gce, which maintains a 1:1 mapping between external IPs and + // ingress resources. Only one of `class`, `name` or `ingressClassName` may + // be specified. + Name *string `json:"name,omitempty"` + // Optional pod template used to configure the ACME challenge solver pods + // used for HTTP01 challenges. + PodTemplate *ACMEChallengeSolverHTTP01IngressPodTemplateApplyConfiguration `json:"podTemplate,omitempty"` + // Optional ingress template used to configure the ACME challenge solver + // ingress used for HTTP01 challenges. + IngressTemplate *ACMEChallengeSolverHTTP01IngressTemplateApplyConfiguration `json:"ingressTemplate,omitempty"` +} + +// ACMEChallengeSolverHTTP01IngressApplyConfiguration constructs a declarative configuration of the ACMEChallengeSolverHTTP01Ingress type for use with +// apply. +func ACMEChallengeSolverHTTP01Ingress() *ACMEChallengeSolverHTTP01IngressApplyConfiguration { + return &ACMEChallengeSolverHTTP01IngressApplyConfiguration{} +} + +// WithServiceType sets the ServiceType field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ServiceType field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01IngressApplyConfiguration) WithServiceType(value corev1.ServiceType) *ACMEChallengeSolverHTTP01IngressApplyConfiguration { + b.ServiceType = &value + return b +} + +// WithIngressClassName sets the IngressClassName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the IngressClassName field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01IngressApplyConfiguration) WithIngressClassName(value string) *ACMEChallengeSolverHTTP01IngressApplyConfiguration { + b.IngressClassName = &value + return b +} + +// WithClass sets the Class field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Class field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01IngressApplyConfiguration) WithClass(value string) *ACMEChallengeSolverHTTP01IngressApplyConfiguration { + b.Class = &value + return b +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01IngressApplyConfiguration) WithName(value string) *ACMEChallengeSolverHTTP01IngressApplyConfiguration { + b.Name = &value + return b +} + +// WithPodTemplate sets the PodTemplate field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the PodTemplate field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01IngressApplyConfiguration) WithPodTemplate(value *ACMEChallengeSolverHTTP01IngressPodTemplateApplyConfiguration) *ACMEChallengeSolverHTTP01IngressApplyConfiguration { + b.PodTemplate = value + return b +} + +// WithIngressTemplate sets the IngressTemplate field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the IngressTemplate field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01IngressApplyConfiguration) WithIngressTemplate(value *ACMEChallengeSolverHTTP01IngressTemplateApplyConfiguration) *ACMEChallengeSolverHTTP01IngressApplyConfiguration { + b.IngressTemplate = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingressobjectmeta.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingressobjectmeta.go new file mode 100644 index 0000000000..169deb7c8b --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingressobjectmeta.go @@ -0,0 +1,62 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// ACMEChallengeSolverHTTP01IngressObjectMetaApplyConfiguration represents a declarative configuration of the ACMEChallengeSolverHTTP01IngressObjectMeta type for use +// with apply. +type ACMEChallengeSolverHTTP01IngressObjectMetaApplyConfiguration struct { + // Annotations that should be added to the created ACME HTTP01 solver ingress. + Annotations map[string]string `json:"annotations,omitempty"` + // Labels that should be added to the created ACME HTTP01 solver ingress. + Labels map[string]string `json:"labels,omitempty"` +} + +// ACMEChallengeSolverHTTP01IngressObjectMetaApplyConfiguration constructs a declarative configuration of the ACMEChallengeSolverHTTP01IngressObjectMeta type for use with +// apply. +func ACMEChallengeSolverHTTP01IngressObjectMeta() *ACMEChallengeSolverHTTP01IngressObjectMetaApplyConfiguration { + return &ACMEChallengeSolverHTTP01IngressObjectMetaApplyConfiguration{} +} + +// WithAnnotations puts the entries into the Annotations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Annotations field, +// overwriting an existing map entries in Annotations field with the same key. +func (b *ACMEChallengeSolverHTTP01IngressObjectMetaApplyConfiguration) WithAnnotations(entries map[string]string) *ACMEChallengeSolverHTTP01IngressObjectMetaApplyConfiguration { + if b.Annotations == nil && len(entries) > 0 { + b.Annotations = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Annotations[k] = v + } + return b +} + +// WithLabels puts the entries into the Labels field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Labels field, +// overwriting an existing map entries in Labels field with the same key. +func (b *ACMEChallengeSolverHTTP01IngressObjectMetaApplyConfiguration) WithLabels(entries map[string]string) *ACMEChallengeSolverHTTP01IngressObjectMetaApplyConfiguration { + if b.Labels == nil && len(entries) > 0 { + b.Labels = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Labels[k] = v + } + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingresspodobjectmeta.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingresspodobjectmeta.go new file mode 100644 index 0000000000..97f6fc7bde --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingresspodobjectmeta.go @@ -0,0 +1,62 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// ACMEChallengeSolverHTTP01IngressPodObjectMetaApplyConfiguration represents a declarative configuration of the ACMEChallengeSolverHTTP01IngressPodObjectMeta type for use +// with apply. +type ACMEChallengeSolverHTTP01IngressPodObjectMetaApplyConfiguration struct { + // Annotations that should be added to the created ACME HTTP01 solver pods. + Annotations map[string]string `json:"annotations,omitempty"` + // Labels that should be added to the created ACME HTTP01 solver pods. + Labels map[string]string `json:"labels,omitempty"` +} + +// ACMEChallengeSolverHTTP01IngressPodObjectMetaApplyConfiguration constructs a declarative configuration of the ACMEChallengeSolverHTTP01IngressPodObjectMeta type for use with +// apply. +func ACMEChallengeSolverHTTP01IngressPodObjectMeta() *ACMEChallengeSolverHTTP01IngressPodObjectMetaApplyConfiguration { + return &ACMEChallengeSolverHTTP01IngressPodObjectMetaApplyConfiguration{} +} + +// WithAnnotations puts the entries into the Annotations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Annotations field, +// overwriting an existing map entries in Annotations field with the same key. +func (b *ACMEChallengeSolverHTTP01IngressPodObjectMetaApplyConfiguration) WithAnnotations(entries map[string]string) *ACMEChallengeSolverHTTP01IngressPodObjectMetaApplyConfiguration { + if b.Annotations == nil && len(entries) > 0 { + b.Annotations = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Annotations[k] = v + } + return b +} + +// WithLabels puts the entries into the Labels field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Labels field, +// overwriting an existing map entries in Labels field with the same key. +func (b *ACMEChallengeSolverHTTP01IngressPodObjectMetaApplyConfiguration) WithLabels(entries map[string]string) *ACMEChallengeSolverHTTP01IngressPodObjectMetaApplyConfiguration { + if b.Labels == nil && len(entries) > 0 { + b.Labels = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Labels[k] = v + } + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingresspodresources.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingresspodresources.go new file mode 100644 index 0000000000..1f031260be --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingresspodresources.go @@ -0,0 +1,61 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + corev1 "k8s.io/api/core/v1" +) + +// ACMEChallengeSolverHTTP01IngressPodResourcesApplyConfiguration represents a declarative configuration of the ACMEChallengeSolverHTTP01IngressPodResources type for use +// with apply. +// +// ACMEChallengeSolverHTTP01IngressPodResources defines resource requirements for ACME HTTP01 solver pods. +// To keep API surface essential, this trims down the 'corev1.ResourceRequirements' type to only include the Requests and Limits fields. +type ACMEChallengeSolverHTTP01IngressPodResourcesApplyConfiguration struct { + // Limits describes the maximum amount of compute resources allowed. + // More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ + Limits *corev1.ResourceList `json:"limits,omitempty"` + // Requests describes the minimum amount of compute resources required. + // If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + // otherwise to the global values configured via controller flags. Requests cannot exceed Limits. + // More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ + Requests *corev1.ResourceList `json:"requests,omitempty"` +} + +// ACMEChallengeSolverHTTP01IngressPodResourcesApplyConfiguration constructs a declarative configuration of the ACMEChallengeSolverHTTP01IngressPodResources type for use with +// apply. +func ACMEChallengeSolverHTTP01IngressPodResources() *ACMEChallengeSolverHTTP01IngressPodResourcesApplyConfiguration { + return &ACMEChallengeSolverHTTP01IngressPodResourcesApplyConfiguration{} +} + +// WithLimits sets the Limits field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Limits field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01IngressPodResourcesApplyConfiguration) WithLimits(value corev1.ResourceList) *ACMEChallengeSolverHTTP01IngressPodResourcesApplyConfiguration { + b.Limits = &value + return b +} + +// WithRequests sets the Requests field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Requests field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01IngressPodResourcesApplyConfiguration) WithRequests(value corev1.ResourceList) *ACMEChallengeSolverHTTP01IngressPodResourcesApplyConfiguration { + b.Requests = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingresspodsecuritycontext.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingresspodsecuritycontext.go new file mode 100644 index 0000000000..ad6a237b75 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingresspodsecuritycontext.go @@ -0,0 +1,172 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + corev1 "k8s.io/api/core/v1" +) + +// ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration represents a declarative configuration of the ACMEChallengeSolverHTTP01IngressPodSecurityContext type for use +// with apply. +type ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration struct { + // The SELinux context to be applied to all containers. + // If unspecified, the container runtime will allocate a random SELinux context for each + // container. May also be set in SecurityContext. If set in + // both SecurityContext and PodSecurityContext, the value specified in SecurityContext + // takes precedence for that container. + // Note that this field cannot be set when spec.os.name is windows. + SELinuxOptions *corev1.SELinuxOptions `json:"seLinuxOptions,omitempty"` + // The UID to run the entrypoint of the container process. + // Defaults to user specified in image metadata if unspecified. + // May also be set in SecurityContext. If set in both SecurityContext and + // PodSecurityContext, the value specified in SecurityContext takes precedence + // for that container. + // Note that this field cannot be set when spec.os.name is windows. + RunAsUser *int64 `json:"runAsUser,omitempty"` + // The GID to run the entrypoint of the container process. + // Uses runtime default if unset. + // May also be set in SecurityContext. If set in both SecurityContext and + // PodSecurityContext, the value specified in SecurityContext takes precedence + // for that container. + // Note that this field cannot be set when spec.os.name is windows. + RunAsGroup *int64 `json:"runAsGroup,omitempty"` + // Indicates that the container must run as a non-root user. + // If true, the Kubelet will validate the image at runtime to ensure that it + // does not run as UID 0 (root) and fail to start the container if it does. + // If unset or false, no such validation will be performed. + // May also be set in SecurityContext. If set in both SecurityContext and + // PodSecurityContext, the value specified in SecurityContext takes precedence. + RunAsNonRoot *bool `json:"runAsNonRoot,omitempty"` + // A list of groups applied to the first process run in each container, in addition + // to the container's primary GID, the fsGroup (if specified), and group memberships + // defined in the container image for the uid of the container process. If unspecified, + // no additional groups are added to any container. Note that group memberships + // defined in the container image for the uid of the container process are still effective, + // even if they are not included in this list. + // Note that this field cannot be set when spec.os.name is windows. + SupplementalGroups []int64 `json:"supplementalGroups,omitempty"` + // A special supplemental group that applies to all containers in a pod. + // Some volume types allow the Kubelet to change the ownership of that volume + // to be owned by the pod: + // + // 1. The owning GID will be the FSGroup + // 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) + // 3. The permission bits are OR'd with rw-rw---- + // + // If unset, the Kubelet will not modify the ownership and permissions of any volume. + // Note that this field cannot be set when spec.os.name is windows. + FSGroup *int64 `json:"fsGroup,omitempty"` + // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported + // sysctls (by the container runtime) might fail to launch. + // Note that this field cannot be set when spec.os.name is windows. + Sysctls []corev1.Sysctl `json:"sysctls,omitempty"` + // fsGroupChangePolicy defines behavior of changing ownership and permission of the volume + // before being exposed inside Pod. This field will only apply to + // volume types which support fsGroup based ownership(and permissions). + // It will have no effect on ephemeral volume types such as: secret, configmaps + // and emptydir. + // Valid values are "OnRootMismatch" and "Always". If not specified, "Always" is used. + // Note that this field cannot be set when spec.os.name is windows. + FSGroupChangePolicy *corev1.PodFSGroupChangePolicy `json:"fsGroupChangePolicy,omitempty"` + // The seccomp options to use by the containers in this pod. + // Note that this field cannot be set when spec.os.name is windows. + SeccompProfile *corev1.SeccompProfile `json:"seccompProfile,omitempty"` +} + +// ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration constructs a declarative configuration of the ACMEChallengeSolverHTTP01IngressPodSecurityContext type for use with +// apply. +func ACMEChallengeSolverHTTP01IngressPodSecurityContext() *ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration { + return &ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration{} +} + +// WithSELinuxOptions sets the SELinuxOptions field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the SELinuxOptions field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration) WithSELinuxOptions(value corev1.SELinuxOptions) *ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration { + b.SELinuxOptions = &value + return b +} + +// WithRunAsUser sets the RunAsUser field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the RunAsUser field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration) WithRunAsUser(value int64) *ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration { + b.RunAsUser = &value + return b +} + +// WithRunAsGroup sets the RunAsGroup field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the RunAsGroup field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration) WithRunAsGroup(value int64) *ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration { + b.RunAsGroup = &value + return b +} + +// WithRunAsNonRoot sets the RunAsNonRoot field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the RunAsNonRoot field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration) WithRunAsNonRoot(value bool) *ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration { + b.RunAsNonRoot = &value + return b +} + +// WithSupplementalGroups adds the given value to the SupplementalGroups field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the SupplementalGroups field. +func (b *ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration) WithSupplementalGroups(values ...int64) *ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration { + for i := range values { + b.SupplementalGroups = append(b.SupplementalGroups, values[i]) + } + return b +} + +// WithFSGroup sets the FSGroup field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the FSGroup field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration) WithFSGroup(value int64) *ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration { + b.FSGroup = &value + return b +} + +// WithSysctls adds the given value to the Sysctls field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Sysctls field. +func (b *ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration) WithSysctls(values ...corev1.Sysctl) *ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration { + for i := range values { + b.Sysctls = append(b.Sysctls, values[i]) + } + return b +} + +// WithFSGroupChangePolicy sets the FSGroupChangePolicy field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the FSGroupChangePolicy field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration) WithFSGroupChangePolicy(value corev1.PodFSGroupChangePolicy) *ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration { + b.FSGroupChangePolicy = &value + return b +} + +// WithSeccompProfile sets the SeccompProfile field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the SeccompProfile field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration) WithSeccompProfile(value corev1.SeccompProfile) *ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration { + b.SeccompProfile = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingresspodspec.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingresspodspec.go new file mode 100644 index 0000000000..930c3c184b --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingresspodspec.go @@ -0,0 +1,131 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + corev1 "k8s.io/api/core/v1" +) + +// ACMEChallengeSolverHTTP01IngressPodSpecApplyConfiguration represents a declarative configuration of the ACMEChallengeSolverHTTP01IngressPodSpec type for use +// with apply. +type ACMEChallengeSolverHTTP01IngressPodSpecApplyConfiguration struct { + // NodeSelector is a selector which must be true for the pod to fit on a node. + // Selector which must match a node's labels for the pod to be scheduled on that node. + // More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ + NodeSelector map[string]string `json:"nodeSelector,omitempty"` + // If specified, the pod's scheduling constraints + Affinity *corev1.Affinity `json:"affinity,omitempty"` + // If specified, the pod's tolerations. + Tolerations []corev1.Toleration `json:"tolerations,omitempty"` + // If specified, the pod's priorityClassName. + PriorityClassName *string `json:"priorityClassName,omitempty"` + // If specified, the pod's service account + ServiceAccountName *string `json:"serviceAccountName,omitempty"` + // If specified, the pod's imagePullSecrets + ImagePullSecrets []corev1.LocalObjectReference `json:"imagePullSecrets,omitempty"` + // If specified, the pod's security context + SecurityContext *ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration `json:"securityContext,omitempty"` + // If specified, the pod's resource requirements. + // These values override the global resource configuration flags. + // Note that when only specifying resource limits, ensure they are greater than or equal + // to the corresponding global resource requests configured via controller flags + // (--acme-http01-solver-resource-request-cpu, --acme-http01-solver-resource-request-memory). + // Kubernetes will reject pod creation if limits are lower than requests, causing challenge failures. + Resources *ACMEChallengeSolverHTTP01IngressPodResourcesApplyConfiguration `json:"resources,omitempty"` +} + +// ACMEChallengeSolverHTTP01IngressPodSpecApplyConfiguration constructs a declarative configuration of the ACMEChallengeSolverHTTP01IngressPodSpec type for use with +// apply. +func ACMEChallengeSolverHTTP01IngressPodSpec() *ACMEChallengeSolverHTTP01IngressPodSpecApplyConfiguration { + return &ACMEChallengeSolverHTTP01IngressPodSpecApplyConfiguration{} +} + +// WithNodeSelector puts the entries into the NodeSelector field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the NodeSelector field, +// overwriting an existing map entries in NodeSelector field with the same key. +func (b *ACMEChallengeSolverHTTP01IngressPodSpecApplyConfiguration) WithNodeSelector(entries map[string]string) *ACMEChallengeSolverHTTP01IngressPodSpecApplyConfiguration { + if b.NodeSelector == nil && len(entries) > 0 { + b.NodeSelector = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.NodeSelector[k] = v + } + return b +} + +// WithAffinity sets the Affinity field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Affinity field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01IngressPodSpecApplyConfiguration) WithAffinity(value corev1.Affinity) *ACMEChallengeSolverHTTP01IngressPodSpecApplyConfiguration { + b.Affinity = &value + return b +} + +// WithTolerations adds the given value to the Tolerations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Tolerations field. +func (b *ACMEChallengeSolverHTTP01IngressPodSpecApplyConfiguration) WithTolerations(values ...corev1.Toleration) *ACMEChallengeSolverHTTP01IngressPodSpecApplyConfiguration { + for i := range values { + b.Tolerations = append(b.Tolerations, values[i]) + } + return b +} + +// WithPriorityClassName sets the PriorityClassName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the PriorityClassName field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01IngressPodSpecApplyConfiguration) WithPriorityClassName(value string) *ACMEChallengeSolverHTTP01IngressPodSpecApplyConfiguration { + b.PriorityClassName = &value + return b +} + +// WithServiceAccountName sets the ServiceAccountName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ServiceAccountName field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01IngressPodSpecApplyConfiguration) WithServiceAccountName(value string) *ACMEChallengeSolverHTTP01IngressPodSpecApplyConfiguration { + b.ServiceAccountName = &value + return b +} + +// WithImagePullSecrets adds the given value to the ImagePullSecrets field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the ImagePullSecrets field. +func (b *ACMEChallengeSolverHTTP01IngressPodSpecApplyConfiguration) WithImagePullSecrets(values ...corev1.LocalObjectReference) *ACMEChallengeSolverHTTP01IngressPodSpecApplyConfiguration { + for i := range values { + b.ImagePullSecrets = append(b.ImagePullSecrets, values[i]) + } + return b +} + +// WithSecurityContext sets the SecurityContext field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the SecurityContext field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01IngressPodSpecApplyConfiguration) WithSecurityContext(value *ACMEChallengeSolverHTTP01IngressPodSecurityContextApplyConfiguration) *ACMEChallengeSolverHTTP01IngressPodSpecApplyConfiguration { + b.SecurityContext = value + return b +} + +// WithResources sets the Resources field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Resources field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01IngressPodSpecApplyConfiguration) WithResources(value *ACMEChallengeSolverHTTP01IngressPodResourcesApplyConfiguration) *ACMEChallengeSolverHTTP01IngressPodSpecApplyConfiguration { + b.Resources = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingresspodtemplate.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingresspodtemplate.go new file mode 100644 index 0000000000..8d07a5383c --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingresspodtemplate.go @@ -0,0 +1,83 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// ACMEChallengeSolverHTTP01IngressPodTemplateApplyConfiguration represents a declarative configuration of the ACMEChallengeSolverHTTP01IngressPodTemplate type for use +// with apply. +type ACMEChallengeSolverHTTP01IngressPodTemplateApplyConfiguration struct { + // ObjectMeta overrides for the pod used to solve HTTP01 challenges. + // Only the 'labels' and 'annotations' fields may be set. + // If labels or annotations overlap with in-built values, the values here + // will override the in-built values. + *ACMEChallengeSolverHTTP01IngressPodObjectMetaApplyConfiguration `json:"metadata,omitempty"` + // PodSpec defines overrides for the HTTP01 challenge solver pod. + // Check ACMEChallengeSolverHTTP01IngressPodSpec to find out currently supported fields. + // All other fields will be ignored. + Spec *ACMEChallengeSolverHTTP01IngressPodSpecApplyConfiguration `json:"spec,omitempty"` +} + +// ACMEChallengeSolverHTTP01IngressPodTemplateApplyConfiguration constructs a declarative configuration of the ACMEChallengeSolverHTTP01IngressPodTemplate type for use with +// apply. +func ACMEChallengeSolverHTTP01IngressPodTemplate() *ACMEChallengeSolverHTTP01IngressPodTemplateApplyConfiguration { + return &ACMEChallengeSolverHTTP01IngressPodTemplateApplyConfiguration{} +} + +// WithAnnotations puts the entries into the Annotations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Annotations field, +// overwriting an existing map entries in Annotations field with the same key. +func (b *ACMEChallengeSolverHTTP01IngressPodTemplateApplyConfiguration) WithAnnotations(entries map[string]string) *ACMEChallengeSolverHTTP01IngressPodTemplateApplyConfiguration { + b.ensureACMEChallengeSolverHTTP01IngressPodObjectMetaApplyConfigurationExists() + if b.ACMEChallengeSolverHTTP01IngressPodObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 { + b.ACMEChallengeSolverHTTP01IngressPodObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.ACMEChallengeSolverHTTP01IngressPodObjectMetaApplyConfiguration.Annotations[k] = v + } + return b +} + +// WithLabels puts the entries into the Labels field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Labels field, +// overwriting an existing map entries in Labels field with the same key. +func (b *ACMEChallengeSolverHTTP01IngressPodTemplateApplyConfiguration) WithLabels(entries map[string]string) *ACMEChallengeSolverHTTP01IngressPodTemplateApplyConfiguration { + b.ensureACMEChallengeSolverHTTP01IngressPodObjectMetaApplyConfigurationExists() + if b.ACMEChallengeSolverHTTP01IngressPodObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 { + b.ACMEChallengeSolverHTTP01IngressPodObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.ACMEChallengeSolverHTTP01IngressPodObjectMetaApplyConfiguration.Labels[k] = v + } + return b +} + +func (b *ACMEChallengeSolverHTTP01IngressPodTemplateApplyConfiguration) ensureACMEChallengeSolverHTTP01IngressPodObjectMetaApplyConfigurationExists() { + if b.ACMEChallengeSolverHTTP01IngressPodObjectMetaApplyConfiguration == nil { + b.ACMEChallengeSolverHTTP01IngressPodObjectMetaApplyConfiguration = &ACMEChallengeSolverHTTP01IngressPodObjectMetaApplyConfiguration{} + } +} + +// WithSpec sets the Spec field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Spec field is set to the value of the last call. +func (b *ACMEChallengeSolverHTTP01IngressPodTemplateApplyConfiguration) WithSpec(value *ACMEChallengeSolverHTTP01IngressPodSpecApplyConfiguration) *ACMEChallengeSolverHTTP01IngressPodTemplateApplyConfiguration { + b.Spec = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingresstemplate.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingresstemplate.go new file mode 100644 index 0000000000..024d8e515d --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmechallengesolverhttp01ingresstemplate.go @@ -0,0 +1,71 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// ACMEChallengeSolverHTTP01IngressTemplateApplyConfiguration represents a declarative configuration of the ACMEChallengeSolverHTTP01IngressTemplate type for use +// with apply. +type ACMEChallengeSolverHTTP01IngressTemplateApplyConfiguration struct { + // ObjectMeta overrides for the ingress used to solve HTTP01 challenges. + // Only the 'labels' and 'annotations' fields may be set. + // If labels or annotations overlap with in-built values, the values here + // will override the in-built values. + *ACMEChallengeSolverHTTP01IngressObjectMetaApplyConfiguration `json:"metadata,omitempty"` +} + +// ACMEChallengeSolverHTTP01IngressTemplateApplyConfiguration constructs a declarative configuration of the ACMEChallengeSolverHTTP01IngressTemplate type for use with +// apply. +func ACMEChallengeSolverHTTP01IngressTemplate() *ACMEChallengeSolverHTTP01IngressTemplateApplyConfiguration { + return &ACMEChallengeSolverHTTP01IngressTemplateApplyConfiguration{} +} + +// WithAnnotations puts the entries into the Annotations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Annotations field, +// overwriting an existing map entries in Annotations field with the same key. +func (b *ACMEChallengeSolverHTTP01IngressTemplateApplyConfiguration) WithAnnotations(entries map[string]string) *ACMEChallengeSolverHTTP01IngressTemplateApplyConfiguration { + b.ensureACMEChallengeSolverHTTP01IngressObjectMetaApplyConfigurationExists() + if b.ACMEChallengeSolverHTTP01IngressObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 { + b.ACMEChallengeSolverHTTP01IngressObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.ACMEChallengeSolverHTTP01IngressObjectMetaApplyConfiguration.Annotations[k] = v + } + return b +} + +// WithLabels puts the entries into the Labels field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Labels field, +// overwriting an existing map entries in Labels field with the same key. +func (b *ACMEChallengeSolverHTTP01IngressTemplateApplyConfiguration) WithLabels(entries map[string]string) *ACMEChallengeSolverHTTP01IngressTemplateApplyConfiguration { + b.ensureACMEChallengeSolverHTTP01IngressObjectMetaApplyConfigurationExists() + if b.ACMEChallengeSolverHTTP01IngressObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 { + b.ACMEChallengeSolverHTTP01IngressObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.ACMEChallengeSolverHTTP01IngressObjectMetaApplyConfiguration.Labels[k] = v + } + return b +} + +func (b *ACMEChallengeSolverHTTP01IngressTemplateApplyConfiguration) ensureACMEChallengeSolverHTTP01IngressObjectMetaApplyConfigurationExists() { + if b.ACMEChallengeSolverHTTP01IngressObjectMetaApplyConfiguration == nil { + b.ACMEChallengeSolverHTTP01IngressObjectMetaApplyConfiguration = &ACMEChallengeSolverHTTP01IngressObjectMetaApplyConfiguration{} + } +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeexternalaccountbinding.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeexternalaccountbinding.go new file mode 100644 index 0000000000..f8704a888f --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeexternalaccountbinding.go @@ -0,0 +1,76 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + acmev1 "github.com/cert-manager/cert-manager/pkg/apis/acme/v1" + metav1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1" +) + +// ACMEExternalAccountBindingApplyConfiguration represents a declarative configuration of the ACMEExternalAccountBinding type for use +// with apply. +// +// ACMEExternalAccountBinding is a reference to a CA external account of the ACME +// server. +type ACMEExternalAccountBindingApplyConfiguration struct { + // keyID is the ID of the CA key that the External Account is bound to. + KeyID *string `json:"keyID,omitempty"` + // keySecretRef is a Secret Key Selector referencing a data item in a Kubernetes + // Secret which holds the symmetric MAC key of the External Account Binding. + // The `key` is the index string that is paired with the key data in the + // Secret and should not be confused with the key data itself, or indeed with + // the External Account Binding keyID above. + // The secret key stored in the Secret **must** be un-padded, base64 URL + // encoded data. + Key *metav1.SecretKeySelectorApplyConfiguration `json:"keySecretRef,omitempty"` + // Deprecated: keyAlgorithm field exists for historical compatibility + // reasons and should not be used. The algorithm is now hardcoded to HS256 + // in golang/x/crypto/acme. + KeyAlgorithm *acmev1.HMACKeyAlgorithm `json:"keyAlgorithm,omitempty"` +} + +// ACMEExternalAccountBindingApplyConfiguration constructs a declarative configuration of the ACMEExternalAccountBinding type for use with +// apply. +func ACMEExternalAccountBinding() *ACMEExternalAccountBindingApplyConfiguration { + return &ACMEExternalAccountBindingApplyConfiguration{} +} + +// WithKeyID sets the KeyID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the KeyID field is set to the value of the last call. +func (b *ACMEExternalAccountBindingApplyConfiguration) WithKeyID(value string) *ACMEExternalAccountBindingApplyConfiguration { + b.KeyID = &value + return b +} + +// WithKey sets the Key field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Key field is set to the value of the last call. +func (b *ACMEExternalAccountBindingApplyConfiguration) WithKey(value *metav1.SecretKeySelectorApplyConfiguration) *ACMEExternalAccountBindingApplyConfiguration { + b.Key = value + return b +} + +// WithKeyAlgorithm sets the KeyAlgorithm field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the KeyAlgorithm field is set to the value of the last call. +func (b *ACMEExternalAccountBindingApplyConfiguration) WithKeyAlgorithm(value acmev1.HMACKeyAlgorithm) *ACMEExternalAccountBindingApplyConfiguration { + b.KeyAlgorithm = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuer.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuer.go new file mode 100644 index 0000000000..1e2fb13b99 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuer.go @@ -0,0 +1,204 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1" +) + +// ACMEIssuerApplyConfiguration represents a declarative configuration of the ACMEIssuer type for use +// with apply. +// +// ACMEIssuer contains the specification for an ACME issuer. +// This uses the RFC8555 specification to obtain certificates by completing +// 'challenges' to prove ownership of domain identifiers. +// Earlier draft versions of the ACME specification are not supported. +type ACMEIssuerApplyConfiguration struct { + // Email is the email address to be associated with the ACME account. + // This field is optional, but it is strongly recommended to be set. + // It will be used to contact you in case of issues with your account or + // certificates, including expiry notification emails. + // This field may be updated after the account is initially registered. + Email *string `json:"email,omitempty"` + // Server is the URL used to access the ACME server's 'directory' endpoint. + // For example, for Let's Encrypt's staging endpoint, you would use: + // "https://acme-staging-v02.api.letsencrypt.org/directory". + // Only ACME v2 endpoints (i.e. RFC 8555) are supported. + Server *string `json:"server,omitempty"` + // PreferredChain is the chain to use if the ACME server outputs multiple. + // PreferredChain is no guarantee that this one gets delivered by the ACME + // endpoint. + // For example, for Let's Encrypt's DST cross-sign you would use: + // "DST Root CA X3" or "ISRG Root X1" for the newer Let's Encrypt root CA. + // This value picks the first certificate bundle in the combined set of + // ACME default and alternative chains that has a root-most certificate with + // this value as its issuer's commonname. + PreferredChain *string `json:"preferredChain,omitempty"` + // Base64-encoded bundle of PEM CAs which can be used to validate the certificate + // chain presented by the ACME server. + // Mutually exclusive with SkipTLSVerify; prefer using CABundle to prevent various + // kinds of security vulnerabilities. + // If CABundle and SkipTLSVerify are unset, the system certificate bundle inside + // the container is used to validate the TLS connection. + CABundle []byte `json:"caBundle,omitempty"` + // INSECURE: Enables or disables validation of the ACME server TLS certificate. + // If true, requests to the ACME server will not have the TLS certificate chain + // validated. + // Mutually exclusive with CABundle; prefer using CABundle to prevent various + // kinds of security vulnerabilities. + // Only enable this option in development environments. + // If CABundle and SkipTLSVerify are unset, the system certificate bundle inside + // the container is used to validate the TLS connection. + // Defaults to false. + SkipTLSVerify *bool `json:"skipTLSVerify,omitempty"` + // ExternalAccountBinding is a reference to a CA external account of the ACME + // server. + // If set, upon registration cert-manager will attempt to associate the given + // external account credentials with the registered ACME account. + ExternalAccountBinding *ACMEExternalAccountBindingApplyConfiguration `json:"externalAccountBinding,omitempty"` + // PrivateKey is the name of a Kubernetes Secret resource that will be used to + // store the automatically generated ACME account private key. + // Optionally, a `key` may be specified to select a specific entry within + // the named Secret resource. + // If `key` is not specified, a default of `tls.key` will be used. + PrivateKey *metav1.SecretKeySelectorApplyConfiguration `json:"privateKeySecretRef,omitempty"` + // Solvers is a list of challenge solvers that will be used to solve + // ACME challenges for the matching domains. + // Solver configurations must be provided in order to obtain certificates + // from an ACME server. + // For more information, see: https://cert-manager.io/docs/configuration/acme/ + Solvers []ACMEChallengeSolverApplyConfiguration `json:"solvers,omitempty"` + // Enables or disables generating a new ACME account key. + // If true, the Issuer resource will *not* request a new account but will expect + // the account key to be supplied via an existing secret. + // If false, the cert-manager system will generate a new ACME account key + // for the Issuer. + // Defaults to false. + DisableAccountKeyGeneration *bool `json:"disableAccountKeyGeneration,omitempty"` + // Enables requesting a Not After date on certificates that matches the + // duration of the certificate. This is not supported by all ACME servers + // like Let's Encrypt. If set to true when the ACME server does not support + // it, it will create an error on the Order. + // Defaults to false. + EnableDurationFeature *bool `json:"enableDurationFeature,omitempty"` + // Profile allows requesting a certificate profile from the ACME server. + // Supported profiles are listed by the server's ACME directory URL. + Profile *string `json:"profile,omitempty"` +} + +// ACMEIssuerApplyConfiguration constructs a declarative configuration of the ACMEIssuer type for use with +// apply. +func ACMEIssuer() *ACMEIssuerApplyConfiguration { + return &ACMEIssuerApplyConfiguration{} +} + +// WithEmail sets the Email field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Email field is set to the value of the last call. +func (b *ACMEIssuerApplyConfiguration) WithEmail(value string) *ACMEIssuerApplyConfiguration { + b.Email = &value + return b +} + +// WithServer sets the Server field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Server field is set to the value of the last call. +func (b *ACMEIssuerApplyConfiguration) WithServer(value string) *ACMEIssuerApplyConfiguration { + b.Server = &value + return b +} + +// WithPreferredChain sets the PreferredChain field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the PreferredChain field is set to the value of the last call. +func (b *ACMEIssuerApplyConfiguration) WithPreferredChain(value string) *ACMEIssuerApplyConfiguration { + b.PreferredChain = &value + return b +} + +// WithCABundle adds the given value to the CABundle field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the CABundle field. +func (b *ACMEIssuerApplyConfiguration) WithCABundle(values ...byte) *ACMEIssuerApplyConfiguration { + for i := range values { + b.CABundle = append(b.CABundle, values[i]) + } + return b +} + +// WithSkipTLSVerify sets the SkipTLSVerify field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the SkipTLSVerify field is set to the value of the last call. +func (b *ACMEIssuerApplyConfiguration) WithSkipTLSVerify(value bool) *ACMEIssuerApplyConfiguration { + b.SkipTLSVerify = &value + return b +} + +// WithExternalAccountBinding sets the ExternalAccountBinding field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ExternalAccountBinding field is set to the value of the last call. +func (b *ACMEIssuerApplyConfiguration) WithExternalAccountBinding(value *ACMEExternalAccountBindingApplyConfiguration) *ACMEIssuerApplyConfiguration { + b.ExternalAccountBinding = value + return b +} + +// WithPrivateKey sets the PrivateKey field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the PrivateKey field is set to the value of the last call. +func (b *ACMEIssuerApplyConfiguration) WithPrivateKey(value *metav1.SecretKeySelectorApplyConfiguration) *ACMEIssuerApplyConfiguration { + b.PrivateKey = value + return b +} + +// WithSolvers adds the given value to the Solvers field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Solvers field. +func (b *ACMEIssuerApplyConfiguration) WithSolvers(values ...*ACMEChallengeSolverApplyConfiguration) *ACMEIssuerApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithSolvers") + } + b.Solvers = append(b.Solvers, *values[i]) + } + return b +} + +// WithDisableAccountKeyGeneration sets the DisableAccountKeyGeneration field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DisableAccountKeyGeneration field is set to the value of the last call. +func (b *ACMEIssuerApplyConfiguration) WithDisableAccountKeyGeneration(value bool) *ACMEIssuerApplyConfiguration { + b.DisableAccountKeyGeneration = &value + return b +} + +// WithEnableDurationFeature sets the EnableDurationFeature field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the EnableDurationFeature field is set to the value of the last call. +func (b *ACMEIssuerApplyConfiguration) WithEnableDurationFeature(value bool) *ACMEIssuerApplyConfiguration { + b.EnableDurationFeature = &value + return b +} + +// WithProfile sets the Profile field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Profile field is set to the value of the last call. +func (b *ACMEIssuerApplyConfiguration) WithProfile(value string) *ACMEIssuerApplyConfiguration { + b.Profile = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01provideracmedns.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01provideracmedns.go new file mode 100644 index 0000000000..4203e9410d --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01provideracmedns.go @@ -0,0 +1,55 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1" +) + +// ACMEIssuerDNS01ProviderAcmeDNSApplyConfiguration represents a declarative configuration of the ACMEIssuerDNS01ProviderAcmeDNS type for use +// with apply. +// +// ACMEIssuerDNS01ProviderAcmeDNS is a structure containing the +// configuration for ACME-DNS servers +type ACMEIssuerDNS01ProviderAcmeDNSApplyConfiguration struct { + Host *string `json:"host,omitempty"` + AccountSecret *metav1.SecretKeySelectorApplyConfiguration `json:"accountSecretRef,omitempty"` +} + +// ACMEIssuerDNS01ProviderAcmeDNSApplyConfiguration constructs a declarative configuration of the ACMEIssuerDNS01ProviderAcmeDNS type for use with +// apply. +func ACMEIssuerDNS01ProviderAcmeDNS() *ACMEIssuerDNS01ProviderAcmeDNSApplyConfiguration { + return &ACMEIssuerDNS01ProviderAcmeDNSApplyConfiguration{} +} + +// WithHost sets the Host field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Host field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderAcmeDNSApplyConfiguration) WithHost(value string) *ACMEIssuerDNS01ProviderAcmeDNSApplyConfiguration { + b.Host = &value + return b +} + +// WithAccountSecret sets the AccountSecret field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the AccountSecret field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderAcmeDNSApplyConfiguration) WithAccountSecret(value *metav1.SecretKeySelectorApplyConfiguration) *ACMEIssuerDNS01ProviderAcmeDNSApplyConfiguration { + b.AccountSecret = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providerakamai.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providerakamai.go new file mode 100644 index 0000000000..ade94aa11a --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providerakamai.go @@ -0,0 +1,73 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1" +) + +// ACMEIssuerDNS01ProviderAkamaiApplyConfiguration represents a declarative configuration of the ACMEIssuerDNS01ProviderAkamai type for use +// with apply. +// +// ACMEIssuerDNS01ProviderAkamai is a structure containing the DNS +// configuration for Akamai DNS—Zone Record Management API +type ACMEIssuerDNS01ProviderAkamaiApplyConfiguration struct { + ServiceConsumerDomain *string `json:"serviceConsumerDomain,omitempty"` + ClientToken *metav1.SecretKeySelectorApplyConfiguration `json:"clientTokenSecretRef,omitempty"` + ClientSecret *metav1.SecretKeySelectorApplyConfiguration `json:"clientSecretSecretRef,omitempty"` + AccessToken *metav1.SecretKeySelectorApplyConfiguration `json:"accessTokenSecretRef,omitempty"` +} + +// ACMEIssuerDNS01ProviderAkamaiApplyConfiguration constructs a declarative configuration of the ACMEIssuerDNS01ProviderAkamai type for use with +// apply. +func ACMEIssuerDNS01ProviderAkamai() *ACMEIssuerDNS01ProviderAkamaiApplyConfiguration { + return &ACMEIssuerDNS01ProviderAkamaiApplyConfiguration{} +} + +// WithServiceConsumerDomain sets the ServiceConsumerDomain field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ServiceConsumerDomain field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderAkamaiApplyConfiguration) WithServiceConsumerDomain(value string) *ACMEIssuerDNS01ProviderAkamaiApplyConfiguration { + b.ServiceConsumerDomain = &value + return b +} + +// WithClientToken sets the ClientToken field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ClientToken field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderAkamaiApplyConfiguration) WithClientToken(value *metav1.SecretKeySelectorApplyConfiguration) *ACMEIssuerDNS01ProviderAkamaiApplyConfiguration { + b.ClientToken = value + return b +} + +// WithClientSecret sets the ClientSecret field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ClientSecret field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderAkamaiApplyConfiguration) WithClientSecret(value *metav1.SecretKeySelectorApplyConfiguration) *ACMEIssuerDNS01ProviderAkamaiApplyConfiguration { + b.ClientSecret = value + return b +} + +// WithAccessToken sets the AccessToken field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the AccessToken field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderAkamaiApplyConfiguration) WithAccessToken(value *metav1.SecretKeySelectorApplyConfiguration) *ACMEIssuerDNS01ProviderAkamaiApplyConfiguration { + b.AccessToken = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providerazuredns.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providerazuredns.go new file mode 100644 index 0000000000..0e03132729 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providerazuredns.go @@ -0,0 +1,145 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + acmev1 "github.com/cert-manager/cert-manager/pkg/apis/acme/v1" + metav1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1" +) + +// ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration represents a declarative configuration of the ACMEIssuerDNS01ProviderAzureDNS type for use +// with apply. +// +// ACMEIssuerDNS01ProviderAzureDNS is a structure containing the +// configuration for Azure DNS +type ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration struct { + // Auth: Azure Service Principal: + // The ClientID of the Azure Service Principal used to authenticate with Azure DNS. + // If set, ClientSecret and TenantID must also be set. + ClientID *string `json:"clientID,omitempty"` + // Auth: Azure Service Principal: + // A reference to a Secret containing the password associated with the Service Principal. + // If set, ClientID and TenantID must also be set. + ClientSecret *metav1.SecretKeySelectorApplyConfiguration `json:"clientSecretSecretRef,omitempty"` + // ID of the Azure subscription + SubscriptionID *string `json:"subscriptionID,omitempty"` + // Auth: Azure Service Principal: + // The TenantID of the Azure Service Principal used to authenticate with Azure DNS. + // If set, ClientID and ClientSecret must also be set. + TenantID *string `json:"tenantID,omitempty"` + // resource group the DNS zone is located in + ResourceGroupName *string `json:"resourceGroupName,omitempty"` + // name of the DNS zone that should be used + HostedZoneName *string `json:"hostedZoneName,omitempty"` + // name of the Azure environment (default AzurePublicCloud) + Environment *acmev1.AzureDNSEnvironment `json:"environment,omitempty"` + // Auth: Azure Workload Identity or Azure Managed Service Identity: + // Settings to enable Azure Workload Identity or Azure Managed Service Identity + // If set, ClientID, ClientSecret and TenantID must not be set. + ManagedIdentity *AzureManagedIdentityApplyConfiguration `json:"managedIdentity,omitempty"` + // ZoneType determines which type of Azure DNS zone to use. + // + // Valid values are: + // - AzurePublicZone (default): Use a public Azure DNS zone. + // - AzurePrivateZone: Use an Azure Private DNS zone. + // + // If not specified, AzurePublicZone is used. + // + // Support for Azure Private DNS zones is currently + // experimental and may change in future releases. + ZoneType *acmev1.AzureZoneType `json:"zoneType,omitempty"` +} + +// ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration constructs a declarative configuration of the ACMEIssuerDNS01ProviderAzureDNS type for use with +// apply. +func ACMEIssuerDNS01ProviderAzureDNS() *ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration { + return &ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration{} +} + +// WithClientID sets the ClientID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ClientID field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration) WithClientID(value string) *ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration { + b.ClientID = &value + return b +} + +// WithClientSecret sets the ClientSecret field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ClientSecret field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration) WithClientSecret(value *metav1.SecretKeySelectorApplyConfiguration) *ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration { + b.ClientSecret = value + return b +} + +// WithSubscriptionID sets the SubscriptionID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the SubscriptionID field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration) WithSubscriptionID(value string) *ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration { + b.SubscriptionID = &value + return b +} + +// WithTenantID sets the TenantID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the TenantID field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration) WithTenantID(value string) *ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration { + b.TenantID = &value + return b +} + +// WithResourceGroupName sets the ResourceGroupName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ResourceGroupName field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration) WithResourceGroupName(value string) *ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration { + b.ResourceGroupName = &value + return b +} + +// WithHostedZoneName sets the HostedZoneName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the HostedZoneName field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration) WithHostedZoneName(value string) *ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration { + b.HostedZoneName = &value + return b +} + +// WithEnvironment sets the Environment field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Environment field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration) WithEnvironment(value acmev1.AzureDNSEnvironment) *ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration { + b.Environment = &value + return b +} + +// WithManagedIdentity sets the ManagedIdentity field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ManagedIdentity field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration) WithManagedIdentity(value *AzureManagedIdentityApplyConfiguration) *ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration { + b.ManagedIdentity = value + return b +} + +// WithZoneType sets the ZoneType field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ZoneType field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration) WithZoneType(value acmev1.AzureZoneType) *ACMEIssuerDNS01ProviderAzureDNSApplyConfiguration { + b.ZoneType = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providerclouddns.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providerclouddns.go new file mode 100644 index 0000000000..55327b7d46 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providerclouddns.go @@ -0,0 +1,67 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1" +) + +// ACMEIssuerDNS01ProviderCloudDNSApplyConfiguration represents a declarative configuration of the ACMEIssuerDNS01ProviderCloudDNS type for use +// with apply. +// +// ACMEIssuerDNS01ProviderCloudDNS is a structure containing the DNS +// configuration for Google Cloud DNS +type ACMEIssuerDNS01ProviderCloudDNSApplyConfiguration struct { + ServiceAccount *metav1.SecretKeySelectorApplyConfiguration `json:"serviceAccountSecretRef,omitempty"` + Project *string `json:"project,omitempty"` + // HostedZoneName is an optional field that tells cert-manager in which + // Cloud DNS zone the challenge record has to be created. + // If left empty cert-manager will automatically choose a zone. + HostedZoneName *string `json:"hostedZoneName,omitempty"` +} + +// ACMEIssuerDNS01ProviderCloudDNSApplyConfiguration constructs a declarative configuration of the ACMEIssuerDNS01ProviderCloudDNS type for use with +// apply. +func ACMEIssuerDNS01ProviderCloudDNS() *ACMEIssuerDNS01ProviderCloudDNSApplyConfiguration { + return &ACMEIssuerDNS01ProviderCloudDNSApplyConfiguration{} +} + +// WithServiceAccount sets the ServiceAccount field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ServiceAccount field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderCloudDNSApplyConfiguration) WithServiceAccount(value *metav1.SecretKeySelectorApplyConfiguration) *ACMEIssuerDNS01ProviderCloudDNSApplyConfiguration { + b.ServiceAccount = value + return b +} + +// WithProject sets the Project field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Project field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderCloudDNSApplyConfiguration) WithProject(value string) *ACMEIssuerDNS01ProviderCloudDNSApplyConfiguration { + b.Project = &value + return b +} + +// WithHostedZoneName sets the HostedZoneName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the HostedZoneName field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderCloudDNSApplyConfiguration) WithHostedZoneName(value string) *ACMEIssuerDNS01ProviderCloudDNSApplyConfiguration { + b.HostedZoneName = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providercloudflare.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providercloudflare.go new file mode 100644 index 0000000000..f48978c1e6 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providercloudflare.go @@ -0,0 +1,70 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1" +) + +// ACMEIssuerDNS01ProviderCloudflareApplyConfiguration represents a declarative configuration of the ACMEIssuerDNS01ProviderCloudflare type for use +// with apply. +// +// ACMEIssuerDNS01ProviderCloudflare is a structure containing the DNS +// configuration for Cloudflare. +// One of `apiKeySecretRef` or `apiTokenSecretRef` must be provided. +type ACMEIssuerDNS01ProviderCloudflareApplyConfiguration struct { + // Email of the account, only required when using API key based authentication. + Email *string `json:"email,omitempty"` + // API key to use to authenticate with Cloudflare. + // Note: using an API token to authenticate is now the recommended method + // as it allows greater control of permissions. + APIKey *metav1.SecretKeySelectorApplyConfiguration `json:"apiKeySecretRef,omitempty"` + // API token used to authenticate with Cloudflare. + APIToken *metav1.SecretKeySelectorApplyConfiguration `json:"apiTokenSecretRef,omitempty"` +} + +// ACMEIssuerDNS01ProviderCloudflareApplyConfiguration constructs a declarative configuration of the ACMEIssuerDNS01ProviderCloudflare type for use with +// apply. +func ACMEIssuerDNS01ProviderCloudflare() *ACMEIssuerDNS01ProviderCloudflareApplyConfiguration { + return &ACMEIssuerDNS01ProviderCloudflareApplyConfiguration{} +} + +// WithEmail sets the Email field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Email field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderCloudflareApplyConfiguration) WithEmail(value string) *ACMEIssuerDNS01ProviderCloudflareApplyConfiguration { + b.Email = &value + return b +} + +// WithAPIKey sets the APIKey field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the APIKey field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderCloudflareApplyConfiguration) WithAPIKey(value *metav1.SecretKeySelectorApplyConfiguration) *ACMEIssuerDNS01ProviderCloudflareApplyConfiguration { + b.APIKey = value + return b +} + +// WithAPIToken sets the APIToken field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the APIToken field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderCloudflareApplyConfiguration) WithAPIToken(value *metav1.SecretKeySelectorApplyConfiguration) *ACMEIssuerDNS01ProviderCloudflareApplyConfiguration { + b.APIToken = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providerdigitalocean.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providerdigitalocean.go new file mode 100644 index 0000000000..01e0bac120 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providerdigitalocean.go @@ -0,0 +1,46 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1" +) + +// ACMEIssuerDNS01ProviderDigitalOceanApplyConfiguration represents a declarative configuration of the ACMEIssuerDNS01ProviderDigitalOcean type for use +// with apply. +// +// ACMEIssuerDNS01ProviderDigitalOcean is a structure containing the DNS +// configuration for DigitalOcean Domains +type ACMEIssuerDNS01ProviderDigitalOceanApplyConfiguration struct { + Token *metav1.SecretKeySelectorApplyConfiguration `json:"tokenSecretRef,omitempty"` +} + +// ACMEIssuerDNS01ProviderDigitalOceanApplyConfiguration constructs a declarative configuration of the ACMEIssuerDNS01ProviderDigitalOcean type for use with +// apply. +func ACMEIssuerDNS01ProviderDigitalOcean() *ACMEIssuerDNS01ProviderDigitalOceanApplyConfiguration { + return &ACMEIssuerDNS01ProviderDigitalOceanApplyConfiguration{} +} + +// WithToken sets the Token field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Token field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderDigitalOceanApplyConfiguration) WithToken(value *metav1.SecretKeySelectorApplyConfiguration) *ACMEIssuerDNS01ProviderDigitalOceanApplyConfiguration { + b.Token = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providerrfc2136.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providerrfc2136.go new file mode 100644 index 0000000000..1bd2d2a7f3 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providerrfc2136.go @@ -0,0 +1,96 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + acmev1 "github.com/cert-manager/cert-manager/pkg/apis/acme/v1" + metav1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1" +) + +// ACMEIssuerDNS01ProviderRFC2136ApplyConfiguration represents a declarative configuration of the ACMEIssuerDNS01ProviderRFC2136 type for use +// with apply. +// +// ACMEIssuerDNS01ProviderRFC2136 is a structure containing the +// configuration for RFC2136 DNS +type ACMEIssuerDNS01ProviderRFC2136ApplyConfiguration struct { + // The IP address or hostname of an authoritative DNS server supporting + // RFC2136 in the form host:port. If the host is an IPv6 address it must be + // enclosed in square brackets (e.g [2001:db8::1]); port is optional. + // This field is required. + Nameserver *string `json:"nameserver,omitempty"` + // The name of the secret containing the TSIG value. + // If “tsigKeyName“ is defined, this field is required. + TSIGSecret *metav1.SecretKeySelectorApplyConfiguration `json:"tsigSecretSecretRef,omitempty"` + // The TSIG Key name configured in the DNS. + // If “tsigSecretSecretRef“ is defined, this field is required. + TSIGKeyName *string `json:"tsigKeyName,omitempty"` + // The TSIG Algorithm configured in the DNS supporting RFC2136. Used only + // when “tsigSecretSecretRef“ and “tsigKeyName“ are defined. + // Supported values are (case-insensitive): “HMACMD5“ (default), + // “HMACSHA1“, “HMACSHA256“ or “HMACSHA512“. + TSIGAlgorithm *string `json:"tsigAlgorithm,omitempty"` + // Protocol to use for dynamic DNS update queries. Valid values are (case-sensitive) “TCP“ and “UDP“; “UDP“ (default). + Protocol *acmev1.RFC2136UpdateProtocol `json:"protocol,omitempty"` +} + +// ACMEIssuerDNS01ProviderRFC2136ApplyConfiguration constructs a declarative configuration of the ACMEIssuerDNS01ProviderRFC2136 type for use with +// apply. +func ACMEIssuerDNS01ProviderRFC2136() *ACMEIssuerDNS01ProviderRFC2136ApplyConfiguration { + return &ACMEIssuerDNS01ProviderRFC2136ApplyConfiguration{} +} + +// WithNameserver sets the Nameserver field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Nameserver field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderRFC2136ApplyConfiguration) WithNameserver(value string) *ACMEIssuerDNS01ProviderRFC2136ApplyConfiguration { + b.Nameserver = &value + return b +} + +// WithTSIGSecret sets the TSIGSecret field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the TSIGSecret field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderRFC2136ApplyConfiguration) WithTSIGSecret(value *metav1.SecretKeySelectorApplyConfiguration) *ACMEIssuerDNS01ProviderRFC2136ApplyConfiguration { + b.TSIGSecret = value + return b +} + +// WithTSIGKeyName sets the TSIGKeyName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the TSIGKeyName field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderRFC2136ApplyConfiguration) WithTSIGKeyName(value string) *ACMEIssuerDNS01ProviderRFC2136ApplyConfiguration { + b.TSIGKeyName = &value + return b +} + +// WithTSIGAlgorithm sets the TSIGAlgorithm field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the TSIGAlgorithm field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderRFC2136ApplyConfiguration) WithTSIGAlgorithm(value string) *ACMEIssuerDNS01ProviderRFC2136ApplyConfiguration { + b.TSIGAlgorithm = &value + return b +} + +// WithProtocol sets the Protocol field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Protocol field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderRFC2136ApplyConfiguration) WithProtocol(value acmev1.RFC2136UpdateProtocol) *ACMEIssuerDNS01ProviderRFC2136ApplyConfiguration { + b.Protocol = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providerroute53.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providerroute53.go new file mode 100644 index 0000000000..ab58f76137 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providerroute53.go @@ -0,0 +1,141 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1" +) + +// ACMEIssuerDNS01ProviderRoute53ApplyConfiguration represents a declarative configuration of the ACMEIssuerDNS01ProviderRoute53 type for use +// with apply. +// +// ACMEIssuerDNS01ProviderRoute53 is a structure containing the Route 53 +// configuration for AWS +type ACMEIssuerDNS01ProviderRoute53ApplyConfiguration struct { + // Auth configures how cert-manager authenticates. + Auth *Route53AuthApplyConfiguration `json:"auth,omitempty"` + // The AccessKeyID is used for authentication. + // Cannot be set when SecretAccessKeyID is set. + // If neither the Access Key nor Key ID are set, we fall back to using env + // vars, shared credentials file, or AWS Instance metadata, + // see: https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials + AccessKeyID *string `json:"accessKeyID,omitempty"` + // The SecretAccessKey is used for authentication. If set, pull the AWS + // access key ID from a key within a Kubernetes Secret. + // Cannot be set when AccessKeyID is set. + // If neither the Access Key nor Key ID are set, we fall back to using env + // vars, shared credentials file, or AWS Instance metadata, + // see: https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials + SecretAccessKeyID *metav1.SecretKeySelectorApplyConfiguration `json:"accessKeyIDSecretRef,omitempty"` + // The SecretAccessKey is used for authentication. + // If neither the Access Key nor Key ID are set, we fall back to using env + // vars, shared credentials file, or AWS Instance metadata, + // see: https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials + SecretAccessKey *metav1.SecretKeySelectorApplyConfiguration `json:"secretAccessKeySecretRef,omitempty"` + // Role is a Role ARN which the Route53 provider will assume using either the explicit credentials AccessKeyID/SecretAccessKey + // or the inferred credentials from environment variables, shared credentials file or AWS Instance metadata + Role *string `json:"role,omitempty"` + // If set, the provider will manage only this zone in Route53 and will not do a lookup using the route53:ListHostedZonesByName api call. + HostedZoneID *string `json:"hostedZoneID,omitempty"` + // Override the AWS region. + // + // Route53 is a global service and does not have regional endpoints but the + // region specified here (or via environment variables) is used as a hint to + // help compute the correct AWS credential scope and partition when it + // connects to Route53. See: + // - [Amazon Route 53 endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/r53.html) + // - [Global services](https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/global-services.html) + // + // If you omit this region field, cert-manager will use the region from + // AWS_REGION and AWS_DEFAULT_REGION environment variables, if they are set + // in the cert-manager controller Pod. + // + // The `region` field is not needed if you use [IAM Roles for Service Accounts (IRSA)](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html). + // Instead an AWS_REGION environment variable is added to the cert-manager controller Pod by: + // [Amazon EKS Pod Identity Webhook](https://github.com/aws/amazon-eks-pod-identity-webhook). + // In this case this `region` field value is ignored. + // + // The `region` field is not needed if you use [EKS Pod Identities](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html). + // Instead an AWS_REGION environment variable is added to the cert-manager controller Pod by: + // [Amazon EKS Pod Identity Agent](https://github.com/aws/eks-pod-identity-agent), + // In this case this `region` field value is ignored. + Region *string `json:"region,omitempty"` +} + +// ACMEIssuerDNS01ProviderRoute53ApplyConfiguration constructs a declarative configuration of the ACMEIssuerDNS01ProviderRoute53 type for use with +// apply. +func ACMEIssuerDNS01ProviderRoute53() *ACMEIssuerDNS01ProviderRoute53ApplyConfiguration { + return &ACMEIssuerDNS01ProviderRoute53ApplyConfiguration{} +} + +// WithAuth sets the Auth field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Auth field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderRoute53ApplyConfiguration) WithAuth(value *Route53AuthApplyConfiguration) *ACMEIssuerDNS01ProviderRoute53ApplyConfiguration { + b.Auth = value + return b +} + +// WithAccessKeyID sets the AccessKeyID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the AccessKeyID field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderRoute53ApplyConfiguration) WithAccessKeyID(value string) *ACMEIssuerDNS01ProviderRoute53ApplyConfiguration { + b.AccessKeyID = &value + return b +} + +// WithSecretAccessKeyID sets the SecretAccessKeyID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the SecretAccessKeyID field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderRoute53ApplyConfiguration) WithSecretAccessKeyID(value *metav1.SecretKeySelectorApplyConfiguration) *ACMEIssuerDNS01ProviderRoute53ApplyConfiguration { + b.SecretAccessKeyID = value + return b +} + +// WithSecretAccessKey sets the SecretAccessKey field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the SecretAccessKey field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderRoute53ApplyConfiguration) WithSecretAccessKey(value *metav1.SecretKeySelectorApplyConfiguration) *ACMEIssuerDNS01ProviderRoute53ApplyConfiguration { + b.SecretAccessKey = value + return b +} + +// WithRole sets the Role field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Role field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderRoute53ApplyConfiguration) WithRole(value string) *ACMEIssuerDNS01ProviderRoute53ApplyConfiguration { + b.Role = &value + return b +} + +// WithHostedZoneID sets the HostedZoneID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the HostedZoneID field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderRoute53ApplyConfiguration) WithHostedZoneID(value string) *ACMEIssuerDNS01ProviderRoute53ApplyConfiguration { + b.HostedZoneID = &value + return b +} + +// WithRegion sets the Region field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Region field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderRoute53ApplyConfiguration) WithRegion(value string) *ACMEIssuerDNS01ProviderRoute53ApplyConfiguration { + b.Region = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providerwebhook.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providerwebhook.go new file mode 100644 index 0000000000..eafadf7d4c --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerdns01providerwebhook.go @@ -0,0 +1,79 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" +) + +// ACMEIssuerDNS01ProviderWebhookApplyConfiguration represents a declarative configuration of the ACMEIssuerDNS01ProviderWebhook type for use +// with apply. +// +// ACMEIssuerDNS01ProviderWebhook specifies configuration for a webhook DNS01 +// provider, including where to POST ChallengePayload resources. +type ACMEIssuerDNS01ProviderWebhookApplyConfiguration struct { + // The API group name that should be used when POSTing ChallengePayload + // resources to the webhook apiserver. + // This should be the same as the GroupName specified in the webhook + // provider implementation. + GroupName *string `json:"groupName,omitempty"` + // The name of the solver to use, as defined in the webhook provider + // implementation. + // This will typically be the name of the provider, e.g., 'cloudflare'. + SolverName *string `json:"solverName,omitempty"` + // Additional configuration that should be passed to the webhook apiserver + // when challenges are processed. + // This can contain arbitrary JSON data. + // Secret values should not be specified in this stanza. + // If secret values are needed (e.g., credentials for a DNS service), you + // should use a SecretKeySelector to reference a Secret resource. + // For details on the schema of this field, consult the webhook provider + // implementation's documentation. + Config *apiextensionsv1.JSON `json:"config,omitempty"` +} + +// ACMEIssuerDNS01ProviderWebhookApplyConfiguration constructs a declarative configuration of the ACMEIssuerDNS01ProviderWebhook type for use with +// apply. +func ACMEIssuerDNS01ProviderWebhook() *ACMEIssuerDNS01ProviderWebhookApplyConfiguration { + return &ACMEIssuerDNS01ProviderWebhookApplyConfiguration{} +} + +// WithGroupName sets the GroupName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the GroupName field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderWebhookApplyConfiguration) WithGroupName(value string) *ACMEIssuerDNS01ProviderWebhookApplyConfiguration { + b.GroupName = &value + return b +} + +// WithSolverName sets the SolverName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the SolverName field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderWebhookApplyConfiguration) WithSolverName(value string) *ACMEIssuerDNS01ProviderWebhookApplyConfiguration { + b.SolverName = &value + return b +} + +// WithConfig sets the Config field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Config field is set to the value of the last call. +func (b *ACMEIssuerDNS01ProviderWebhookApplyConfiguration) WithConfig(value apiextensionsv1.JSON) *ACMEIssuerDNS01ProviderWebhookApplyConfiguration { + b.Config = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerstatus.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerstatus.go new file mode 100644 index 0000000000..d0c53efa3a --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/acmeissuerstatus.go @@ -0,0 +1,65 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// ACMEIssuerStatusApplyConfiguration represents a declarative configuration of the ACMEIssuerStatus type for use +// with apply. +type ACMEIssuerStatusApplyConfiguration struct { + // URI is the unique account identifier, which can also be used to retrieve + // account details from the CA + URI *string `json:"uri,omitempty"` + // LastRegisteredEmail is the email associated with the latest registered + // ACME account, in order to track changes made to registered account + // associated with the Issuer + LastRegisteredEmail *string `json:"lastRegisteredEmail,omitempty"` + // LastPrivateKeyHash is a hash of the private key associated with the latest + // registered ACME account, in order to track changes made to registered account + // associated with the Issuer + LastPrivateKeyHash *string `json:"lastPrivateKeyHash,omitempty"` +} + +// ACMEIssuerStatusApplyConfiguration constructs a declarative configuration of the ACMEIssuerStatus type for use with +// apply. +func ACMEIssuerStatus() *ACMEIssuerStatusApplyConfiguration { + return &ACMEIssuerStatusApplyConfiguration{} +} + +// WithURI sets the URI field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the URI field is set to the value of the last call. +func (b *ACMEIssuerStatusApplyConfiguration) WithURI(value string) *ACMEIssuerStatusApplyConfiguration { + b.URI = &value + return b +} + +// WithLastRegisteredEmail sets the LastRegisteredEmail field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the LastRegisteredEmail field is set to the value of the last call. +func (b *ACMEIssuerStatusApplyConfiguration) WithLastRegisteredEmail(value string) *ACMEIssuerStatusApplyConfiguration { + b.LastRegisteredEmail = &value + return b +} + +// WithLastPrivateKeyHash sets the LastPrivateKeyHash field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the LastPrivateKeyHash field is set to the value of the last call. +func (b *ACMEIssuerStatusApplyConfiguration) WithLastPrivateKeyHash(value string) *ACMEIssuerStatusApplyConfiguration { + b.LastPrivateKeyHash = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/azuremanagedidentity.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/azuremanagedidentity.go new file mode 100644 index 0000000000..646e245d06 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/azuremanagedidentity.go @@ -0,0 +1,65 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// AzureManagedIdentityApplyConfiguration represents a declarative configuration of the AzureManagedIdentity type for use +// with apply. +// +// AzureManagedIdentity contains the configuration for Azure Workload Identity or Azure Managed Service Identity +// If the AZURE_FEDERATED_TOKEN_FILE environment variable is set, the Azure Workload Identity will be used. +// Otherwise, we fall back to using Azure Managed Service Identity. +type AzureManagedIdentityApplyConfiguration struct { + // client ID of the managed identity, cannot be used at the same time as resourceID + ClientID *string `json:"clientID,omitempty"` + // resource ID of the managed identity, cannot be used at the same time as clientID + // Cannot be used for Azure Managed Service Identity + ResourceID *string `json:"resourceID,omitempty"` + // tenant ID of the managed identity, cannot be used at the same time as resourceID + TenantID *string `json:"tenantID,omitempty"` +} + +// AzureManagedIdentityApplyConfiguration constructs a declarative configuration of the AzureManagedIdentity type for use with +// apply. +func AzureManagedIdentity() *AzureManagedIdentityApplyConfiguration { + return &AzureManagedIdentityApplyConfiguration{} +} + +// WithClientID sets the ClientID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ClientID field is set to the value of the last call. +func (b *AzureManagedIdentityApplyConfiguration) WithClientID(value string) *AzureManagedIdentityApplyConfiguration { + b.ClientID = &value + return b +} + +// WithResourceID sets the ResourceID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ResourceID field is set to the value of the last call. +func (b *AzureManagedIdentityApplyConfiguration) WithResourceID(value string) *AzureManagedIdentityApplyConfiguration { + b.ResourceID = &value + return b +} + +// WithTenantID sets the TenantID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the TenantID field is set to the value of the last call. +func (b *AzureManagedIdentityApplyConfiguration) WithTenantID(value string) *AzureManagedIdentityApplyConfiguration { + b.TenantID = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/certificatednsnameselector.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/certificatednsnameselector.go new file mode 100644 index 0000000000..6d5dadcf16 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/certificatednsnameselector.go @@ -0,0 +1,90 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// CertificateDNSNameSelectorApplyConfiguration represents a declarative configuration of the CertificateDNSNameSelector type for use +// with apply. +// +// CertificateDNSNameSelector selects certificates using a label selector, and +// can optionally select individual DNS names within those certificates. +// If both MatchLabels and DNSNames are empty, this selector will match all +// certificates and DNS names within them. +type CertificateDNSNameSelectorApplyConfiguration struct { + // A label selector that is used to refine the set of certificate's that + // this challenge solver will apply to. + MatchLabels map[string]string `json:"matchLabels,omitempty"` + // List of DNSNames that this solver will be used to solve. + // If specified and a match is found, a dnsNames selector will take + // precedence over a dnsZones selector. + // If multiple solvers match with the same dnsNames value, the solver + // with the most matching labels in matchLabels will be selected. + // If neither has more matches, the solver defined earlier in the list + // will be selected. + DNSNames []string `json:"dnsNames,omitempty"` + // List of DNSZones that this solver will be used to solve. + // The most specific DNS zone match specified here will take precedence + // over other DNS zone matches, so a solver specifying sys.example.com + // will be selected over one specifying example.com for the domain + // www.sys.example.com. + // If multiple solvers match with the same dnsZones value, the solver + // with the most matching labels in matchLabels will be selected. + // If neither has more matches, the solver defined earlier in the list + // will be selected. + DNSZones []string `json:"dnsZones,omitempty"` +} + +// CertificateDNSNameSelectorApplyConfiguration constructs a declarative configuration of the CertificateDNSNameSelector type for use with +// apply. +func CertificateDNSNameSelector() *CertificateDNSNameSelectorApplyConfiguration { + return &CertificateDNSNameSelectorApplyConfiguration{} +} + +// WithMatchLabels puts the entries into the MatchLabels field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the MatchLabels field, +// overwriting an existing map entries in MatchLabels field with the same key. +func (b *CertificateDNSNameSelectorApplyConfiguration) WithMatchLabels(entries map[string]string) *CertificateDNSNameSelectorApplyConfiguration { + if b.MatchLabels == nil && len(entries) > 0 { + b.MatchLabels = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.MatchLabels[k] = v + } + return b +} + +// WithDNSNames adds the given value to the DNSNames field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the DNSNames field. +func (b *CertificateDNSNameSelectorApplyConfiguration) WithDNSNames(values ...string) *CertificateDNSNameSelectorApplyConfiguration { + for i := range values { + b.DNSNames = append(b.DNSNames, values[i]) + } + return b +} + +// WithDNSZones adds the given value to the DNSZones field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the DNSZones field. +func (b *CertificateDNSNameSelectorApplyConfiguration) WithDNSZones(values ...string) *CertificateDNSNameSelectorApplyConfiguration { + for i := range values { + b.DNSZones = append(b.DNSZones, values[i]) + } + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/challenge.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/challenge.go new file mode 100644 index 0000000000..c3e0ee2c9a --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/challenge.go @@ -0,0 +1,289 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + acmev1 "github.com/cert-manager/cert-manager/pkg/apis/acme/v1" + internal "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/internal" + apismetav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + managedfields "k8s.io/apimachinery/pkg/util/managedfields" + metav1 "k8s.io/client-go/applyconfigurations/meta/v1" +) + +// ChallengeApplyConfiguration represents a declarative configuration of the Challenge type for use +// with apply. +// +// Challenge is a type to represent a Challenge request with an ACME server +type ChallengeApplyConfiguration struct { + metav1.TypeMetaApplyConfiguration `json:",inline"` + *metav1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"` + Spec *ChallengeSpecApplyConfiguration `json:"spec,omitempty"` + Status *ChallengeStatusApplyConfiguration `json:"status,omitempty"` +} + +// Challenge constructs a declarative configuration of the Challenge type for use with +// apply. +func Challenge(name, namespace string) *ChallengeApplyConfiguration { + b := &ChallengeApplyConfiguration{} + b.WithName(name) + b.WithNamespace(namespace) + b.WithKind("Challenge") + b.WithAPIVersion("acme.cert-manager.io/v1") + return b +} + +// ExtractChallengeFrom extracts the applied configuration owned by fieldManager from +// challenge for the specified subresource. Pass an empty string for subresource to extract +// the main resource. Common subresources include "status", "scale", etc. +// challenge must be a unmodified Challenge API object that was retrieved from the Kubernetes API. +// ExtractChallengeFrom provides a way to perform a extract/modify-in-place/apply workflow. +// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously +// applied if another fieldManager has updated or force applied any of the previously applied fields. +func ExtractChallengeFrom(challenge *acmev1.Challenge, fieldManager string, subresource string) (*ChallengeApplyConfiguration, error) { + b := &ChallengeApplyConfiguration{} + err := managedfields.ExtractInto(challenge, internal.Parser().Type("com.github.cert-manager.cert-manager.pkg.apis.acme.v1.Challenge"), fieldManager, b, subresource) + if err != nil { + return nil, err + } + b.WithName(challenge.Name) + b.WithNamespace(challenge.Namespace) + + b.WithKind("Challenge") + b.WithAPIVersion("acme.cert-manager.io/v1") + return b, nil +} + +// ExtractChallenge extracts the applied configuration owned by fieldManager from +// challenge. If no managedFields are found in challenge for fieldManager, a +// ChallengeApplyConfiguration is returned with only the Name, Namespace (if applicable), +// APIVersion and Kind populated. It is possible that no managed fields were found for because other +// field managers have taken ownership of all the fields previously owned by fieldManager, or because +// the fieldManager never owned fields any fields. +// challenge must be a unmodified Challenge API object that was retrieved from the Kubernetes API. +// ExtractChallenge provides a way to perform a extract/modify-in-place/apply workflow. +// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously +// applied if another fieldManager has updated or force applied any of the previously applied fields. +func ExtractChallenge(challenge *acmev1.Challenge, fieldManager string) (*ChallengeApplyConfiguration, error) { + return ExtractChallengeFrom(challenge, fieldManager, "") +} + +// ExtractChallengeStatus extracts the applied configuration owned by fieldManager from +// challenge for the status subresource. +func ExtractChallengeStatus(challenge *acmev1.Challenge, fieldManager string) (*ChallengeApplyConfiguration, error) { + return ExtractChallengeFrom(challenge, fieldManager, "status") +} + +func (b ChallengeApplyConfiguration) IsApplyConfiguration() {} + +// WithKind sets the Kind field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Kind field is set to the value of the last call. +func (b *ChallengeApplyConfiguration) WithKind(value string) *ChallengeApplyConfiguration { + b.TypeMetaApplyConfiguration.Kind = &value + return b +} + +// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the APIVersion field is set to the value of the last call. +func (b *ChallengeApplyConfiguration) WithAPIVersion(value string) *ChallengeApplyConfiguration { + b.TypeMetaApplyConfiguration.APIVersion = &value + return b +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *ChallengeApplyConfiguration) WithName(value string) *ChallengeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.Name = &value + return b +} + +// WithGenerateName sets the GenerateName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the GenerateName field is set to the value of the last call. +func (b *ChallengeApplyConfiguration) WithGenerateName(value string) *ChallengeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.GenerateName = &value + return b +} + +// WithNamespace sets the Namespace field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Namespace field is set to the value of the last call. +func (b *ChallengeApplyConfiguration) WithNamespace(value string) *ChallengeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.Namespace = &value + return b +} + +// WithUID sets the UID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the UID field is set to the value of the last call. +func (b *ChallengeApplyConfiguration) WithUID(value types.UID) *ChallengeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.UID = &value + return b +} + +// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ResourceVersion field is set to the value of the last call. +func (b *ChallengeApplyConfiguration) WithResourceVersion(value string) *ChallengeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.ResourceVersion = &value + return b +} + +// WithGeneration sets the Generation field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Generation field is set to the value of the last call. +func (b *ChallengeApplyConfiguration) WithGeneration(value int64) *ChallengeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.Generation = &value + return b +} + +// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CreationTimestamp field is set to the value of the last call. +func (b *ChallengeApplyConfiguration) WithCreationTimestamp(value apismetav1.Time) *ChallengeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.CreationTimestamp = &value + return b +} + +// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionTimestamp field is set to the value of the last call. +func (b *ChallengeApplyConfiguration) WithDeletionTimestamp(value apismetav1.Time) *ChallengeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value + return b +} + +// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call. +func (b *ChallengeApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *ChallengeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value + return b +} + +// WithLabels puts the entries into the Labels field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Labels field, +// overwriting an existing map entries in Labels field with the same key. +func (b *ChallengeApplyConfiguration) WithLabels(entries map[string]string) *ChallengeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 { + b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.ObjectMetaApplyConfiguration.Labels[k] = v + } + return b +} + +// WithAnnotations puts the entries into the Annotations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Annotations field, +// overwriting an existing map entries in Annotations field with the same key. +func (b *ChallengeApplyConfiguration) WithAnnotations(entries map[string]string) *ChallengeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 { + b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.ObjectMetaApplyConfiguration.Annotations[k] = v + } + return b +} + +// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the OwnerReferences field. +func (b *ChallengeApplyConfiguration) WithOwnerReferences(values ...*metav1.OwnerReferenceApplyConfiguration) *ChallengeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + if values[i] == nil { + panic("nil value passed to WithOwnerReferences") + } + b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i]) + } + return b +} + +// WithFinalizers adds the given value to the Finalizers field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Finalizers field. +func (b *ChallengeApplyConfiguration) WithFinalizers(values ...string) *ChallengeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i]) + } + return b +} + +func (b *ChallengeApplyConfiguration) ensureObjectMetaApplyConfigurationExists() { + if b.ObjectMetaApplyConfiguration == nil { + b.ObjectMetaApplyConfiguration = &metav1.ObjectMetaApplyConfiguration{} + } +} + +// WithSpec sets the Spec field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Spec field is set to the value of the last call. +func (b *ChallengeApplyConfiguration) WithSpec(value *ChallengeSpecApplyConfiguration) *ChallengeApplyConfiguration { + b.Spec = value + return b +} + +// WithStatus sets the Status field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Status field is set to the value of the last call. +func (b *ChallengeApplyConfiguration) WithStatus(value *ChallengeStatusApplyConfiguration) *ChallengeApplyConfiguration { + b.Status = value + return b +} + +// GetKind retrieves the value of the Kind field in the declarative configuration. +func (b *ChallengeApplyConfiguration) GetKind() *string { + return b.TypeMetaApplyConfiguration.Kind +} + +// GetAPIVersion retrieves the value of the APIVersion field in the declarative configuration. +func (b *ChallengeApplyConfiguration) GetAPIVersion() *string { + return b.TypeMetaApplyConfiguration.APIVersion +} + +// GetName retrieves the value of the Name field in the declarative configuration. +func (b *ChallengeApplyConfiguration) GetName() *string { + b.ensureObjectMetaApplyConfigurationExists() + return b.ObjectMetaApplyConfiguration.Name +} + +// GetNamespace retrieves the value of the Namespace field in the declarative configuration. +func (b *ChallengeApplyConfiguration) GetNamespace() *string { + b.ensureObjectMetaApplyConfigurationExists() + return b.ObjectMetaApplyConfiguration.Namespace +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/challengespec.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/challengespec.go new file mode 100644 index 0000000000..7b5e0675ad --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/challengespec.go @@ -0,0 +1,143 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + acmev1 "github.com/cert-manager/cert-manager/pkg/apis/acme/v1" + metav1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1" +) + +// ChallengeSpecApplyConfiguration represents a declarative configuration of the ChallengeSpec type for use +// with apply. +type ChallengeSpecApplyConfiguration struct { + // The URL of the ACME Challenge resource for this challenge. + // This can be used to lookup details about the status of this challenge. + URL *string `json:"url,omitempty"` + // The URL to the ACME Authorization resource that this + // challenge is a part of. + AuthorizationURL *string `json:"authorizationURL,omitempty"` + // dnsName is the identifier that this challenge is for, e.g., example.com. + // If the requested DNSName is a 'wildcard', this field MUST be set to the + // non-wildcard domain, e.g., for `*.example.com`, it must be `example.com`. + DNSName *string `json:"dnsName,omitempty"` + // wildcard will be true if this challenge is for a wildcard identifier, + // for example '*.example.com'. + Wildcard *bool `json:"wildcard,omitempty"` + // The type of ACME challenge this resource represents. + // One of "HTTP-01" or "DNS-01". + Type *acmev1.ACMEChallengeType `json:"type,omitempty"` + // The ACME challenge token for this challenge. + // This is the raw value returned from the ACME server. + Token *string `json:"token,omitempty"` + // The ACME challenge key for this challenge + // For HTTP01 challenges, this is the value that must be responded with to + // complete the HTTP01 challenge in the format: + // `.`. + // For DNS01 challenges, this is the base64 encoded SHA256 sum of the + // `.` + // text that must be set as the TXT record content. + Key *string `json:"key,omitempty"` + // Contains the domain solving configuration that should be used to + // solve this challenge resource. + Solver *ACMEChallengeSolverApplyConfiguration `json:"solver,omitempty"` + // References a properly configured ACME-type Issuer which should + // be used to create this Challenge. + // If the Issuer does not exist, processing will be retried. + // If the Issuer is not an 'ACME' Issuer, an error will be returned and the + // Challenge will be marked as failed. + IssuerRef *metav1.IssuerReferenceApplyConfiguration `json:"issuerRef,omitempty"` +} + +// ChallengeSpecApplyConfiguration constructs a declarative configuration of the ChallengeSpec type for use with +// apply. +func ChallengeSpec() *ChallengeSpecApplyConfiguration { + return &ChallengeSpecApplyConfiguration{} +} + +// WithURL sets the URL field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the URL field is set to the value of the last call. +func (b *ChallengeSpecApplyConfiguration) WithURL(value string) *ChallengeSpecApplyConfiguration { + b.URL = &value + return b +} + +// WithAuthorizationURL sets the AuthorizationURL field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the AuthorizationURL field is set to the value of the last call. +func (b *ChallengeSpecApplyConfiguration) WithAuthorizationURL(value string) *ChallengeSpecApplyConfiguration { + b.AuthorizationURL = &value + return b +} + +// WithDNSName sets the DNSName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DNSName field is set to the value of the last call. +func (b *ChallengeSpecApplyConfiguration) WithDNSName(value string) *ChallengeSpecApplyConfiguration { + b.DNSName = &value + return b +} + +// WithWildcard sets the Wildcard field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Wildcard field is set to the value of the last call. +func (b *ChallengeSpecApplyConfiguration) WithWildcard(value bool) *ChallengeSpecApplyConfiguration { + b.Wildcard = &value + return b +} + +// WithType sets the Type field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Type field is set to the value of the last call. +func (b *ChallengeSpecApplyConfiguration) WithType(value acmev1.ACMEChallengeType) *ChallengeSpecApplyConfiguration { + b.Type = &value + return b +} + +// WithToken sets the Token field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Token field is set to the value of the last call. +func (b *ChallengeSpecApplyConfiguration) WithToken(value string) *ChallengeSpecApplyConfiguration { + b.Token = &value + return b +} + +// WithKey sets the Key field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Key field is set to the value of the last call. +func (b *ChallengeSpecApplyConfiguration) WithKey(value string) *ChallengeSpecApplyConfiguration { + b.Key = &value + return b +} + +// WithSolver sets the Solver field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Solver field is set to the value of the last call. +func (b *ChallengeSpecApplyConfiguration) WithSolver(value *ACMEChallengeSolverApplyConfiguration) *ChallengeSpecApplyConfiguration { + b.Solver = value + return b +} + +// WithIssuerRef sets the IssuerRef field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the IssuerRef field is set to the value of the last call. +func (b *ChallengeSpecApplyConfiguration) WithIssuerRef(value *metav1.IssuerReferenceApplyConfiguration) *ChallengeSpecApplyConfiguration { + b.IssuerRef = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/challengestatus.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/challengestatus.go new file mode 100644 index 0000000000..89ebe74e93 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/challengestatus.go @@ -0,0 +1,86 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + acmev1 "github.com/cert-manager/cert-manager/pkg/apis/acme/v1" +) + +// ChallengeStatusApplyConfiguration represents a declarative configuration of the ChallengeStatus type for use +// with apply. +type ChallengeStatusApplyConfiguration struct { + // Used to denote whether this challenge should be processed or not. + // This field will only be set to true by the 'scheduling' component. + // It will only be set to false by the 'challenges' controller, after the + // challenge has reached a final state or timed out. + // If this field is set to false, the challenge controller will not take + // any more action. + Processing *bool `json:"processing,omitempty"` + // presented will be set to true if the challenge values for this challenge + // are currently 'presented'. + // This *does not* imply the self check is passing. Only that the values + // have been 'submitted' for the appropriate challenge mechanism (i.e. the + // DNS01 TXT record has been presented, or the HTTP01 configuration has been + // configured). + Presented *bool `json:"presented,omitempty"` + // Contains human readable information on why the Challenge is in the + // current state. + Reason *string `json:"reason,omitempty"` + // Contains the current 'state' of the challenge. + // If not set, the state of the challenge is unknown. + State *acmev1.State `json:"state,omitempty"` +} + +// ChallengeStatusApplyConfiguration constructs a declarative configuration of the ChallengeStatus type for use with +// apply. +func ChallengeStatus() *ChallengeStatusApplyConfiguration { + return &ChallengeStatusApplyConfiguration{} +} + +// WithProcessing sets the Processing field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Processing field is set to the value of the last call. +func (b *ChallengeStatusApplyConfiguration) WithProcessing(value bool) *ChallengeStatusApplyConfiguration { + b.Processing = &value + return b +} + +// WithPresented sets the Presented field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Presented field is set to the value of the last call. +func (b *ChallengeStatusApplyConfiguration) WithPresented(value bool) *ChallengeStatusApplyConfiguration { + b.Presented = &value + return b +} + +// WithReason sets the Reason field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Reason field is set to the value of the last call. +func (b *ChallengeStatusApplyConfiguration) WithReason(value string) *ChallengeStatusApplyConfiguration { + b.Reason = &value + return b +} + +// WithState sets the State field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the State field is set to the value of the last call. +func (b *ChallengeStatusApplyConfiguration) WithState(value acmev1.State) *ChallengeStatusApplyConfiguration { + b.State = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/order.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/order.go new file mode 100644 index 0000000000..ddc9fb84da --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/order.go @@ -0,0 +1,289 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + acmev1 "github.com/cert-manager/cert-manager/pkg/apis/acme/v1" + internal "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/internal" + apismetav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + managedfields "k8s.io/apimachinery/pkg/util/managedfields" + metav1 "k8s.io/client-go/applyconfigurations/meta/v1" +) + +// OrderApplyConfiguration represents a declarative configuration of the Order type for use +// with apply. +// +// Order is a type to represent an Order with an ACME server +type OrderApplyConfiguration struct { + metav1.TypeMetaApplyConfiguration `json:",inline"` + *metav1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"` + Spec *OrderSpecApplyConfiguration `json:"spec,omitempty"` + Status *OrderStatusApplyConfiguration `json:"status,omitempty"` +} + +// Order constructs a declarative configuration of the Order type for use with +// apply. +func Order(name, namespace string) *OrderApplyConfiguration { + b := &OrderApplyConfiguration{} + b.WithName(name) + b.WithNamespace(namespace) + b.WithKind("Order") + b.WithAPIVersion("acme.cert-manager.io/v1") + return b +} + +// ExtractOrderFrom extracts the applied configuration owned by fieldManager from +// order for the specified subresource. Pass an empty string for subresource to extract +// the main resource. Common subresources include "status", "scale", etc. +// order must be a unmodified Order API object that was retrieved from the Kubernetes API. +// ExtractOrderFrom provides a way to perform a extract/modify-in-place/apply workflow. +// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously +// applied if another fieldManager has updated or force applied any of the previously applied fields. +func ExtractOrderFrom(order *acmev1.Order, fieldManager string, subresource string) (*OrderApplyConfiguration, error) { + b := &OrderApplyConfiguration{} + err := managedfields.ExtractInto(order, internal.Parser().Type("com.github.cert-manager.cert-manager.pkg.apis.acme.v1.Order"), fieldManager, b, subresource) + if err != nil { + return nil, err + } + b.WithName(order.Name) + b.WithNamespace(order.Namespace) + + b.WithKind("Order") + b.WithAPIVersion("acme.cert-manager.io/v1") + return b, nil +} + +// ExtractOrder extracts the applied configuration owned by fieldManager from +// order. If no managedFields are found in order for fieldManager, a +// OrderApplyConfiguration is returned with only the Name, Namespace (if applicable), +// APIVersion and Kind populated. It is possible that no managed fields were found for because other +// field managers have taken ownership of all the fields previously owned by fieldManager, or because +// the fieldManager never owned fields any fields. +// order must be a unmodified Order API object that was retrieved from the Kubernetes API. +// ExtractOrder provides a way to perform a extract/modify-in-place/apply workflow. +// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously +// applied if another fieldManager has updated or force applied any of the previously applied fields. +func ExtractOrder(order *acmev1.Order, fieldManager string) (*OrderApplyConfiguration, error) { + return ExtractOrderFrom(order, fieldManager, "") +} + +// ExtractOrderStatus extracts the applied configuration owned by fieldManager from +// order for the status subresource. +func ExtractOrderStatus(order *acmev1.Order, fieldManager string) (*OrderApplyConfiguration, error) { + return ExtractOrderFrom(order, fieldManager, "status") +} + +func (b OrderApplyConfiguration) IsApplyConfiguration() {} + +// WithKind sets the Kind field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Kind field is set to the value of the last call. +func (b *OrderApplyConfiguration) WithKind(value string) *OrderApplyConfiguration { + b.TypeMetaApplyConfiguration.Kind = &value + return b +} + +// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the APIVersion field is set to the value of the last call. +func (b *OrderApplyConfiguration) WithAPIVersion(value string) *OrderApplyConfiguration { + b.TypeMetaApplyConfiguration.APIVersion = &value + return b +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *OrderApplyConfiguration) WithName(value string) *OrderApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.Name = &value + return b +} + +// WithGenerateName sets the GenerateName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the GenerateName field is set to the value of the last call. +func (b *OrderApplyConfiguration) WithGenerateName(value string) *OrderApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.GenerateName = &value + return b +} + +// WithNamespace sets the Namespace field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Namespace field is set to the value of the last call. +func (b *OrderApplyConfiguration) WithNamespace(value string) *OrderApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.Namespace = &value + return b +} + +// WithUID sets the UID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the UID field is set to the value of the last call. +func (b *OrderApplyConfiguration) WithUID(value types.UID) *OrderApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.UID = &value + return b +} + +// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ResourceVersion field is set to the value of the last call. +func (b *OrderApplyConfiguration) WithResourceVersion(value string) *OrderApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.ResourceVersion = &value + return b +} + +// WithGeneration sets the Generation field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Generation field is set to the value of the last call. +func (b *OrderApplyConfiguration) WithGeneration(value int64) *OrderApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.Generation = &value + return b +} + +// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CreationTimestamp field is set to the value of the last call. +func (b *OrderApplyConfiguration) WithCreationTimestamp(value apismetav1.Time) *OrderApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.CreationTimestamp = &value + return b +} + +// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionTimestamp field is set to the value of the last call. +func (b *OrderApplyConfiguration) WithDeletionTimestamp(value apismetav1.Time) *OrderApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value + return b +} + +// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call. +func (b *OrderApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *OrderApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value + return b +} + +// WithLabels puts the entries into the Labels field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Labels field, +// overwriting an existing map entries in Labels field with the same key. +func (b *OrderApplyConfiguration) WithLabels(entries map[string]string) *OrderApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 { + b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.ObjectMetaApplyConfiguration.Labels[k] = v + } + return b +} + +// WithAnnotations puts the entries into the Annotations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Annotations field, +// overwriting an existing map entries in Annotations field with the same key. +func (b *OrderApplyConfiguration) WithAnnotations(entries map[string]string) *OrderApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 { + b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.ObjectMetaApplyConfiguration.Annotations[k] = v + } + return b +} + +// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the OwnerReferences field. +func (b *OrderApplyConfiguration) WithOwnerReferences(values ...*metav1.OwnerReferenceApplyConfiguration) *OrderApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + if values[i] == nil { + panic("nil value passed to WithOwnerReferences") + } + b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i]) + } + return b +} + +// WithFinalizers adds the given value to the Finalizers field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Finalizers field. +func (b *OrderApplyConfiguration) WithFinalizers(values ...string) *OrderApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i]) + } + return b +} + +func (b *OrderApplyConfiguration) ensureObjectMetaApplyConfigurationExists() { + if b.ObjectMetaApplyConfiguration == nil { + b.ObjectMetaApplyConfiguration = &metav1.ObjectMetaApplyConfiguration{} + } +} + +// WithSpec sets the Spec field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Spec field is set to the value of the last call. +func (b *OrderApplyConfiguration) WithSpec(value *OrderSpecApplyConfiguration) *OrderApplyConfiguration { + b.Spec = value + return b +} + +// WithStatus sets the Status field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Status field is set to the value of the last call. +func (b *OrderApplyConfiguration) WithStatus(value *OrderStatusApplyConfiguration) *OrderApplyConfiguration { + b.Status = value + return b +} + +// GetKind retrieves the value of the Kind field in the declarative configuration. +func (b *OrderApplyConfiguration) GetKind() *string { + return b.TypeMetaApplyConfiguration.Kind +} + +// GetAPIVersion retrieves the value of the APIVersion field in the declarative configuration. +func (b *OrderApplyConfiguration) GetAPIVersion() *string { + return b.TypeMetaApplyConfiguration.APIVersion +} + +// GetName retrieves the value of the Name field in the declarative configuration. +func (b *OrderApplyConfiguration) GetName() *string { + b.ensureObjectMetaApplyConfigurationExists() + return b.ObjectMetaApplyConfiguration.Name +} + +// GetNamespace retrieves the value of the Namespace field in the declarative configuration. +func (b *OrderApplyConfiguration) GetNamespace() *string { + b.ensureObjectMetaApplyConfigurationExists() + return b.ObjectMetaApplyConfiguration.Namespace +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/orderspec.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/orderspec.go new file mode 100644 index 0000000000..862f7810e4 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/orderspec.go @@ -0,0 +1,125 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1" + apismetav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// OrderSpecApplyConfiguration represents a declarative configuration of the OrderSpec type for use +// with apply. +type OrderSpecApplyConfiguration struct { + // Certificate signing request bytes in DER encoding. + // This will be used when finalizing the order. + // This field must be set on the order. + Request []byte `json:"request,omitempty"` + // IssuerRef references a properly configured ACME-type Issuer which should + // be used to create this Order. + // If the Issuer does not exist, processing will be retried. + // If the Issuer is not an 'ACME' Issuer, an error will be returned and the + // Order will be marked as failed. + IssuerRef *metav1.IssuerReferenceApplyConfiguration `json:"issuerRef,omitempty"` + // CommonName is the common name as specified on the DER encoded CSR. + // If specified, this value must also be present in `dnsNames` or `ipAddresses`. + // This field must match the corresponding field on the DER encoded CSR. + CommonName *string `json:"commonName,omitempty"` + // DNSNames is a list of DNS names that should be included as part of the Order + // validation process. + // This field must match the corresponding field on the DER encoded CSR. + DNSNames []string `json:"dnsNames,omitempty"` + // IPAddresses is a list of IP addresses that should be included as part of the Order + // validation process. + // This field must match the corresponding field on the DER encoded CSR. + IPAddresses []string `json:"ipAddresses,omitempty"` + // Duration is the duration for the not after date for the requested certificate. + // this is set on order creation as pe the ACME spec. + Duration *apismetav1.Duration `json:"duration,omitempty"` + // Profile allows requesting a certificate profile from the ACME server. + // Supported profiles are listed by the server's ACME directory URL. + Profile *string `json:"profile,omitempty"` +} + +// OrderSpecApplyConfiguration constructs a declarative configuration of the OrderSpec type for use with +// apply. +func OrderSpec() *OrderSpecApplyConfiguration { + return &OrderSpecApplyConfiguration{} +} + +// WithRequest adds the given value to the Request field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Request field. +func (b *OrderSpecApplyConfiguration) WithRequest(values ...byte) *OrderSpecApplyConfiguration { + for i := range values { + b.Request = append(b.Request, values[i]) + } + return b +} + +// WithIssuerRef sets the IssuerRef field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the IssuerRef field is set to the value of the last call. +func (b *OrderSpecApplyConfiguration) WithIssuerRef(value *metav1.IssuerReferenceApplyConfiguration) *OrderSpecApplyConfiguration { + b.IssuerRef = value + return b +} + +// WithCommonName sets the CommonName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CommonName field is set to the value of the last call. +func (b *OrderSpecApplyConfiguration) WithCommonName(value string) *OrderSpecApplyConfiguration { + b.CommonName = &value + return b +} + +// WithDNSNames adds the given value to the DNSNames field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the DNSNames field. +func (b *OrderSpecApplyConfiguration) WithDNSNames(values ...string) *OrderSpecApplyConfiguration { + for i := range values { + b.DNSNames = append(b.DNSNames, values[i]) + } + return b +} + +// WithIPAddresses adds the given value to the IPAddresses field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the IPAddresses field. +func (b *OrderSpecApplyConfiguration) WithIPAddresses(values ...string) *OrderSpecApplyConfiguration { + for i := range values { + b.IPAddresses = append(b.IPAddresses, values[i]) + } + return b +} + +// WithDuration sets the Duration field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Duration field is set to the value of the last call. +func (b *OrderSpecApplyConfiguration) WithDuration(value apismetav1.Duration) *OrderSpecApplyConfiguration { + b.Duration = &value + return b +} + +// WithProfile sets the Profile field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Profile field is set to the value of the last call. +func (b *OrderSpecApplyConfiguration) WithProfile(value string) *OrderSpecApplyConfiguration { + b.Profile = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/orderstatus.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/orderstatus.go new file mode 100644 index 0000000000..c61f8c843c --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/orderstatus.go @@ -0,0 +1,124 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + acmev1 "github.com/cert-manager/cert-manager/pkg/apis/acme/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// OrderStatusApplyConfiguration represents a declarative configuration of the OrderStatus type for use +// with apply. +type OrderStatusApplyConfiguration struct { + // URL of the Order. + // This will initially be empty when the resource is first created. + // The Order controller will populate this field when the Order is first processed. + // This field will be immutable after it is initially set. + URL *string `json:"url,omitempty"` + // FinalizeURL of the Order. + // This is used to obtain certificates for this order once it has been completed. + FinalizeURL *string `json:"finalizeURL,omitempty"` + // Authorizations contains data returned from the ACME server on what + // authorizations must be completed in order to validate the DNS names + // specified on the Order. + Authorizations []ACMEAuthorizationApplyConfiguration `json:"authorizations,omitempty"` + // Certificate is a copy of the PEM encoded certificate for this Order. + // This field will be populated after the order has been successfully + // finalized with the ACME server, and the order has transitioned to the + // 'valid' state. + Certificate []byte `json:"certificate,omitempty"` + // State contains the current state of this Order resource. + // States 'success' and 'expired' are 'final' + State *acmev1.State `json:"state,omitempty"` + // Reason optionally provides more information about a why the order is in + // the current state. + Reason *string `json:"reason,omitempty"` + // FailureTime stores the time that this order failed. + // This is used to influence garbage collection and back-off. + FailureTime *metav1.Time `json:"failureTime,omitempty"` +} + +// OrderStatusApplyConfiguration constructs a declarative configuration of the OrderStatus type for use with +// apply. +func OrderStatus() *OrderStatusApplyConfiguration { + return &OrderStatusApplyConfiguration{} +} + +// WithURL sets the URL field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the URL field is set to the value of the last call. +func (b *OrderStatusApplyConfiguration) WithURL(value string) *OrderStatusApplyConfiguration { + b.URL = &value + return b +} + +// WithFinalizeURL sets the FinalizeURL field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the FinalizeURL field is set to the value of the last call. +func (b *OrderStatusApplyConfiguration) WithFinalizeURL(value string) *OrderStatusApplyConfiguration { + b.FinalizeURL = &value + return b +} + +// WithAuthorizations adds the given value to the Authorizations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Authorizations field. +func (b *OrderStatusApplyConfiguration) WithAuthorizations(values ...*ACMEAuthorizationApplyConfiguration) *OrderStatusApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithAuthorizations") + } + b.Authorizations = append(b.Authorizations, *values[i]) + } + return b +} + +// WithCertificate adds the given value to the Certificate field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Certificate field. +func (b *OrderStatusApplyConfiguration) WithCertificate(values ...byte) *OrderStatusApplyConfiguration { + for i := range values { + b.Certificate = append(b.Certificate, values[i]) + } + return b +} + +// WithState sets the State field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the State field is set to the value of the last call. +func (b *OrderStatusApplyConfiguration) WithState(value acmev1.State) *OrderStatusApplyConfiguration { + b.State = &value + return b +} + +// WithReason sets the Reason field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Reason field is set to the value of the last call. +func (b *OrderStatusApplyConfiguration) WithReason(value string) *OrderStatusApplyConfiguration { + b.Reason = &value + return b +} + +// WithFailureTime sets the FailureTime field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the FailureTime field is set to the value of the last call. +func (b *OrderStatusApplyConfiguration) WithFailureTime(value metav1.Time) *OrderStatusApplyConfiguration { + b.FailureTime = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/route53auth.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/route53auth.go new file mode 100644 index 0000000000..8b209454ee --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/route53auth.go @@ -0,0 +1,43 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// Route53AuthApplyConfiguration represents a declarative configuration of the Route53Auth type for use +// with apply. +// +// Route53Auth is configuration used to authenticate with a Route53. +type Route53AuthApplyConfiguration struct { + // Kubernetes authenticates with Route53 using AssumeRoleWithWebIdentity + // by passing a bound ServiceAccount token. + Kubernetes *Route53KubernetesAuthApplyConfiguration `json:"kubernetes,omitempty"` +} + +// Route53AuthApplyConfiguration constructs a declarative configuration of the Route53Auth type for use with +// apply. +func Route53Auth() *Route53AuthApplyConfiguration { + return &Route53AuthApplyConfiguration{} +} + +// WithKubernetes sets the Kubernetes field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Kubernetes field is set to the value of the last call. +func (b *Route53AuthApplyConfiguration) WithKubernetes(value *Route53KubernetesAuthApplyConfiguration) *Route53AuthApplyConfiguration { + b.Kubernetes = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/route53kubernetesauth.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/route53kubernetesauth.go new file mode 100644 index 0000000000..50704ec01d --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/route53kubernetesauth.go @@ -0,0 +1,45 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// Route53KubernetesAuthApplyConfiguration represents a declarative configuration of the Route53KubernetesAuth type for use +// with apply. +// +// Route53KubernetesAuth is a configuration to authenticate against Route53 +// using a bound Kubernetes ServiceAccount token. +type Route53KubernetesAuthApplyConfiguration struct { + // A reference to a service account that will be used to request a bound + // token (also known as "projected token"). To use this field, you must + // configure an RBAC rule to let cert-manager request a token. + ServiceAccountRef *ServiceAccountRefApplyConfiguration `json:"serviceAccountRef,omitempty"` +} + +// Route53KubernetesAuthApplyConfiguration constructs a declarative configuration of the Route53KubernetesAuth type for use with +// apply. +func Route53KubernetesAuth() *Route53KubernetesAuthApplyConfiguration { + return &Route53KubernetesAuthApplyConfiguration{} +} + +// WithServiceAccountRef sets the ServiceAccountRef field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ServiceAccountRef field is set to the value of the last call. +func (b *Route53KubernetesAuthApplyConfiguration) WithServiceAccountRef(value *ServiceAccountRefApplyConfiguration) *Route53KubernetesAuthApplyConfiguration { + b.ServiceAccountRef = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/serviceaccountref.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/serviceaccountref.go new file mode 100644 index 0000000000..0866c70022 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1/serviceaccountref.go @@ -0,0 +1,58 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// ServiceAccountRefApplyConfiguration represents a declarative configuration of the ServiceAccountRef type for use +// with apply. +// +// ServiceAccountRef is a service account used by cert-manager to request a +// token. The expiration of the token is also set by cert-manager to 10 minutes. +type ServiceAccountRefApplyConfiguration struct { + // Name of the ServiceAccount used to request a token. + Name *string `json:"name,omitempty"` + // TokenAudiences is an optional list of audiences to include in the + // token passed to AWS. The default token consisting of the issuer's namespace + // and name is always included. + // If unset the audience defaults to `sts.amazonaws.com`. + TokenAudiences []string `json:"audiences,omitempty"` +} + +// ServiceAccountRefApplyConfiguration constructs a declarative configuration of the ServiceAccountRef type for use with +// apply. +func ServiceAccountRef() *ServiceAccountRefApplyConfiguration { + return &ServiceAccountRefApplyConfiguration{} +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *ServiceAccountRefApplyConfiguration) WithName(value string) *ServiceAccountRefApplyConfiguration { + b.Name = &value + return b +} + +// WithTokenAudiences adds the given value to the TokenAudiences field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the TokenAudiences field. +func (b *ServiceAccountRefApplyConfiguration) WithTokenAudiences(values ...string) *ServiceAccountRefApplyConfiguration { + for i := range values { + b.TokenAudiences = append(b.TokenAudiences, values[i]) + } + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/caissuer.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/caissuer.go new file mode 100644 index 0000000000..8a9a7e4c0b --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/caissuer.go @@ -0,0 +1,85 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// CAIssuerApplyConfiguration represents a declarative configuration of the CAIssuer type for use +// with apply. +type CAIssuerApplyConfiguration struct { + // SecretName is the name of the secret used to sign Certificates issued + // by this Issuer. + SecretName *string `json:"secretName,omitempty"` + // The CRL distribution points is an X.509 v3 certificate extension which identifies + // the location of the CRL from which the revocation of this certificate can be checked. + // If not set, certificates will be issued without distribution points set. + CRLDistributionPoints []string `json:"crlDistributionPoints,omitempty"` + // The OCSP server list is an X.509 v3 extension that defines a list of + // URLs of OCSP responders. The OCSP responders can be queried for the + // revocation status of an issued certificate. If not set, the + // certificate will be issued with no OCSP servers set. For example, an + // OCSP server URL could be "http://ocsp.int-x3.letsencrypt.org". + OCSPServers []string `json:"ocspServers,omitempty"` + // IssuingCertificateURLs is a list of URLs which this issuer should embed into certificates + // it creates. See https://www.rfc-editor.org/rfc/rfc5280#section-4.2.2.1 for more details. + // As an example, such a URL might be "http://ca.domain.com/ca.crt". + IssuingCertificateURLs []string `json:"issuingCertificateURLs,omitempty"` +} + +// CAIssuerApplyConfiguration constructs a declarative configuration of the CAIssuer type for use with +// apply. +func CAIssuer() *CAIssuerApplyConfiguration { + return &CAIssuerApplyConfiguration{} +} + +// WithSecretName sets the SecretName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the SecretName field is set to the value of the last call. +func (b *CAIssuerApplyConfiguration) WithSecretName(value string) *CAIssuerApplyConfiguration { + b.SecretName = &value + return b +} + +// WithCRLDistributionPoints adds the given value to the CRLDistributionPoints field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the CRLDistributionPoints field. +func (b *CAIssuerApplyConfiguration) WithCRLDistributionPoints(values ...string) *CAIssuerApplyConfiguration { + for i := range values { + b.CRLDistributionPoints = append(b.CRLDistributionPoints, values[i]) + } + return b +} + +// WithOCSPServers adds the given value to the OCSPServers field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the OCSPServers field. +func (b *CAIssuerApplyConfiguration) WithOCSPServers(values ...string) *CAIssuerApplyConfiguration { + for i := range values { + b.OCSPServers = append(b.OCSPServers, values[i]) + } + return b +} + +// WithIssuingCertificateURLs adds the given value to the IssuingCertificateURLs field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the IssuingCertificateURLs field. +func (b *CAIssuerApplyConfiguration) WithIssuingCertificateURLs(values ...string) *CAIssuerApplyConfiguration { + for i := range values { + b.IssuingCertificateURLs = append(b.IssuingCertificateURLs, values[i]) + } + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificate.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificate.go new file mode 100644 index 0000000000..4e0b4ff7b9 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificate.go @@ -0,0 +1,300 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + certmanagerv1 "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1" + internal "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/internal" + apismetav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + managedfields "k8s.io/apimachinery/pkg/util/managedfields" + metav1 "k8s.io/client-go/applyconfigurations/meta/v1" +) + +// CertificateApplyConfiguration represents a declarative configuration of the Certificate type for use +// with apply. +// +// A Certificate resource should be created to ensure an up to date and signed +// X.509 certificate is stored in the Kubernetes Secret resource named in `spec.secretName`. +// +// The stored certificate will be renewed before it expires (as configured by `spec.renewBefore`). +type CertificateApplyConfiguration struct { + metav1.TypeMetaApplyConfiguration `json:",inline"` + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + *metav1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"` + // Specification of the desired state of the Certificate resource. + // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + Spec *CertificateSpecApplyConfiguration `json:"spec,omitempty"` + // Status of the Certificate. + // This is set and managed automatically. + // Read-only. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + Status *CertificateStatusApplyConfiguration `json:"status,omitempty"` +} + +// Certificate constructs a declarative configuration of the Certificate type for use with +// apply. +func Certificate(name, namespace string) *CertificateApplyConfiguration { + b := &CertificateApplyConfiguration{} + b.WithName(name) + b.WithNamespace(namespace) + b.WithKind("Certificate") + b.WithAPIVersion("cert-manager.io/v1") + return b +} + +// ExtractCertificateFrom extracts the applied configuration owned by fieldManager from +// certificate for the specified subresource. Pass an empty string for subresource to extract +// the main resource. Common subresources include "status", "scale", etc. +// certificate must be a unmodified Certificate API object that was retrieved from the Kubernetes API. +// ExtractCertificateFrom provides a way to perform a extract/modify-in-place/apply workflow. +// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously +// applied if another fieldManager has updated or force applied any of the previously applied fields. +func ExtractCertificateFrom(certificate *certmanagerv1.Certificate, fieldManager string, subresource string) (*CertificateApplyConfiguration, error) { + b := &CertificateApplyConfiguration{} + err := managedfields.ExtractInto(certificate, internal.Parser().Type("com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.Certificate"), fieldManager, b, subresource) + if err != nil { + return nil, err + } + b.WithName(certificate.Name) + b.WithNamespace(certificate.Namespace) + + b.WithKind("Certificate") + b.WithAPIVersion("cert-manager.io/v1") + return b, nil +} + +// ExtractCertificate extracts the applied configuration owned by fieldManager from +// certificate. If no managedFields are found in certificate for fieldManager, a +// CertificateApplyConfiguration is returned with only the Name, Namespace (if applicable), +// APIVersion and Kind populated. It is possible that no managed fields were found for because other +// field managers have taken ownership of all the fields previously owned by fieldManager, or because +// the fieldManager never owned fields any fields. +// certificate must be a unmodified Certificate API object that was retrieved from the Kubernetes API. +// ExtractCertificate provides a way to perform a extract/modify-in-place/apply workflow. +// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously +// applied if another fieldManager has updated or force applied any of the previously applied fields. +func ExtractCertificate(certificate *certmanagerv1.Certificate, fieldManager string) (*CertificateApplyConfiguration, error) { + return ExtractCertificateFrom(certificate, fieldManager, "") +} + +// ExtractCertificateStatus extracts the applied configuration owned by fieldManager from +// certificate for the status subresource. +func ExtractCertificateStatus(certificate *certmanagerv1.Certificate, fieldManager string) (*CertificateApplyConfiguration, error) { + return ExtractCertificateFrom(certificate, fieldManager, "status") +} + +func (b CertificateApplyConfiguration) IsApplyConfiguration() {} + +// WithKind sets the Kind field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Kind field is set to the value of the last call. +func (b *CertificateApplyConfiguration) WithKind(value string) *CertificateApplyConfiguration { + b.TypeMetaApplyConfiguration.Kind = &value + return b +} + +// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the APIVersion field is set to the value of the last call. +func (b *CertificateApplyConfiguration) WithAPIVersion(value string) *CertificateApplyConfiguration { + b.TypeMetaApplyConfiguration.APIVersion = &value + return b +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *CertificateApplyConfiguration) WithName(value string) *CertificateApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.Name = &value + return b +} + +// WithGenerateName sets the GenerateName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the GenerateName field is set to the value of the last call. +func (b *CertificateApplyConfiguration) WithGenerateName(value string) *CertificateApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.GenerateName = &value + return b +} + +// WithNamespace sets the Namespace field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Namespace field is set to the value of the last call. +func (b *CertificateApplyConfiguration) WithNamespace(value string) *CertificateApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.Namespace = &value + return b +} + +// WithUID sets the UID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the UID field is set to the value of the last call. +func (b *CertificateApplyConfiguration) WithUID(value types.UID) *CertificateApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.UID = &value + return b +} + +// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ResourceVersion field is set to the value of the last call. +func (b *CertificateApplyConfiguration) WithResourceVersion(value string) *CertificateApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.ResourceVersion = &value + return b +} + +// WithGeneration sets the Generation field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Generation field is set to the value of the last call. +func (b *CertificateApplyConfiguration) WithGeneration(value int64) *CertificateApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.Generation = &value + return b +} + +// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CreationTimestamp field is set to the value of the last call. +func (b *CertificateApplyConfiguration) WithCreationTimestamp(value apismetav1.Time) *CertificateApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.CreationTimestamp = &value + return b +} + +// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionTimestamp field is set to the value of the last call. +func (b *CertificateApplyConfiguration) WithDeletionTimestamp(value apismetav1.Time) *CertificateApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value + return b +} + +// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call. +func (b *CertificateApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *CertificateApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value + return b +} + +// WithLabels puts the entries into the Labels field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Labels field, +// overwriting an existing map entries in Labels field with the same key. +func (b *CertificateApplyConfiguration) WithLabels(entries map[string]string) *CertificateApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 { + b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.ObjectMetaApplyConfiguration.Labels[k] = v + } + return b +} + +// WithAnnotations puts the entries into the Annotations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Annotations field, +// overwriting an existing map entries in Annotations field with the same key. +func (b *CertificateApplyConfiguration) WithAnnotations(entries map[string]string) *CertificateApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 { + b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.ObjectMetaApplyConfiguration.Annotations[k] = v + } + return b +} + +// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the OwnerReferences field. +func (b *CertificateApplyConfiguration) WithOwnerReferences(values ...*metav1.OwnerReferenceApplyConfiguration) *CertificateApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + if values[i] == nil { + panic("nil value passed to WithOwnerReferences") + } + b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i]) + } + return b +} + +// WithFinalizers adds the given value to the Finalizers field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Finalizers field. +func (b *CertificateApplyConfiguration) WithFinalizers(values ...string) *CertificateApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i]) + } + return b +} + +func (b *CertificateApplyConfiguration) ensureObjectMetaApplyConfigurationExists() { + if b.ObjectMetaApplyConfiguration == nil { + b.ObjectMetaApplyConfiguration = &metav1.ObjectMetaApplyConfiguration{} + } +} + +// WithSpec sets the Spec field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Spec field is set to the value of the last call. +func (b *CertificateApplyConfiguration) WithSpec(value *CertificateSpecApplyConfiguration) *CertificateApplyConfiguration { + b.Spec = value + return b +} + +// WithStatus sets the Status field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Status field is set to the value of the last call. +func (b *CertificateApplyConfiguration) WithStatus(value *CertificateStatusApplyConfiguration) *CertificateApplyConfiguration { + b.Status = value + return b +} + +// GetKind retrieves the value of the Kind field in the declarative configuration. +func (b *CertificateApplyConfiguration) GetKind() *string { + return b.TypeMetaApplyConfiguration.Kind +} + +// GetAPIVersion retrieves the value of the APIVersion field in the declarative configuration. +func (b *CertificateApplyConfiguration) GetAPIVersion() *string { + return b.TypeMetaApplyConfiguration.APIVersion +} + +// GetName retrieves the value of the Name field in the declarative configuration. +func (b *CertificateApplyConfiguration) GetName() *string { + b.ensureObjectMetaApplyConfigurationExists() + return b.ObjectMetaApplyConfiguration.Name +} + +// GetNamespace retrieves the value of the Namespace field in the declarative configuration. +func (b *CertificateApplyConfiguration) GetNamespace() *string { + b.ensureObjectMetaApplyConfigurationExists() + return b.ObjectMetaApplyConfiguration.Namespace +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificateadditionaloutputformat.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificateadditionaloutputformat.go new file mode 100644 index 0000000000..111fa5c8a0 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificateadditionaloutputformat.go @@ -0,0 +1,49 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + certmanagerv1 "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1" +) + +// CertificateAdditionalOutputFormatApplyConfiguration represents a declarative configuration of the CertificateAdditionalOutputFormat type for use +// with apply. +// +// CertificateAdditionalOutputFormat defines an additional output format of a +// Certificate resource. These contain supplementary data formats of the signed +// certificate chain and paired private key. +type CertificateAdditionalOutputFormatApplyConfiguration struct { + // Type is the name of the format type that should be written to the + // Certificate's target Secret. + Type *certmanagerv1.CertificateOutputFormatType `json:"type,omitempty"` +} + +// CertificateAdditionalOutputFormatApplyConfiguration constructs a declarative configuration of the CertificateAdditionalOutputFormat type for use with +// apply. +func CertificateAdditionalOutputFormat() *CertificateAdditionalOutputFormatApplyConfiguration { + return &CertificateAdditionalOutputFormatApplyConfiguration{} +} + +// WithType sets the Type field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Type field is set to the value of the last call. +func (b *CertificateAdditionalOutputFormatApplyConfiguration) WithType(value certmanagerv1.CertificateOutputFormatType) *CertificateAdditionalOutputFormatApplyConfiguration { + b.Type = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificatecondition.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificatecondition.go new file mode 100644 index 0000000000..bc56543250 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificatecondition.go @@ -0,0 +1,105 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + certmanagerv1 "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1" + metav1 "github.com/cert-manager/cert-manager/pkg/apis/meta/v1" + apismetav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// CertificateConditionApplyConfiguration represents a declarative configuration of the CertificateCondition type for use +// with apply. +// +// CertificateCondition contains condition information for a Certificate. +type CertificateConditionApplyConfiguration struct { + // Type of the condition, known values are (`Ready`, `Issuing`). + Type *certmanagerv1.CertificateConditionType `json:"type,omitempty"` + // Status of the condition, one of (`True`, `False`, `Unknown`). + Status *metav1.ConditionStatus `json:"status,omitempty"` + // LastTransitionTime is the timestamp corresponding to the last status + // change of this condition. + LastTransitionTime *apismetav1.Time `json:"lastTransitionTime,omitempty"` + // Reason is a brief machine readable explanation for the condition's last + // transition. + Reason *string `json:"reason,omitempty"` + // Message is a human readable description of the details of the last + // transition, complementing reason. + Message *string `json:"message,omitempty"` + // If set, this represents the .metadata.generation that the condition was + // set based upon. + // For instance, if .metadata.generation is currently 12, but the + // .status.condition[x].observedGeneration is 9, the condition is out of date + // with respect to the current state of the Certificate. + ObservedGeneration *int64 `json:"observedGeneration,omitempty"` +} + +// CertificateConditionApplyConfiguration constructs a declarative configuration of the CertificateCondition type for use with +// apply. +func CertificateCondition() *CertificateConditionApplyConfiguration { + return &CertificateConditionApplyConfiguration{} +} + +// WithType sets the Type field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Type field is set to the value of the last call. +func (b *CertificateConditionApplyConfiguration) WithType(value certmanagerv1.CertificateConditionType) *CertificateConditionApplyConfiguration { + b.Type = &value + return b +} + +// WithStatus sets the Status field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Status field is set to the value of the last call. +func (b *CertificateConditionApplyConfiguration) WithStatus(value metav1.ConditionStatus) *CertificateConditionApplyConfiguration { + b.Status = &value + return b +} + +// WithLastTransitionTime sets the LastTransitionTime field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the LastTransitionTime field is set to the value of the last call. +func (b *CertificateConditionApplyConfiguration) WithLastTransitionTime(value apismetav1.Time) *CertificateConditionApplyConfiguration { + b.LastTransitionTime = &value + return b +} + +// WithReason sets the Reason field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Reason field is set to the value of the last call. +func (b *CertificateConditionApplyConfiguration) WithReason(value string) *CertificateConditionApplyConfiguration { + b.Reason = &value + return b +} + +// WithMessage sets the Message field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Message field is set to the value of the last call. +func (b *CertificateConditionApplyConfiguration) WithMessage(value string) *CertificateConditionApplyConfiguration { + b.Message = &value + return b +} + +// WithObservedGeneration sets the ObservedGeneration field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ObservedGeneration field is set to the value of the last call. +func (b *CertificateConditionApplyConfiguration) WithObservedGeneration(value int64) *CertificateConditionApplyConfiguration { + b.ObservedGeneration = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificatekeystores.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificatekeystores.go new file mode 100644 index 0000000000..6c810e7e11 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificatekeystores.go @@ -0,0 +1,55 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// CertificateKeystoresApplyConfiguration represents a declarative configuration of the CertificateKeystores type for use +// with apply. +// +// CertificateKeystores configures additional keystore output formats to be +// created in the Certificate's output Secret. +type CertificateKeystoresApplyConfiguration struct { + // JKS configures options for storing a JKS keystore in the + // `spec.secretName` Secret resource. + JKS *JKSKeystoreApplyConfiguration `json:"jks,omitempty"` + // PKCS12 configures options for storing a PKCS12 keystore in the + // `spec.secretName` Secret resource. + PKCS12 *PKCS12KeystoreApplyConfiguration `json:"pkcs12,omitempty"` +} + +// CertificateKeystoresApplyConfiguration constructs a declarative configuration of the CertificateKeystores type for use with +// apply. +func CertificateKeystores() *CertificateKeystoresApplyConfiguration { + return &CertificateKeystoresApplyConfiguration{} +} + +// WithJKS sets the JKS field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the JKS field is set to the value of the last call. +func (b *CertificateKeystoresApplyConfiguration) WithJKS(value *JKSKeystoreApplyConfiguration) *CertificateKeystoresApplyConfiguration { + b.JKS = value + return b +} + +// WithPKCS12 sets the PKCS12 field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the PKCS12 field is set to the value of the last call. +func (b *CertificateKeystoresApplyConfiguration) WithPKCS12(value *PKCS12KeystoreApplyConfiguration) *CertificateKeystoresApplyConfiguration { + b.PKCS12 = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificateprivatekey.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificateprivatekey.go new file mode 100644 index 0000000000..c5e85c4f49 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificateprivatekey.go @@ -0,0 +1,108 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + certmanagerv1 "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1" +) + +// CertificatePrivateKeyApplyConfiguration represents a declarative configuration of the CertificatePrivateKey type for use +// with apply. +// +// CertificatePrivateKey contains configuration options for private keys +// used by the Certificate controller. +// These include the key algorithm and size, the used encoding and the +// rotation policy. +type CertificatePrivateKeyApplyConfiguration struct { + // RotationPolicy controls how private keys should be regenerated when a + // re-issuance is being processed. + // + // If set to `Never`, a private key will only be generated if one does not + // already exist in the target `spec.secretName`. If one does exist but it + // does not have the correct algorithm or size, a warning will be raised + // to await user intervention. + // If set to `Always`, a private key matching the specified requirements + // will be generated whenever a re-issuance occurs. + // Default is `Always`. + // The default was changed from `Never` to `Always` in cert-manager >=v1.18.0. + RotationPolicy *certmanagerv1.PrivateKeyRotationPolicy `json:"rotationPolicy,omitempty"` + // The private key cryptography standards (PKCS) encoding for this + // certificate's private key to be encoded in. + // + // If provided, allowed values are `PKCS1` and `PKCS8` standing for PKCS#1 + // and PKCS#8, respectively. + // Defaults to `PKCS1` if not specified. + Encoding *certmanagerv1.PrivateKeyEncoding `json:"encoding,omitempty"` + // Algorithm is the private key algorithm of the corresponding private key + // for this certificate. + // + // If provided, allowed values are either `RSA`, `ECDSA` or `Ed25519`. + // If `algorithm` is specified and `size` is not provided, + // key size of 2048 will be used for `RSA` key algorithm and + // key size of 256 will be used for `ECDSA` key algorithm. + // key size is ignored when using the `Ed25519` key algorithm. + Algorithm *certmanagerv1.PrivateKeyAlgorithm `json:"algorithm,omitempty"` + // Size is the key bit size of the corresponding private key for this certificate. + // + // If `algorithm` is set to `RSA`, valid values are `2048`, `4096` or `8192`, + // and will default to `2048` if not specified. + // If `algorithm` is set to `ECDSA`, valid values are `256`, `384` or `521`, + // and will default to `256` if not specified. + // If `algorithm` is set to `Ed25519`, Size is ignored. + // No other values are allowed. + Size *int `json:"size,omitempty"` +} + +// CertificatePrivateKeyApplyConfiguration constructs a declarative configuration of the CertificatePrivateKey type for use with +// apply. +func CertificatePrivateKey() *CertificatePrivateKeyApplyConfiguration { + return &CertificatePrivateKeyApplyConfiguration{} +} + +// WithRotationPolicy sets the RotationPolicy field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the RotationPolicy field is set to the value of the last call. +func (b *CertificatePrivateKeyApplyConfiguration) WithRotationPolicy(value certmanagerv1.PrivateKeyRotationPolicy) *CertificatePrivateKeyApplyConfiguration { + b.RotationPolicy = &value + return b +} + +// WithEncoding sets the Encoding field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Encoding field is set to the value of the last call. +func (b *CertificatePrivateKeyApplyConfiguration) WithEncoding(value certmanagerv1.PrivateKeyEncoding) *CertificatePrivateKeyApplyConfiguration { + b.Encoding = &value + return b +} + +// WithAlgorithm sets the Algorithm field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Algorithm field is set to the value of the last call. +func (b *CertificatePrivateKeyApplyConfiguration) WithAlgorithm(value certmanagerv1.PrivateKeyAlgorithm) *CertificatePrivateKeyApplyConfiguration { + b.Algorithm = &value + return b +} + +// WithSize sets the Size field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Size field is set to the value of the last call. +func (b *CertificatePrivateKeyApplyConfiguration) WithSize(value int) *CertificatePrivateKeyApplyConfiguration { + b.Size = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificaterequest.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificaterequest.go new file mode 100644 index 0000000000..6a5502bcd6 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificaterequest.go @@ -0,0 +1,305 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + certmanagerv1 "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1" + internal "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/internal" + apismetav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + managedfields "k8s.io/apimachinery/pkg/util/managedfields" + metav1 "k8s.io/client-go/applyconfigurations/meta/v1" +) + +// CertificateRequestApplyConfiguration represents a declarative configuration of the CertificateRequest type for use +// with apply. +// +// A CertificateRequest is used to request a signed certificate from one of the +// configured issuers. +// +// All fields within the CertificateRequest's `spec` are immutable after creation. +// A CertificateRequest will either succeed or fail, as denoted by its `Ready` status +// condition and its `status.failureTime` field. +// +// A CertificateRequest is a one-shot resource, meaning it represents a single +// point in time request for a certificate and cannot be re-used. +type CertificateRequestApplyConfiguration struct { + metav1.TypeMetaApplyConfiguration `json:",inline"` + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + *metav1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"` + // Specification of the desired state of the CertificateRequest resource. + // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + Spec *CertificateRequestSpecApplyConfiguration `json:"spec,omitempty"` + // Status of the CertificateRequest. + // This is set and managed automatically. + // Read-only. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + Status *CertificateRequestStatusApplyConfiguration `json:"status,omitempty"` +} + +// CertificateRequest constructs a declarative configuration of the CertificateRequest type for use with +// apply. +func CertificateRequest(name, namespace string) *CertificateRequestApplyConfiguration { + b := &CertificateRequestApplyConfiguration{} + b.WithName(name) + b.WithNamespace(namespace) + b.WithKind("CertificateRequest") + b.WithAPIVersion("cert-manager.io/v1") + return b +} + +// ExtractCertificateRequestFrom extracts the applied configuration owned by fieldManager from +// certificateRequest for the specified subresource. Pass an empty string for subresource to extract +// the main resource. Common subresources include "status", "scale", etc. +// certificateRequest must be a unmodified CertificateRequest API object that was retrieved from the Kubernetes API. +// ExtractCertificateRequestFrom provides a way to perform a extract/modify-in-place/apply workflow. +// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously +// applied if another fieldManager has updated or force applied any of the previously applied fields. +func ExtractCertificateRequestFrom(certificateRequest *certmanagerv1.CertificateRequest, fieldManager string, subresource string) (*CertificateRequestApplyConfiguration, error) { + b := &CertificateRequestApplyConfiguration{} + err := managedfields.ExtractInto(certificateRequest, internal.Parser().Type("com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CertificateRequest"), fieldManager, b, subresource) + if err != nil { + return nil, err + } + b.WithName(certificateRequest.Name) + b.WithNamespace(certificateRequest.Namespace) + + b.WithKind("CertificateRequest") + b.WithAPIVersion("cert-manager.io/v1") + return b, nil +} + +// ExtractCertificateRequest extracts the applied configuration owned by fieldManager from +// certificateRequest. If no managedFields are found in certificateRequest for fieldManager, a +// CertificateRequestApplyConfiguration is returned with only the Name, Namespace (if applicable), +// APIVersion and Kind populated. It is possible that no managed fields were found for because other +// field managers have taken ownership of all the fields previously owned by fieldManager, or because +// the fieldManager never owned fields any fields. +// certificateRequest must be a unmodified CertificateRequest API object that was retrieved from the Kubernetes API. +// ExtractCertificateRequest provides a way to perform a extract/modify-in-place/apply workflow. +// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously +// applied if another fieldManager has updated or force applied any of the previously applied fields. +func ExtractCertificateRequest(certificateRequest *certmanagerv1.CertificateRequest, fieldManager string) (*CertificateRequestApplyConfiguration, error) { + return ExtractCertificateRequestFrom(certificateRequest, fieldManager, "") +} + +// ExtractCertificateRequestStatus extracts the applied configuration owned by fieldManager from +// certificateRequest for the status subresource. +func ExtractCertificateRequestStatus(certificateRequest *certmanagerv1.CertificateRequest, fieldManager string) (*CertificateRequestApplyConfiguration, error) { + return ExtractCertificateRequestFrom(certificateRequest, fieldManager, "status") +} + +func (b CertificateRequestApplyConfiguration) IsApplyConfiguration() {} + +// WithKind sets the Kind field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Kind field is set to the value of the last call. +func (b *CertificateRequestApplyConfiguration) WithKind(value string) *CertificateRequestApplyConfiguration { + b.TypeMetaApplyConfiguration.Kind = &value + return b +} + +// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the APIVersion field is set to the value of the last call. +func (b *CertificateRequestApplyConfiguration) WithAPIVersion(value string) *CertificateRequestApplyConfiguration { + b.TypeMetaApplyConfiguration.APIVersion = &value + return b +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *CertificateRequestApplyConfiguration) WithName(value string) *CertificateRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.Name = &value + return b +} + +// WithGenerateName sets the GenerateName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the GenerateName field is set to the value of the last call. +func (b *CertificateRequestApplyConfiguration) WithGenerateName(value string) *CertificateRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.GenerateName = &value + return b +} + +// WithNamespace sets the Namespace field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Namespace field is set to the value of the last call. +func (b *CertificateRequestApplyConfiguration) WithNamespace(value string) *CertificateRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.Namespace = &value + return b +} + +// WithUID sets the UID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the UID field is set to the value of the last call. +func (b *CertificateRequestApplyConfiguration) WithUID(value types.UID) *CertificateRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.UID = &value + return b +} + +// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ResourceVersion field is set to the value of the last call. +func (b *CertificateRequestApplyConfiguration) WithResourceVersion(value string) *CertificateRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.ResourceVersion = &value + return b +} + +// WithGeneration sets the Generation field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Generation field is set to the value of the last call. +func (b *CertificateRequestApplyConfiguration) WithGeneration(value int64) *CertificateRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.Generation = &value + return b +} + +// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CreationTimestamp field is set to the value of the last call. +func (b *CertificateRequestApplyConfiguration) WithCreationTimestamp(value apismetav1.Time) *CertificateRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.CreationTimestamp = &value + return b +} + +// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionTimestamp field is set to the value of the last call. +func (b *CertificateRequestApplyConfiguration) WithDeletionTimestamp(value apismetav1.Time) *CertificateRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value + return b +} + +// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call. +func (b *CertificateRequestApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *CertificateRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value + return b +} + +// WithLabels puts the entries into the Labels field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Labels field, +// overwriting an existing map entries in Labels field with the same key. +func (b *CertificateRequestApplyConfiguration) WithLabels(entries map[string]string) *CertificateRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 { + b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.ObjectMetaApplyConfiguration.Labels[k] = v + } + return b +} + +// WithAnnotations puts the entries into the Annotations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Annotations field, +// overwriting an existing map entries in Annotations field with the same key. +func (b *CertificateRequestApplyConfiguration) WithAnnotations(entries map[string]string) *CertificateRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 { + b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.ObjectMetaApplyConfiguration.Annotations[k] = v + } + return b +} + +// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the OwnerReferences field. +func (b *CertificateRequestApplyConfiguration) WithOwnerReferences(values ...*metav1.OwnerReferenceApplyConfiguration) *CertificateRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + if values[i] == nil { + panic("nil value passed to WithOwnerReferences") + } + b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i]) + } + return b +} + +// WithFinalizers adds the given value to the Finalizers field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Finalizers field. +func (b *CertificateRequestApplyConfiguration) WithFinalizers(values ...string) *CertificateRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i]) + } + return b +} + +func (b *CertificateRequestApplyConfiguration) ensureObjectMetaApplyConfigurationExists() { + if b.ObjectMetaApplyConfiguration == nil { + b.ObjectMetaApplyConfiguration = &metav1.ObjectMetaApplyConfiguration{} + } +} + +// WithSpec sets the Spec field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Spec field is set to the value of the last call. +func (b *CertificateRequestApplyConfiguration) WithSpec(value *CertificateRequestSpecApplyConfiguration) *CertificateRequestApplyConfiguration { + b.Spec = value + return b +} + +// WithStatus sets the Status field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Status field is set to the value of the last call. +func (b *CertificateRequestApplyConfiguration) WithStatus(value *CertificateRequestStatusApplyConfiguration) *CertificateRequestApplyConfiguration { + b.Status = value + return b +} + +// GetKind retrieves the value of the Kind field in the declarative configuration. +func (b *CertificateRequestApplyConfiguration) GetKind() *string { + return b.TypeMetaApplyConfiguration.Kind +} + +// GetAPIVersion retrieves the value of the APIVersion field in the declarative configuration. +func (b *CertificateRequestApplyConfiguration) GetAPIVersion() *string { + return b.TypeMetaApplyConfiguration.APIVersion +} + +// GetName retrieves the value of the Name field in the declarative configuration. +func (b *CertificateRequestApplyConfiguration) GetName() *string { + b.ensureObjectMetaApplyConfigurationExists() + return b.ObjectMetaApplyConfiguration.Name +} + +// GetNamespace retrieves the value of the Namespace field in the declarative configuration. +func (b *CertificateRequestApplyConfiguration) GetNamespace() *string { + b.ensureObjectMetaApplyConfigurationExists() + return b.ObjectMetaApplyConfiguration.Namespace +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificaterequestcondition.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificaterequestcondition.go new file mode 100644 index 0000000000..f994ce8508 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificaterequestcondition.go @@ -0,0 +1,92 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + certmanagerv1 "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1" + metav1 "github.com/cert-manager/cert-manager/pkg/apis/meta/v1" + apismetav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// CertificateRequestConditionApplyConfiguration represents a declarative configuration of the CertificateRequestCondition type for use +// with apply. +// +// CertificateRequestCondition contains condition information for a CertificateRequest. +type CertificateRequestConditionApplyConfiguration struct { + // Type of the condition, known values are (`Ready`, `InvalidRequest`, + // `Approved`, `Denied`). + Type *certmanagerv1.CertificateRequestConditionType `json:"type,omitempty"` + // Status of the condition, one of (`True`, `False`, `Unknown`). + Status *metav1.ConditionStatus `json:"status,omitempty"` + // LastTransitionTime is the timestamp corresponding to the last status + // change of this condition. + LastTransitionTime *apismetav1.Time `json:"lastTransitionTime,omitempty"` + // Reason is a brief machine readable explanation for the condition's last + // transition. + Reason *string `json:"reason,omitempty"` + // Message is a human readable description of the details of the last + // transition, complementing reason. + Message *string `json:"message,omitempty"` +} + +// CertificateRequestConditionApplyConfiguration constructs a declarative configuration of the CertificateRequestCondition type for use with +// apply. +func CertificateRequestCondition() *CertificateRequestConditionApplyConfiguration { + return &CertificateRequestConditionApplyConfiguration{} +} + +// WithType sets the Type field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Type field is set to the value of the last call. +func (b *CertificateRequestConditionApplyConfiguration) WithType(value certmanagerv1.CertificateRequestConditionType) *CertificateRequestConditionApplyConfiguration { + b.Type = &value + return b +} + +// WithStatus sets the Status field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Status field is set to the value of the last call. +func (b *CertificateRequestConditionApplyConfiguration) WithStatus(value metav1.ConditionStatus) *CertificateRequestConditionApplyConfiguration { + b.Status = &value + return b +} + +// WithLastTransitionTime sets the LastTransitionTime field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the LastTransitionTime field is set to the value of the last call. +func (b *CertificateRequestConditionApplyConfiguration) WithLastTransitionTime(value apismetav1.Time) *CertificateRequestConditionApplyConfiguration { + b.LastTransitionTime = &value + return b +} + +// WithReason sets the Reason field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Reason field is set to the value of the last call. +func (b *CertificateRequestConditionApplyConfiguration) WithReason(value string) *CertificateRequestConditionApplyConfiguration { + b.Reason = &value + return b +} + +// WithMessage sets the Message field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Message field is set to the value of the last call. +func (b *CertificateRequestConditionApplyConfiguration) WithMessage(value string) *CertificateRequestConditionApplyConfiguration { + b.Message = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificaterequestspec.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificaterequestspec.go new file mode 100644 index 0000000000..de3063d1a9 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificaterequestspec.go @@ -0,0 +1,179 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + certmanagerv1 "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1" + applyconfigurationsmetav1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// CertificateRequestSpecApplyConfiguration represents a declarative configuration of the CertificateRequestSpec type for use +// with apply. +// +// # CertificateRequestSpec defines the desired state of CertificateRequest +// +// NOTE: It is important to note that the issuer can choose to ignore or change +// any of the requested attributes. How the issuer maps a certificate request +// to a signed certificate is the full responsibility of the issuer itself. +// For example, as an edge case, an issuer that inverts the isCA value is +// free to do so. +type CertificateRequestSpecApplyConfiguration struct { + // Requested 'duration' (i.e. lifetime) of the Certificate. Note that the + // issuer may choose to ignore the requested duration, just like any other + // requested attribute. + Duration *metav1.Duration `json:"duration,omitempty"` + // Reference to the issuer responsible for issuing the certificate. + // If the issuer is namespace-scoped, it must be in the same namespace + // as the Certificate. If the issuer is cluster-scoped, it can be used + // from any namespace. + // + // The `name` field of the reference must always be specified. + IssuerRef *applyconfigurationsmetav1.IssuerReferenceApplyConfiguration `json:"issuerRef,omitempty"` + // The PEM-encoded X.509 certificate signing request to be submitted to the + // issuer for signing. + // + // If the CSR has a BasicConstraints extension, its isCA attribute must + // match the `isCA` value of this CertificateRequest. + // If the CSR has a KeyUsage extension, its key usages must match the + // key usages in the `usages` field of this CertificateRequest. + // If the CSR has a ExtKeyUsage extension, its extended key usages + // must match the extended key usages in the `usages` field of this + // CertificateRequest. + Request []byte `json:"request,omitempty"` + // Requested basic constraints isCA value. Note that the issuer may choose + // to ignore the requested isCA value, just like any other requested attribute. + // + // NOTE: If the CSR in the `Request` field has a BasicConstraints extension, + // it must have the same isCA value as specified here. + // + // If true, this will automatically add the `cert sign` usage to the list + // of requested `usages`. + IsCA *bool `json:"isCA,omitempty"` + // Requested key usages and extended key usages. + // + // NOTE: If the CSR in the `Request` field has uses the KeyUsage or + // ExtKeyUsage extension, these extensions must have the same values + // as specified here without any additional values. + // + // If unset, defaults to `digital signature` and `key encipherment`. + Usages []certmanagerv1.KeyUsage `json:"usages,omitempty"` + // Username contains the name of the user that created the CertificateRequest. + // Populated by the cert-manager webhook on creation and immutable. + Username *string `json:"username,omitempty"` + // UID contains the uid of the user that created the CertificateRequest. + // Populated by the cert-manager webhook on creation and immutable. + UID *string `json:"uid,omitempty"` + // Groups contains group membership of the user that created the CertificateRequest. + // Populated by the cert-manager webhook on creation and immutable. + Groups []string `json:"groups,omitempty"` + // Extra contains extra attributes of the user that created the CertificateRequest. + // Populated by the cert-manager webhook on creation and immutable. + Extra map[string][]string `json:"extra,omitempty"` +} + +// CertificateRequestSpecApplyConfiguration constructs a declarative configuration of the CertificateRequestSpec type for use with +// apply. +func CertificateRequestSpec() *CertificateRequestSpecApplyConfiguration { + return &CertificateRequestSpecApplyConfiguration{} +} + +// WithDuration sets the Duration field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Duration field is set to the value of the last call. +func (b *CertificateRequestSpecApplyConfiguration) WithDuration(value metav1.Duration) *CertificateRequestSpecApplyConfiguration { + b.Duration = &value + return b +} + +// WithIssuerRef sets the IssuerRef field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the IssuerRef field is set to the value of the last call. +func (b *CertificateRequestSpecApplyConfiguration) WithIssuerRef(value *applyconfigurationsmetav1.IssuerReferenceApplyConfiguration) *CertificateRequestSpecApplyConfiguration { + b.IssuerRef = value + return b +} + +// WithRequest adds the given value to the Request field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Request field. +func (b *CertificateRequestSpecApplyConfiguration) WithRequest(values ...byte) *CertificateRequestSpecApplyConfiguration { + for i := range values { + b.Request = append(b.Request, values[i]) + } + return b +} + +// WithIsCA sets the IsCA field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the IsCA field is set to the value of the last call. +func (b *CertificateRequestSpecApplyConfiguration) WithIsCA(value bool) *CertificateRequestSpecApplyConfiguration { + b.IsCA = &value + return b +} + +// WithUsages adds the given value to the Usages field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Usages field. +func (b *CertificateRequestSpecApplyConfiguration) WithUsages(values ...certmanagerv1.KeyUsage) *CertificateRequestSpecApplyConfiguration { + for i := range values { + b.Usages = append(b.Usages, values[i]) + } + return b +} + +// WithUsername sets the Username field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Username field is set to the value of the last call. +func (b *CertificateRequestSpecApplyConfiguration) WithUsername(value string) *CertificateRequestSpecApplyConfiguration { + b.Username = &value + return b +} + +// WithUID sets the UID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the UID field is set to the value of the last call. +func (b *CertificateRequestSpecApplyConfiguration) WithUID(value string) *CertificateRequestSpecApplyConfiguration { + b.UID = &value + return b +} + +// WithGroups adds the given value to the Groups field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Groups field. +func (b *CertificateRequestSpecApplyConfiguration) WithGroups(values ...string) *CertificateRequestSpecApplyConfiguration { + for i := range values { + b.Groups = append(b.Groups, values[i]) + } + return b +} + +// WithExtra puts the entries into the Extra field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Extra field, +// overwriting an existing map entries in Extra field with the same key. +func (b *CertificateRequestSpecApplyConfiguration) WithExtra(entries map[string][]string) *CertificateRequestSpecApplyConfiguration { + if b.Extra == nil && len(entries) > 0 { + b.Extra = make(map[string][]string, len(entries)) + } + for k, v := range entries { + b.Extra[k] = v + } + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificaterequeststatus.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificaterequeststatus.go new file mode 100644 index 0000000000..94753a7f1f --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificaterequeststatus.go @@ -0,0 +1,95 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// CertificateRequestStatusApplyConfiguration represents a declarative configuration of the CertificateRequestStatus type for use +// with apply. +// +// CertificateRequestStatus defines the observed state of CertificateRequest and +// resulting signed certificate. +type CertificateRequestStatusApplyConfiguration struct { + // List of status conditions to indicate the status of a CertificateRequest. + // Known condition types are `Ready`, `InvalidRequest`, `Approved` and `Denied`. + Conditions []CertificateRequestConditionApplyConfiguration `json:"conditions,omitempty"` + // The PEM encoded X.509 certificate resulting from the certificate + // signing request. + // If not set, the CertificateRequest has either not been completed or has + // failed. More information on failure can be found by checking the + // `conditions` field. + Certificate []byte `json:"certificate,omitempty"` + // The PEM encoded X.509 certificate of the signer, also known as the CA + // (Certificate Authority). + // This is set on a best-effort basis by different issuers. + // If not set, the CA is assumed to be unknown/not available. + CA []byte `json:"ca,omitempty"` + // FailureTime stores the time that this CertificateRequest failed. This is + // used to influence garbage collection and back-off. + FailureTime *metav1.Time `json:"failureTime,omitempty"` +} + +// CertificateRequestStatusApplyConfiguration constructs a declarative configuration of the CertificateRequestStatus type for use with +// apply. +func CertificateRequestStatus() *CertificateRequestStatusApplyConfiguration { + return &CertificateRequestStatusApplyConfiguration{} +} + +// WithConditions adds the given value to the Conditions field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Conditions field. +func (b *CertificateRequestStatusApplyConfiguration) WithConditions(values ...*CertificateRequestConditionApplyConfiguration) *CertificateRequestStatusApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithConditions") + } + b.Conditions = append(b.Conditions, *values[i]) + } + return b +} + +// WithCertificate adds the given value to the Certificate field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Certificate field. +func (b *CertificateRequestStatusApplyConfiguration) WithCertificate(values ...byte) *CertificateRequestStatusApplyConfiguration { + for i := range values { + b.Certificate = append(b.Certificate, values[i]) + } + return b +} + +// WithCA adds the given value to the CA field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the CA field. +func (b *CertificateRequestStatusApplyConfiguration) WithCA(values ...byte) *CertificateRequestStatusApplyConfiguration { + for i := range values { + b.CA = append(b.CA, values[i]) + } + return b +} + +// WithFailureTime sets the FailureTime field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the FailureTime field is set to the value of the last call. +func (b *CertificateRequestStatusApplyConfiguration) WithFailureTime(value metav1.Time) *CertificateRequestStatusApplyConfiguration { + b.FailureTime = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificatesecrettemplate.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificatesecrettemplate.go new file mode 100644 index 0000000000..b7a21c282b --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificatesecrettemplate.go @@ -0,0 +1,65 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// CertificateSecretTemplateApplyConfiguration represents a declarative configuration of the CertificateSecretTemplate type for use +// with apply. +// +// CertificateSecretTemplate defines the default labels and annotations +// to be copied to the Kubernetes Secret resource named in `CertificateSpec.secretName`. +type CertificateSecretTemplateApplyConfiguration struct { + // Annotations is a key value map to be copied to the target Kubernetes Secret. + Annotations map[string]string `json:"annotations,omitempty"` + // Labels is a key value map to be copied to the target Kubernetes Secret. + Labels map[string]string `json:"labels,omitempty"` +} + +// CertificateSecretTemplateApplyConfiguration constructs a declarative configuration of the CertificateSecretTemplate type for use with +// apply. +func CertificateSecretTemplate() *CertificateSecretTemplateApplyConfiguration { + return &CertificateSecretTemplateApplyConfiguration{} +} + +// WithAnnotations puts the entries into the Annotations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Annotations field, +// overwriting an existing map entries in Annotations field with the same key. +func (b *CertificateSecretTemplateApplyConfiguration) WithAnnotations(entries map[string]string) *CertificateSecretTemplateApplyConfiguration { + if b.Annotations == nil && len(entries) > 0 { + b.Annotations = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Annotations[k] = v + } + return b +} + +// WithLabels puts the entries into the Labels field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Labels field, +// overwriting an existing map entries in Labels field with the same key. +func (b *CertificateSecretTemplateApplyConfiguration) WithLabels(entries map[string]string) *CertificateSecretTemplateApplyConfiguration { + if b.Labels == nil && len(entries) > 0 { + b.Labels = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Labels[k] = v + } + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificatespec.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificatespec.go new file mode 100644 index 0000000000..47adfb4e9b --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificatespec.go @@ -0,0 +1,394 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + certmanagerv1 "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1" + applyconfigurationsmetav1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// CertificateSpecApplyConfiguration represents a declarative configuration of the CertificateSpec type for use +// with apply. +// +// CertificateSpec defines the desired state of Certificate. +// +// NOTE: The specification contains a lot of "requested" certificate attributes, it is +// important to note that the issuer can choose to ignore or change any of +// these requested attributes. How the issuer maps a certificate request to a +// signed certificate is the full responsibility of the issuer itself. For example, +// as an edge case, an issuer that inverts the isCA value is free to do so. +// +// A valid Certificate requires at least one of a CommonName, LiteralSubject, DNSName, or +// URI to be valid. +type CertificateSpecApplyConfiguration struct { + // Requested set of X509 certificate subject attributes. + // More info: https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6 + // + // The common name attribute is specified separately in the `commonName` field. + // Cannot be set if the `literalSubject` field is set. + Subject *X509SubjectApplyConfiguration `json:"subject,omitempty"` + // Requested X.509 certificate subject, represented using the LDAP "String + // Representation of a Distinguished Name" [1]. + // Important: the LDAP string format also specifies the order of the attributes + // in the subject, this is important when issuing certs for LDAP authentication. + // Example: `CN=foo,DC=corp,DC=example,DC=com` + // More info [1]: https://datatracker.ietf.org/doc/html/rfc4514 + // More info: https://github.com/cert-manager/cert-manager/issues/3203 + // More info: https://github.com/cert-manager/cert-manager/issues/4424 + // + // Cannot be set if the `subject` or `commonName` field is set. + LiteralSubject *string `json:"literalSubject,omitempty"` + // Requested common name X509 certificate subject attribute. + // More info: https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6 + // NOTE: TLS clients will ignore this value when any subject alternative name is + // set (see https://tools.ietf.org/html/rfc6125#section-6.4.4). + // + // Should have a length of 64 characters or fewer to avoid generating invalid CSRs. + // Cannot be set if the `literalSubject` field is set. + CommonName *string `json:"commonName,omitempty"` + // Requested 'duration' (i.e. lifetime) of the Certificate. Note that the + // issuer may choose to ignore the requested duration, just like any other + // requested attribute. + // + // If unset, this defaults to 90 days. + // Minimum accepted duration is 1 hour. + // Value must be in units accepted by Go time.ParseDuration https://golang.org/pkg/time/#ParseDuration. + Duration *metav1.Duration `json:"duration,omitempty"` + // How long before the currently issued certificate's expiry cert-manager should + // renew the certificate. For example, if a certificate is valid for 60 minutes, + // and `renewBefore=10m`, cert-manager will begin to attempt to renew the certificate + // 50 minutes after it was issued (i.e. when there are 10 minutes remaining until + // the certificate is no longer valid). + // + // NOTE: The actual lifetime of the issued certificate is used to determine the + // renewal time. If an issuer returns a certificate with a different lifetime than + // the one requested, cert-manager will use the lifetime of the issued certificate. + // + // If unset, this defaults to 1/3 of the issued certificate's lifetime. + // Minimum accepted value is 5 minutes. + // Value must be in units accepted by Go time.ParseDuration https://golang.org/pkg/time/#ParseDuration. + // Cannot be set if the `renewBeforePercentage` field is set. + RenewBefore *metav1.Duration `json:"renewBefore,omitempty"` + // `renewBeforePercentage` is like `renewBefore`, except it is a relative percentage + // rather than an absolute duration. For example, if a certificate is valid for 60 + // minutes, and `renewBeforePercentage=25`, cert-manager will begin to attempt to + // renew the certificate 45 minutes after it was issued (i.e. when there are 15 + // minutes (25%) remaining until the certificate is no longer valid). + // + // NOTE: The actual lifetime of the issued certificate is used to determine the + // renewal time. If an issuer returns a certificate with a different lifetime than + // the one requested, cert-manager will use the lifetime of the issued certificate. + // + // Value must be an integer in the range (0,100). The minimum effective + // `renewBefore` derived from the `renewBeforePercentage` and `duration` fields is 5 + // minutes. + // Cannot be set if the `renewBefore` field is set. + RenewBeforePercentage *int32 `json:"renewBeforePercentage,omitempty"` + // Requested DNS subject alternative names. + DNSNames []string `json:"dnsNames,omitempty"` + // Requested IP address subject alternative names. + IPAddresses []string `json:"ipAddresses,omitempty"` + // Requested URI subject alternative names. + URIs []string `json:"uris,omitempty"` + // `otherNames` is an escape hatch for SAN that allows any type. We currently restrict the support to string like otherNames, cf RFC 5280 p 37 + // Any UTF8 String valued otherName can be passed with by setting the keys oid: x.x.x.x and UTF8Value: somevalue for `otherName`. + // Most commonly this would be UPN set with oid: 1.3.6.1.4.1.311.20.2.3 + // You should ensure that any OID passed is valid for the UTF8String type as we do not explicitly validate this. + OtherNames []OtherNameApplyConfiguration `json:"otherNames,omitempty"` + // Requested email subject alternative names. + EmailAddresses []string `json:"emailAddresses,omitempty"` + // Name of the Secret resource that will be automatically created and + // managed by this Certificate resource. It will be populated with a + // private key and certificate, signed by the denoted issuer. The Secret + // resource lives in the same namespace as the Certificate resource. + SecretName *string `json:"secretName,omitempty"` + // Defines annotations and labels to be copied to the Certificate's Secret. + // Labels and annotations on the Secret will be changed as they appear on the + // SecretTemplate when added or removed. SecretTemplate annotations are added + // in conjunction with, and cannot overwrite, the base set of annotations + // cert-manager sets on the Certificate's Secret. + SecretTemplate *CertificateSecretTemplateApplyConfiguration `json:"secretTemplate,omitempty"` + // Additional keystore output formats to be stored in the Certificate's Secret. + Keystores *CertificateKeystoresApplyConfiguration `json:"keystores,omitempty"` + // Reference to the issuer responsible for issuing the certificate. + // If the issuer is namespace-scoped, it must be in the same namespace + // as the Certificate. If the issuer is cluster-scoped, it can be used + // from any namespace. + // + // The `name` field of the reference must always be specified. + IssuerRef *applyconfigurationsmetav1.IssuerReferenceApplyConfiguration `json:"issuerRef,omitempty"` + // Requested basic constraints isCA value. + // The isCA value is used to set the `isCA` field on the created CertificateRequest + // resources. Note that the issuer may choose to ignore the requested isCA value, just + // like any other requested attribute. + // + // If true, this will automatically add the `cert sign` usage to the list + // of requested `usages`. + IsCA *bool `json:"isCA,omitempty"` + // Requested key usages and extended key usages. + // These usages are used to set the `usages` field on the created CertificateRequest + // resources. If `encodeUsagesInRequest` is unset or set to `true`, the usages + // will additionally be encoded in the `request` field which contains the CSR blob. + // + // If unset, defaults to `digital signature` and `key encipherment`. + Usages []certmanagerv1.KeyUsage `json:"usages,omitempty"` + // Private key options. These include the key algorithm and size, the used + // encoding and the rotation policy. + PrivateKey *CertificatePrivateKeyApplyConfiguration `json:"privateKey,omitempty"` + // Signature algorithm to use. + // Allowed values for RSA keys: SHA256WithRSA, SHA384WithRSA, SHA512WithRSA. + // Allowed values for ECDSA keys: ECDSAWithSHA256, ECDSAWithSHA384, ECDSAWithSHA512. + // Allowed values for Ed25519 keys: PureEd25519. + SignatureAlgorithm *certmanagerv1.SignatureAlgorithm `json:"signatureAlgorithm,omitempty"` + // Whether the KeyUsage and ExtKeyUsage extensions should be set in the encoded CSR. + // + // This option defaults to true, and should only be disabled if the target + // issuer does not support CSRs with these X509 KeyUsage/ ExtKeyUsage extensions. + EncodeUsagesInRequest *bool `json:"encodeUsagesInRequest,omitempty"` + // The maximum number of CertificateRequest revisions that are maintained in + // the Certificate's history. Each revision represents a single `CertificateRequest` + // created by this Certificate, either when it was created, renewed, or Spec + // was changed. Revisions will be removed by oldest first if the number of + // revisions exceeds this number. + // + // If set, revisionHistoryLimit must be a value of `1` or greater. + // Default value is `1`. + RevisionHistoryLimit *int32 `json:"revisionHistoryLimit,omitempty"` + // Defines extra output formats of the private key and signed certificate chain + // to be written to this Certificate's target Secret. + AdditionalOutputFormats []CertificateAdditionalOutputFormatApplyConfiguration `json:"additionalOutputFormats,omitempty"` + // x.509 certificate NameConstraint extension which MUST NOT be used in a non-CA certificate. + // More Info: https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.1.10 + // + // This is an Alpha Feature and is only enabled with the + // `--feature-gates=NameConstraints=true` option set on both + // the controller and webhook components. + NameConstraints *NameConstraintsApplyConfiguration `json:"nameConstraints,omitempty"` +} + +// CertificateSpecApplyConfiguration constructs a declarative configuration of the CertificateSpec type for use with +// apply. +func CertificateSpec() *CertificateSpecApplyConfiguration { + return &CertificateSpecApplyConfiguration{} +} + +// WithSubject sets the Subject field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Subject field is set to the value of the last call. +func (b *CertificateSpecApplyConfiguration) WithSubject(value *X509SubjectApplyConfiguration) *CertificateSpecApplyConfiguration { + b.Subject = value + return b +} + +// WithLiteralSubject sets the LiteralSubject field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the LiteralSubject field is set to the value of the last call. +func (b *CertificateSpecApplyConfiguration) WithLiteralSubject(value string) *CertificateSpecApplyConfiguration { + b.LiteralSubject = &value + return b +} + +// WithCommonName sets the CommonName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CommonName field is set to the value of the last call. +func (b *CertificateSpecApplyConfiguration) WithCommonName(value string) *CertificateSpecApplyConfiguration { + b.CommonName = &value + return b +} + +// WithDuration sets the Duration field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Duration field is set to the value of the last call. +func (b *CertificateSpecApplyConfiguration) WithDuration(value metav1.Duration) *CertificateSpecApplyConfiguration { + b.Duration = &value + return b +} + +// WithRenewBefore sets the RenewBefore field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the RenewBefore field is set to the value of the last call. +func (b *CertificateSpecApplyConfiguration) WithRenewBefore(value metav1.Duration) *CertificateSpecApplyConfiguration { + b.RenewBefore = &value + return b +} + +// WithRenewBeforePercentage sets the RenewBeforePercentage field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the RenewBeforePercentage field is set to the value of the last call. +func (b *CertificateSpecApplyConfiguration) WithRenewBeforePercentage(value int32) *CertificateSpecApplyConfiguration { + b.RenewBeforePercentage = &value + return b +} + +// WithDNSNames adds the given value to the DNSNames field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the DNSNames field. +func (b *CertificateSpecApplyConfiguration) WithDNSNames(values ...string) *CertificateSpecApplyConfiguration { + for i := range values { + b.DNSNames = append(b.DNSNames, values[i]) + } + return b +} + +// WithIPAddresses adds the given value to the IPAddresses field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the IPAddresses field. +func (b *CertificateSpecApplyConfiguration) WithIPAddresses(values ...string) *CertificateSpecApplyConfiguration { + for i := range values { + b.IPAddresses = append(b.IPAddresses, values[i]) + } + return b +} + +// WithURIs adds the given value to the URIs field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the URIs field. +func (b *CertificateSpecApplyConfiguration) WithURIs(values ...string) *CertificateSpecApplyConfiguration { + for i := range values { + b.URIs = append(b.URIs, values[i]) + } + return b +} + +// WithOtherNames adds the given value to the OtherNames field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the OtherNames field. +func (b *CertificateSpecApplyConfiguration) WithOtherNames(values ...*OtherNameApplyConfiguration) *CertificateSpecApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithOtherNames") + } + b.OtherNames = append(b.OtherNames, *values[i]) + } + return b +} + +// WithEmailAddresses adds the given value to the EmailAddresses field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the EmailAddresses field. +func (b *CertificateSpecApplyConfiguration) WithEmailAddresses(values ...string) *CertificateSpecApplyConfiguration { + for i := range values { + b.EmailAddresses = append(b.EmailAddresses, values[i]) + } + return b +} + +// WithSecretName sets the SecretName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the SecretName field is set to the value of the last call. +func (b *CertificateSpecApplyConfiguration) WithSecretName(value string) *CertificateSpecApplyConfiguration { + b.SecretName = &value + return b +} + +// WithSecretTemplate sets the SecretTemplate field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the SecretTemplate field is set to the value of the last call. +func (b *CertificateSpecApplyConfiguration) WithSecretTemplate(value *CertificateSecretTemplateApplyConfiguration) *CertificateSpecApplyConfiguration { + b.SecretTemplate = value + return b +} + +// WithKeystores sets the Keystores field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Keystores field is set to the value of the last call. +func (b *CertificateSpecApplyConfiguration) WithKeystores(value *CertificateKeystoresApplyConfiguration) *CertificateSpecApplyConfiguration { + b.Keystores = value + return b +} + +// WithIssuerRef sets the IssuerRef field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the IssuerRef field is set to the value of the last call. +func (b *CertificateSpecApplyConfiguration) WithIssuerRef(value *applyconfigurationsmetav1.IssuerReferenceApplyConfiguration) *CertificateSpecApplyConfiguration { + b.IssuerRef = value + return b +} + +// WithIsCA sets the IsCA field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the IsCA field is set to the value of the last call. +func (b *CertificateSpecApplyConfiguration) WithIsCA(value bool) *CertificateSpecApplyConfiguration { + b.IsCA = &value + return b +} + +// WithUsages adds the given value to the Usages field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Usages field. +func (b *CertificateSpecApplyConfiguration) WithUsages(values ...certmanagerv1.KeyUsage) *CertificateSpecApplyConfiguration { + for i := range values { + b.Usages = append(b.Usages, values[i]) + } + return b +} + +// WithPrivateKey sets the PrivateKey field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the PrivateKey field is set to the value of the last call. +func (b *CertificateSpecApplyConfiguration) WithPrivateKey(value *CertificatePrivateKeyApplyConfiguration) *CertificateSpecApplyConfiguration { + b.PrivateKey = value + return b +} + +// WithSignatureAlgorithm sets the SignatureAlgorithm field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the SignatureAlgorithm field is set to the value of the last call. +func (b *CertificateSpecApplyConfiguration) WithSignatureAlgorithm(value certmanagerv1.SignatureAlgorithm) *CertificateSpecApplyConfiguration { + b.SignatureAlgorithm = &value + return b +} + +// WithEncodeUsagesInRequest sets the EncodeUsagesInRequest field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the EncodeUsagesInRequest field is set to the value of the last call. +func (b *CertificateSpecApplyConfiguration) WithEncodeUsagesInRequest(value bool) *CertificateSpecApplyConfiguration { + b.EncodeUsagesInRequest = &value + return b +} + +// WithRevisionHistoryLimit sets the RevisionHistoryLimit field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the RevisionHistoryLimit field is set to the value of the last call. +func (b *CertificateSpecApplyConfiguration) WithRevisionHistoryLimit(value int32) *CertificateSpecApplyConfiguration { + b.RevisionHistoryLimit = &value + return b +} + +// WithAdditionalOutputFormats adds the given value to the AdditionalOutputFormats field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the AdditionalOutputFormats field. +func (b *CertificateSpecApplyConfiguration) WithAdditionalOutputFormats(values ...*CertificateAdditionalOutputFormatApplyConfiguration) *CertificateSpecApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithAdditionalOutputFormats") + } + b.AdditionalOutputFormats = append(b.AdditionalOutputFormats, *values[i]) + } + return b +} + +// WithNameConstraints sets the NameConstraints field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the NameConstraints field is set to the value of the last call. +func (b *CertificateSpecApplyConfiguration) WithNameConstraints(value *NameConstraintsApplyConfiguration) *CertificateSpecApplyConfiguration { + b.NameConstraints = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificatestatus.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificatestatus.go new file mode 100644 index 0000000000..64791a147b --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/certificatestatus.go @@ -0,0 +1,152 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// CertificateStatusApplyConfiguration represents a declarative configuration of the CertificateStatus type for use +// with apply. +// +// CertificateStatus defines the observed state of Certificate +type CertificateStatusApplyConfiguration struct { + // List of status conditions to indicate the status of certificates. + // Known condition types are `Ready` and `Issuing`. + Conditions []CertificateConditionApplyConfiguration `json:"conditions,omitempty"` + // LastFailureTime is set only if the latest issuance for this + // Certificate failed and contains the time of the failure. If an + // issuance has failed, the delay till the next issuance will be + // calculated using formula time.Hour * 2 ^ (failedIssuanceAttempts - + // 1). If the latest issuance has succeeded this field will be unset. + LastFailureTime *metav1.Time `json:"lastFailureTime,omitempty"` + // The time after which the certificate stored in the secret named + // by this resource in `spec.secretName` is valid. + NotBefore *metav1.Time `json:"notBefore,omitempty"` + // The expiration time of the certificate stored in the secret named + // by this resource in `spec.secretName`. + NotAfter *metav1.Time `json:"notAfter,omitempty"` + // RenewalTime is the time at which the certificate will be next + // renewed. + // If not set, no upcoming renewal is scheduled. + RenewalTime *metav1.Time `json:"renewalTime,omitempty"` + // The current 'revision' of the certificate as issued. + // + // When a CertificateRequest resource is created, it will have the + // `cert-manager.io/certificate-revision` set to one greater than the + // current value of this field. + // + // Upon issuance, this field will be set to the value of the annotation + // on the CertificateRequest resource used to issue the certificate. + // + // Persisting the value on the CertificateRequest resource allows the + // certificates controller to know whether a request is part of an old + // issuance or if it is part of the ongoing revision's issuance by + // checking if the revision value in the annotation is greater than this + // field. + Revision *int `json:"revision,omitempty"` + // The name of the Secret resource containing the private key to be used + // for the next certificate iteration. + // The keymanager controller will automatically set this field if the + // `Issuing` condition is set to `True`. + // It will automatically unset this field when the Issuing condition is + // not set or False. + NextPrivateKeySecretName *string `json:"nextPrivateKeySecretName,omitempty"` + // The number of continuous failed issuance attempts up till now. This + // field gets removed (if set) on a successful issuance and gets set to + // 1 if unset and an issuance has failed. If an issuance has failed, the + // delay till the next issuance will be calculated using formula + // time.Hour * 2 ^ (failedIssuanceAttempts - 1). + FailedIssuanceAttempts *int `json:"failedIssuanceAttempts,omitempty"` +} + +// CertificateStatusApplyConfiguration constructs a declarative configuration of the CertificateStatus type for use with +// apply. +func CertificateStatus() *CertificateStatusApplyConfiguration { + return &CertificateStatusApplyConfiguration{} +} + +// WithConditions adds the given value to the Conditions field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Conditions field. +func (b *CertificateStatusApplyConfiguration) WithConditions(values ...*CertificateConditionApplyConfiguration) *CertificateStatusApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithConditions") + } + b.Conditions = append(b.Conditions, *values[i]) + } + return b +} + +// WithLastFailureTime sets the LastFailureTime field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the LastFailureTime field is set to the value of the last call. +func (b *CertificateStatusApplyConfiguration) WithLastFailureTime(value metav1.Time) *CertificateStatusApplyConfiguration { + b.LastFailureTime = &value + return b +} + +// WithNotBefore sets the NotBefore field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the NotBefore field is set to the value of the last call. +func (b *CertificateStatusApplyConfiguration) WithNotBefore(value metav1.Time) *CertificateStatusApplyConfiguration { + b.NotBefore = &value + return b +} + +// WithNotAfter sets the NotAfter field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the NotAfter field is set to the value of the last call. +func (b *CertificateStatusApplyConfiguration) WithNotAfter(value metav1.Time) *CertificateStatusApplyConfiguration { + b.NotAfter = &value + return b +} + +// WithRenewalTime sets the RenewalTime field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the RenewalTime field is set to the value of the last call. +func (b *CertificateStatusApplyConfiguration) WithRenewalTime(value metav1.Time) *CertificateStatusApplyConfiguration { + b.RenewalTime = &value + return b +} + +// WithRevision sets the Revision field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Revision field is set to the value of the last call. +func (b *CertificateStatusApplyConfiguration) WithRevision(value int) *CertificateStatusApplyConfiguration { + b.Revision = &value + return b +} + +// WithNextPrivateKeySecretName sets the NextPrivateKeySecretName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the NextPrivateKeySecretName field is set to the value of the last call. +func (b *CertificateStatusApplyConfiguration) WithNextPrivateKeySecretName(value string) *CertificateStatusApplyConfiguration { + b.NextPrivateKeySecretName = &value + return b +} + +// WithFailedIssuanceAttempts sets the FailedIssuanceAttempts field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the FailedIssuanceAttempts field is set to the value of the last call. +func (b *CertificateStatusApplyConfiguration) WithFailedIssuanceAttempts(value int) *CertificateStatusApplyConfiguration { + b.FailedIssuanceAttempts = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/clusterissuer.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/clusterissuer.go new file mode 100644 index 0000000000..28338121b7 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/clusterissuer.go @@ -0,0 +1,293 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + certmanagerv1 "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1" + internal "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/internal" + apismetav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + managedfields "k8s.io/apimachinery/pkg/util/managedfields" + metav1 "k8s.io/client-go/applyconfigurations/meta/v1" +) + +// ClusterIssuerApplyConfiguration represents a declarative configuration of the ClusterIssuer type for use +// with apply. +// +// A ClusterIssuer represents a certificate issuing authority which can be +// referenced as part of `issuerRef` fields. +// It is similar to an Issuer, however it is cluster-scoped and therefore can +// be referenced by resources that exist in *any* namespace, not just the same +// namespace as the referent. +type ClusterIssuerApplyConfiguration struct { + metav1.TypeMetaApplyConfiguration `json:",inline"` + *metav1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"` + // Desired state of the ClusterIssuer resource. + Spec *IssuerSpecApplyConfiguration `json:"spec,omitempty"` + // Status of the ClusterIssuer. This is set and managed automatically. + Status *IssuerStatusApplyConfiguration `json:"status,omitempty"` +} + +// ClusterIssuer constructs a declarative configuration of the ClusterIssuer type for use with +// apply. +func ClusterIssuer(name string) *ClusterIssuerApplyConfiguration { + b := &ClusterIssuerApplyConfiguration{} + b.WithName(name) + b.WithKind("ClusterIssuer") + b.WithAPIVersion("cert-manager.io/v1") + return b +} + +// ExtractClusterIssuerFrom extracts the applied configuration owned by fieldManager from +// clusterIssuer for the specified subresource. Pass an empty string for subresource to extract +// the main resource. Common subresources include "status", "scale", etc. +// clusterIssuer must be a unmodified ClusterIssuer API object that was retrieved from the Kubernetes API. +// ExtractClusterIssuerFrom provides a way to perform a extract/modify-in-place/apply workflow. +// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously +// applied if another fieldManager has updated or force applied any of the previously applied fields. +func ExtractClusterIssuerFrom(clusterIssuer *certmanagerv1.ClusterIssuer, fieldManager string, subresource string) (*ClusterIssuerApplyConfiguration, error) { + b := &ClusterIssuerApplyConfiguration{} + err := managedfields.ExtractInto(clusterIssuer, internal.Parser().Type("com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.ClusterIssuer"), fieldManager, b, subresource) + if err != nil { + return nil, err + } + b.WithName(clusterIssuer.Name) + + b.WithKind("ClusterIssuer") + b.WithAPIVersion("cert-manager.io/v1") + return b, nil +} + +// ExtractClusterIssuer extracts the applied configuration owned by fieldManager from +// clusterIssuer. If no managedFields are found in clusterIssuer for fieldManager, a +// ClusterIssuerApplyConfiguration is returned with only the Name, Namespace (if applicable), +// APIVersion and Kind populated. It is possible that no managed fields were found for because other +// field managers have taken ownership of all the fields previously owned by fieldManager, or because +// the fieldManager never owned fields any fields. +// clusterIssuer must be a unmodified ClusterIssuer API object that was retrieved from the Kubernetes API. +// ExtractClusterIssuer provides a way to perform a extract/modify-in-place/apply workflow. +// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously +// applied if another fieldManager has updated or force applied any of the previously applied fields. +func ExtractClusterIssuer(clusterIssuer *certmanagerv1.ClusterIssuer, fieldManager string) (*ClusterIssuerApplyConfiguration, error) { + return ExtractClusterIssuerFrom(clusterIssuer, fieldManager, "") +} + +// ExtractClusterIssuerStatus extracts the applied configuration owned by fieldManager from +// clusterIssuer for the status subresource. +func ExtractClusterIssuerStatus(clusterIssuer *certmanagerv1.ClusterIssuer, fieldManager string) (*ClusterIssuerApplyConfiguration, error) { + return ExtractClusterIssuerFrom(clusterIssuer, fieldManager, "status") +} + +func (b ClusterIssuerApplyConfiguration) IsApplyConfiguration() {} + +// WithKind sets the Kind field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Kind field is set to the value of the last call. +func (b *ClusterIssuerApplyConfiguration) WithKind(value string) *ClusterIssuerApplyConfiguration { + b.TypeMetaApplyConfiguration.Kind = &value + return b +} + +// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the APIVersion field is set to the value of the last call. +func (b *ClusterIssuerApplyConfiguration) WithAPIVersion(value string) *ClusterIssuerApplyConfiguration { + b.TypeMetaApplyConfiguration.APIVersion = &value + return b +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *ClusterIssuerApplyConfiguration) WithName(value string) *ClusterIssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.Name = &value + return b +} + +// WithGenerateName sets the GenerateName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the GenerateName field is set to the value of the last call. +func (b *ClusterIssuerApplyConfiguration) WithGenerateName(value string) *ClusterIssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.GenerateName = &value + return b +} + +// WithNamespace sets the Namespace field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Namespace field is set to the value of the last call. +func (b *ClusterIssuerApplyConfiguration) WithNamespace(value string) *ClusterIssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.Namespace = &value + return b +} + +// WithUID sets the UID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the UID field is set to the value of the last call. +func (b *ClusterIssuerApplyConfiguration) WithUID(value types.UID) *ClusterIssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.UID = &value + return b +} + +// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ResourceVersion field is set to the value of the last call. +func (b *ClusterIssuerApplyConfiguration) WithResourceVersion(value string) *ClusterIssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.ResourceVersion = &value + return b +} + +// WithGeneration sets the Generation field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Generation field is set to the value of the last call. +func (b *ClusterIssuerApplyConfiguration) WithGeneration(value int64) *ClusterIssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.Generation = &value + return b +} + +// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CreationTimestamp field is set to the value of the last call. +func (b *ClusterIssuerApplyConfiguration) WithCreationTimestamp(value apismetav1.Time) *ClusterIssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.CreationTimestamp = &value + return b +} + +// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionTimestamp field is set to the value of the last call. +func (b *ClusterIssuerApplyConfiguration) WithDeletionTimestamp(value apismetav1.Time) *ClusterIssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value + return b +} + +// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call. +func (b *ClusterIssuerApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *ClusterIssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value + return b +} + +// WithLabels puts the entries into the Labels field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Labels field, +// overwriting an existing map entries in Labels field with the same key. +func (b *ClusterIssuerApplyConfiguration) WithLabels(entries map[string]string) *ClusterIssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 { + b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.ObjectMetaApplyConfiguration.Labels[k] = v + } + return b +} + +// WithAnnotations puts the entries into the Annotations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Annotations field, +// overwriting an existing map entries in Annotations field with the same key. +func (b *ClusterIssuerApplyConfiguration) WithAnnotations(entries map[string]string) *ClusterIssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 { + b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.ObjectMetaApplyConfiguration.Annotations[k] = v + } + return b +} + +// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the OwnerReferences field. +func (b *ClusterIssuerApplyConfiguration) WithOwnerReferences(values ...*metav1.OwnerReferenceApplyConfiguration) *ClusterIssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + if values[i] == nil { + panic("nil value passed to WithOwnerReferences") + } + b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i]) + } + return b +} + +// WithFinalizers adds the given value to the Finalizers field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Finalizers field. +func (b *ClusterIssuerApplyConfiguration) WithFinalizers(values ...string) *ClusterIssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i]) + } + return b +} + +func (b *ClusterIssuerApplyConfiguration) ensureObjectMetaApplyConfigurationExists() { + if b.ObjectMetaApplyConfiguration == nil { + b.ObjectMetaApplyConfiguration = &metav1.ObjectMetaApplyConfiguration{} + } +} + +// WithSpec sets the Spec field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Spec field is set to the value of the last call. +func (b *ClusterIssuerApplyConfiguration) WithSpec(value *IssuerSpecApplyConfiguration) *ClusterIssuerApplyConfiguration { + b.Spec = value + return b +} + +// WithStatus sets the Status field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Status field is set to the value of the last call. +func (b *ClusterIssuerApplyConfiguration) WithStatus(value *IssuerStatusApplyConfiguration) *ClusterIssuerApplyConfiguration { + b.Status = value + return b +} + +// GetKind retrieves the value of the Kind field in the declarative configuration. +func (b *ClusterIssuerApplyConfiguration) GetKind() *string { + return b.TypeMetaApplyConfiguration.Kind +} + +// GetAPIVersion retrieves the value of the APIVersion field in the declarative configuration. +func (b *ClusterIssuerApplyConfiguration) GetAPIVersion() *string { + return b.TypeMetaApplyConfiguration.APIVersion +} + +// GetName retrieves the value of the Name field in the declarative configuration. +func (b *ClusterIssuerApplyConfiguration) GetName() *string { + b.ensureObjectMetaApplyConfigurationExists() + return b.ObjectMetaApplyConfiguration.Name +} + +// GetNamespace retrieves the value of the Namespace field in the declarative configuration. +func (b *ClusterIssuerApplyConfiguration) GetNamespace() *string { + b.ensureObjectMetaApplyConfigurationExists() + return b.ObjectMetaApplyConfiguration.Namespace +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/issuer.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/issuer.go new file mode 100644 index 0000000000..a6ef04899e --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/issuer.go @@ -0,0 +1,294 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + certmanagerv1 "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1" + internal "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/internal" + apismetav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + managedfields "k8s.io/apimachinery/pkg/util/managedfields" + metav1 "k8s.io/client-go/applyconfigurations/meta/v1" +) + +// IssuerApplyConfiguration represents a declarative configuration of the Issuer type for use +// with apply. +// +// An Issuer represents a certificate issuing authority which can be +// referenced as part of `issuerRef` fields. +// It is scoped to a single namespace and can therefore only be referenced by +// resources within the same namespace. +type IssuerApplyConfiguration struct { + metav1.TypeMetaApplyConfiguration `json:",inline"` + *metav1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"` + // Desired state of the Issuer resource. + Spec *IssuerSpecApplyConfiguration `json:"spec,omitempty"` + // Status of the Issuer. This is set and managed automatically. + Status *IssuerStatusApplyConfiguration `json:"status,omitempty"` +} + +// Issuer constructs a declarative configuration of the Issuer type for use with +// apply. +func Issuer(name, namespace string) *IssuerApplyConfiguration { + b := &IssuerApplyConfiguration{} + b.WithName(name) + b.WithNamespace(namespace) + b.WithKind("Issuer") + b.WithAPIVersion("cert-manager.io/v1") + return b +} + +// ExtractIssuerFrom extracts the applied configuration owned by fieldManager from +// issuer for the specified subresource. Pass an empty string for subresource to extract +// the main resource. Common subresources include "status", "scale", etc. +// issuer must be a unmodified Issuer API object that was retrieved from the Kubernetes API. +// ExtractIssuerFrom provides a way to perform a extract/modify-in-place/apply workflow. +// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously +// applied if another fieldManager has updated or force applied any of the previously applied fields. +func ExtractIssuerFrom(issuer *certmanagerv1.Issuer, fieldManager string, subresource string) (*IssuerApplyConfiguration, error) { + b := &IssuerApplyConfiguration{} + err := managedfields.ExtractInto(issuer, internal.Parser().Type("com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.Issuer"), fieldManager, b, subresource) + if err != nil { + return nil, err + } + b.WithName(issuer.Name) + b.WithNamespace(issuer.Namespace) + + b.WithKind("Issuer") + b.WithAPIVersion("cert-manager.io/v1") + return b, nil +} + +// ExtractIssuer extracts the applied configuration owned by fieldManager from +// issuer. If no managedFields are found in issuer for fieldManager, a +// IssuerApplyConfiguration is returned with only the Name, Namespace (if applicable), +// APIVersion and Kind populated. It is possible that no managed fields were found for because other +// field managers have taken ownership of all the fields previously owned by fieldManager, or because +// the fieldManager never owned fields any fields. +// issuer must be a unmodified Issuer API object that was retrieved from the Kubernetes API. +// ExtractIssuer provides a way to perform a extract/modify-in-place/apply workflow. +// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously +// applied if another fieldManager has updated or force applied any of the previously applied fields. +func ExtractIssuer(issuer *certmanagerv1.Issuer, fieldManager string) (*IssuerApplyConfiguration, error) { + return ExtractIssuerFrom(issuer, fieldManager, "") +} + +// ExtractIssuerStatus extracts the applied configuration owned by fieldManager from +// issuer for the status subresource. +func ExtractIssuerStatus(issuer *certmanagerv1.Issuer, fieldManager string) (*IssuerApplyConfiguration, error) { + return ExtractIssuerFrom(issuer, fieldManager, "status") +} + +func (b IssuerApplyConfiguration) IsApplyConfiguration() {} + +// WithKind sets the Kind field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Kind field is set to the value of the last call. +func (b *IssuerApplyConfiguration) WithKind(value string) *IssuerApplyConfiguration { + b.TypeMetaApplyConfiguration.Kind = &value + return b +} + +// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the APIVersion field is set to the value of the last call. +func (b *IssuerApplyConfiguration) WithAPIVersion(value string) *IssuerApplyConfiguration { + b.TypeMetaApplyConfiguration.APIVersion = &value + return b +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *IssuerApplyConfiguration) WithName(value string) *IssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.Name = &value + return b +} + +// WithGenerateName sets the GenerateName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the GenerateName field is set to the value of the last call. +func (b *IssuerApplyConfiguration) WithGenerateName(value string) *IssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.GenerateName = &value + return b +} + +// WithNamespace sets the Namespace field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Namespace field is set to the value of the last call. +func (b *IssuerApplyConfiguration) WithNamespace(value string) *IssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.Namespace = &value + return b +} + +// WithUID sets the UID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the UID field is set to the value of the last call. +func (b *IssuerApplyConfiguration) WithUID(value types.UID) *IssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.UID = &value + return b +} + +// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ResourceVersion field is set to the value of the last call. +func (b *IssuerApplyConfiguration) WithResourceVersion(value string) *IssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.ResourceVersion = &value + return b +} + +// WithGeneration sets the Generation field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Generation field is set to the value of the last call. +func (b *IssuerApplyConfiguration) WithGeneration(value int64) *IssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.Generation = &value + return b +} + +// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CreationTimestamp field is set to the value of the last call. +func (b *IssuerApplyConfiguration) WithCreationTimestamp(value apismetav1.Time) *IssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.CreationTimestamp = &value + return b +} + +// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionTimestamp field is set to the value of the last call. +func (b *IssuerApplyConfiguration) WithDeletionTimestamp(value apismetav1.Time) *IssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value + return b +} + +// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call. +func (b *IssuerApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *IssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value + return b +} + +// WithLabels puts the entries into the Labels field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Labels field, +// overwriting an existing map entries in Labels field with the same key. +func (b *IssuerApplyConfiguration) WithLabels(entries map[string]string) *IssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 { + b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.ObjectMetaApplyConfiguration.Labels[k] = v + } + return b +} + +// WithAnnotations puts the entries into the Annotations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Annotations field, +// overwriting an existing map entries in Annotations field with the same key. +func (b *IssuerApplyConfiguration) WithAnnotations(entries map[string]string) *IssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 { + b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.ObjectMetaApplyConfiguration.Annotations[k] = v + } + return b +} + +// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the OwnerReferences field. +func (b *IssuerApplyConfiguration) WithOwnerReferences(values ...*metav1.OwnerReferenceApplyConfiguration) *IssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + if values[i] == nil { + panic("nil value passed to WithOwnerReferences") + } + b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i]) + } + return b +} + +// WithFinalizers adds the given value to the Finalizers field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Finalizers field. +func (b *IssuerApplyConfiguration) WithFinalizers(values ...string) *IssuerApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i]) + } + return b +} + +func (b *IssuerApplyConfiguration) ensureObjectMetaApplyConfigurationExists() { + if b.ObjectMetaApplyConfiguration == nil { + b.ObjectMetaApplyConfiguration = &metav1.ObjectMetaApplyConfiguration{} + } +} + +// WithSpec sets the Spec field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Spec field is set to the value of the last call. +func (b *IssuerApplyConfiguration) WithSpec(value *IssuerSpecApplyConfiguration) *IssuerApplyConfiguration { + b.Spec = value + return b +} + +// WithStatus sets the Status field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Status field is set to the value of the last call. +func (b *IssuerApplyConfiguration) WithStatus(value *IssuerStatusApplyConfiguration) *IssuerApplyConfiguration { + b.Status = value + return b +} + +// GetKind retrieves the value of the Kind field in the declarative configuration. +func (b *IssuerApplyConfiguration) GetKind() *string { + return b.TypeMetaApplyConfiguration.Kind +} + +// GetAPIVersion retrieves the value of the APIVersion field in the declarative configuration. +func (b *IssuerApplyConfiguration) GetAPIVersion() *string { + return b.TypeMetaApplyConfiguration.APIVersion +} + +// GetName retrieves the value of the Name field in the declarative configuration. +func (b *IssuerApplyConfiguration) GetName() *string { + b.ensureObjectMetaApplyConfigurationExists() + return b.ObjectMetaApplyConfiguration.Name +} + +// GetNamespace retrieves the value of the Namespace field in the declarative configuration. +func (b *IssuerApplyConfiguration) GetNamespace() *string { + b.ensureObjectMetaApplyConfigurationExists() + return b.ObjectMetaApplyConfiguration.Namespace +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/issuercondition.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/issuercondition.go new file mode 100644 index 0000000000..151c8c26fc --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/issuercondition.go @@ -0,0 +1,105 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + certmanagerv1 "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1" + metav1 "github.com/cert-manager/cert-manager/pkg/apis/meta/v1" + apismetav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// IssuerConditionApplyConfiguration represents a declarative configuration of the IssuerCondition type for use +// with apply. +// +// IssuerCondition contains condition information for an Issuer. +type IssuerConditionApplyConfiguration struct { + // Type of the condition, known values are (`Ready`). + Type *certmanagerv1.IssuerConditionType `json:"type,omitempty"` + // Status of the condition, one of (`True`, `False`, `Unknown`). + Status *metav1.ConditionStatus `json:"status,omitempty"` + // LastTransitionTime is the timestamp corresponding to the last status + // change of this condition. + LastTransitionTime *apismetav1.Time `json:"lastTransitionTime,omitempty"` + // Reason is a brief machine readable explanation for the condition's last + // transition. + Reason *string `json:"reason,omitempty"` + // Message is a human readable description of the details of the last + // transition, complementing reason. + Message *string `json:"message,omitempty"` + // If set, this represents the .metadata.generation that the condition was + // set based upon. + // For instance, if .metadata.generation is currently 12, but the + // .status.condition[x].observedGeneration is 9, the condition is out of date + // with respect to the current state of the Issuer. + ObservedGeneration *int64 `json:"observedGeneration,omitempty"` +} + +// IssuerConditionApplyConfiguration constructs a declarative configuration of the IssuerCondition type for use with +// apply. +func IssuerCondition() *IssuerConditionApplyConfiguration { + return &IssuerConditionApplyConfiguration{} +} + +// WithType sets the Type field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Type field is set to the value of the last call. +func (b *IssuerConditionApplyConfiguration) WithType(value certmanagerv1.IssuerConditionType) *IssuerConditionApplyConfiguration { + b.Type = &value + return b +} + +// WithStatus sets the Status field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Status field is set to the value of the last call. +func (b *IssuerConditionApplyConfiguration) WithStatus(value metav1.ConditionStatus) *IssuerConditionApplyConfiguration { + b.Status = &value + return b +} + +// WithLastTransitionTime sets the LastTransitionTime field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the LastTransitionTime field is set to the value of the last call. +func (b *IssuerConditionApplyConfiguration) WithLastTransitionTime(value apismetav1.Time) *IssuerConditionApplyConfiguration { + b.LastTransitionTime = &value + return b +} + +// WithReason sets the Reason field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Reason field is set to the value of the last call. +func (b *IssuerConditionApplyConfiguration) WithReason(value string) *IssuerConditionApplyConfiguration { + b.Reason = &value + return b +} + +// WithMessage sets the Message field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Message field is set to the value of the last call. +func (b *IssuerConditionApplyConfiguration) WithMessage(value string) *IssuerConditionApplyConfiguration { + b.Message = &value + return b +} + +// WithObservedGeneration sets the ObservedGeneration field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ObservedGeneration field is set to the value of the last call. +func (b *IssuerConditionApplyConfiguration) WithObservedGeneration(value int64) *IssuerConditionApplyConfiguration { + b.ObservedGeneration = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/issuerconfig.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/issuerconfig.go new file mode 100644 index 0000000000..cc45546ba9 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/issuerconfig.go @@ -0,0 +1,93 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + acmev1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1" +) + +// IssuerConfigApplyConfiguration represents a declarative configuration of the IssuerConfig type for use +// with apply. +// +// The configuration for the issuer. +// Only one of these can be set. +type IssuerConfigApplyConfiguration struct { + // ACME configures this issuer to communicate with a RFC8555 (ACME) server + // to obtain signed x509 certificates. + ACME *acmev1.ACMEIssuerApplyConfiguration `json:"acme,omitempty"` + // CA configures this issuer to sign certificates using a signing CA keypair + // stored in a Secret resource. + // This is used to build internal PKIs that are managed by cert-manager. + CA *CAIssuerApplyConfiguration `json:"ca,omitempty"` + // Vault configures this issuer to sign certificates using a HashiCorp Vault + // PKI backend. + Vault *VaultIssuerApplyConfiguration `json:"vault,omitempty"` + // SelfSigned configures this issuer to 'self sign' certificates using the + // private key used to create the CertificateRequest object. + SelfSigned *SelfSignedIssuerApplyConfiguration `json:"selfSigned,omitempty"` + // Venafi configures this issuer to sign certificates using a CyberArk Certificate Manager Self-Hosted + // or SaaS policy zone. + Venafi *VenafiIssuerApplyConfiguration `json:"venafi,omitempty"` +} + +// IssuerConfigApplyConfiguration constructs a declarative configuration of the IssuerConfig type for use with +// apply. +func IssuerConfig() *IssuerConfigApplyConfiguration { + return &IssuerConfigApplyConfiguration{} +} + +// WithACME sets the ACME field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ACME field is set to the value of the last call. +func (b *IssuerConfigApplyConfiguration) WithACME(value *acmev1.ACMEIssuerApplyConfiguration) *IssuerConfigApplyConfiguration { + b.ACME = value + return b +} + +// WithCA sets the CA field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CA field is set to the value of the last call. +func (b *IssuerConfigApplyConfiguration) WithCA(value *CAIssuerApplyConfiguration) *IssuerConfigApplyConfiguration { + b.CA = value + return b +} + +// WithVault sets the Vault field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Vault field is set to the value of the last call. +func (b *IssuerConfigApplyConfiguration) WithVault(value *VaultIssuerApplyConfiguration) *IssuerConfigApplyConfiguration { + b.Vault = value + return b +} + +// WithSelfSigned sets the SelfSigned field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the SelfSigned field is set to the value of the last call. +func (b *IssuerConfigApplyConfiguration) WithSelfSigned(value *SelfSignedIssuerApplyConfiguration) *IssuerConfigApplyConfiguration { + b.SelfSigned = value + return b +} + +// WithVenafi sets the Venafi field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Venafi field is set to the value of the last call. +func (b *IssuerConfigApplyConfiguration) WithVenafi(value *VenafiIssuerApplyConfiguration) *IssuerConfigApplyConfiguration { + b.Venafi = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/issuerspec.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/issuerspec.go new file mode 100644 index 0000000000..912195a45d --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/issuerspec.go @@ -0,0 +1,78 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + acmev1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1" +) + +// IssuerSpecApplyConfiguration represents a declarative configuration of the IssuerSpec type for use +// with apply. +// +// IssuerSpec is the specification of an Issuer. This includes any +// configuration required for the issuer. +type IssuerSpecApplyConfiguration struct { + IssuerConfigApplyConfiguration `json:",inline"` +} + +// IssuerSpecApplyConfiguration constructs a declarative configuration of the IssuerSpec type for use with +// apply. +func IssuerSpec() *IssuerSpecApplyConfiguration { + return &IssuerSpecApplyConfiguration{} +} + +// WithACME sets the ACME field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ACME field is set to the value of the last call. +func (b *IssuerSpecApplyConfiguration) WithACME(value *acmev1.ACMEIssuerApplyConfiguration) *IssuerSpecApplyConfiguration { + b.IssuerConfigApplyConfiguration.ACME = value + return b +} + +// WithCA sets the CA field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CA field is set to the value of the last call. +func (b *IssuerSpecApplyConfiguration) WithCA(value *CAIssuerApplyConfiguration) *IssuerSpecApplyConfiguration { + b.IssuerConfigApplyConfiguration.CA = value + return b +} + +// WithVault sets the Vault field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Vault field is set to the value of the last call. +func (b *IssuerSpecApplyConfiguration) WithVault(value *VaultIssuerApplyConfiguration) *IssuerSpecApplyConfiguration { + b.IssuerConfigApplyConfiguration.Vault = value + return b +} + +// WithSelfSigned sets the SelfSigned field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the SelfSigned field is set to the value of the last call. +func (b *IssuerSpecApplyConfiguration) WithSelfSigned(value *SelfSignedIssuerApplyConfiguration) *IssuerSpecApplyConfiguration { + b.IssuerConfigApplyConfiguration.SelfSigned = value + return b +} + +// WithVenafi sets the Venafi field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Venafi field is set to the value of the last call. +func (b *IssuerSpecApplyConfiguration) WithVenafi(value *VenafiIssuerApplyConfiguration) *IssuerSpecApplyConfiguration { + b.IssuerConfigApplyConfiguration.Venafi = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/issuerstatus.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/issuerstatus.go new file mode 100644 index 0000000000..2f78eaafe2 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/issuerstatus.go @@ -0,0 +1,64 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + acmev1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1" +) + +// IssuerStatusApplyConfiguration represents a declarative configuration of the IssuerStatus type for use +// with apply. +// +// IssuerStatus contains status information about an Issuer +type IssuerStatusApplyConfiguration struct { + // List of status conditions to indicate the status of a CertificateRequest. + // Known condition types are `Ready`. + Conditions []IssuerConditionApplyConfiguration `json:"conditions,omitempty"` + // ACME specific status options. + // This field should only be set if the Issuer is configured to use an ACME + // server to issue certificates. + ACME *acmev1.ACMEIssuerStatusApplyConfiguration `json:"acme,omitempty"` +} + +// IssuerStatusApplyConfiguration constructs a declarative configuration of the IssuerStatus type for use with +// apply. +func IssuerStatus() *IssuerStatusApplyConfiguration { + return &IssuerStatusApplyConfiguration{} +} + +// WithConditions adds the given value to the Conditions field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Conditions field. +func (b *IssuerStatusApplyConfiguration) WithConditions(values ...*IssuerConditionApplyConfiguration) *IssuerStatusApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithConditions") + } + b.Conditions = append(b.Conditions, *values[i]) + } + return b +} + +// WithACME sets the ACME field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ACME field is set to the value of the last call. +func (b *IssuerStatusApplyConfiguration) WithACME(value *acmev1.ACMEIssuerStatusApplyConfiguration) *IssuerStatusApplyConfiguration { + b.ACME = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/jkskeystore.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/jkskeystore.go new file mode 100644 index 0000000000..99abecdbee --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/jkskeystore.go @@ -0,0 +1,91 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1" +) + +// JKSKeystoreApplyConfiguration represents a declarative configuration of the JKSKeystore type for use +// with apply. +// +// JKS configures options for storing a JKS keystore in the target secret. +// Either PasswordSecretRef or Password must be provided. +type JKSKeystoreApplyConfiguration struct { + // Create enables JKS keystore creation for the Certificate. + // If true, a file named `keystore.jks` will be created in the target + // Secret resource, encrypted using the password stored in + // `passwordSecretRef` or `password`. + // The keystore file will be updated immediately. + // If the issuer provided a CA certificate, a file named `truststore.jks` + // will also be created in the target Secret resource, encrypted using the + // password stored in `passwordSecretRef` + // containing the issuing Certificate Authority + Create *bool `json:"create,omitempty"` + // Alias specifies the alias of the key in the keystore, required by the JKS format. + // If not provided, the default alias `certificate` will be used. + Alias *string `json:"alias,omitempty"` + // PasswordSecretRef is a reference to a non-empty key in a Secret resource + // containing the password used to encrypt the JKS keystore. + // Mutually exclusive with password. + // One of password or passwordSecretRef must provide a password with a non-zero length. + PasswordSecretRef *metav1.SecretKeySelectorApplyConfiguration `json:"passwordSecretRef,omitempty"` + // Password provides a literal password used to encrypt the JKS keystore. + // Mutually exclusive with passwordSecretRef. + // One of password or passwordSecretRef must provide a password with a non-zero length. + Password *string `json:"password,omitempty"` +} + +// JKSKeystoreApplyConfiguration constructs a declarative configuration of the JKSKeystore type for use with +// apply. +func JKSKeystore() *JKSKeystoreApplyConfiguration { + return &JKSKeystoreApplyConfiguration{} +} + +// WithCreate sets the Create field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Create field is set to the value of the last call. +func (b *JKSKeystoreApplyConfiguration) WithCreate(value bool) *JKSKeystoreApplyConfiguration { + b.Create = &value + return b +} + +// WithAlias sets the Alias field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Alias field is set to the value of the last call. +func (b *JKSKeystoreApplyConfiguration) WithAlias(value string) *JKSKeystoreApplyConfiguration { + b.Alias = &value + return b +} + +// WithPasswordSecretRef sets the PasswordSecretRef field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the PasswordSecretRef field is set to the value of the last call. +func (b *JKSKeystoreApplyConfiguration) WithPasswordSecretRef(value *metav1.SecretKeySelectorApplyConfiguration) *JKSKeystoreApplyConfiguration { + b.PasswordSecretRef = value + return b +} + +// WithPassword sets the Password field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Password field is set to the value of the last call. +func (b *JKSKeystoreApplyConfiguration) WithPassword(value string) *JKSKeystoreApplyConfiguration { + b.Password = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/nameconstraintitem.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/nameconstraintitem.go new file mode 100644 index 0000000000..5f26ec64b8 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/nameconstraintitem.go @@ -0,0 +1,79 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// NameConstraintItemApplyConfiguration represents a declarative configuration of the NameConstraintItem type for use +// with apply. +type NameConstraintItemApplyConfiguration struct { + // DNSDomains is a list of DNS domains that are permitted or excluded. + DNSDomains []string `json:"dnsDomains,omitempty"` + // IPRanges is a list of IP Ranges that are permitted or excluded. + // This should be a valid CIDR notation. + IPRanges []string `json:"ipRanges,omitempty"` + // EmailAddresses is a list of Email Addresses that are permitted or excluded. + EmailAddresses []string `json:"emailAddresses,omitempty"` + // URIDomains is a list of URI domains that are permitted or excluded. + URIDomains []string `json:"uriDomains,omitempty"` +} + +// NameConstraintItemApplyConfiguration constructs a declarative configuration of the NameConstraintItem type for use with +// apply. +func NameConstraintItem() *NameConstraintItemApplyConfiguration { + return &NameConstraintItemApplyConfiguration{} +} + +// WithDNSDomains adds the given value to the DNSDomains field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the DNSDomains field. +func (b *NameConstraintItemApplyConfiguration) WithDNSDomains(values ...string) *NameConstraintItemApplyConfiguration { + for i := range values { + b.DNSDomains = append(b.DNSDomains, values[i]) + } + return b +} + +// WithIPRanges adds the given value to the IPRanges field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the IPRanges field. +func (b *NameConstraintItemApplyConfiguration) WithIPRanges(values ...string) *NameConstraintItemApplyConfiguration { + for i := range values { + b.IPRanges = append(b.IPRanges, values[i]) + } + return b +} + +// WithEmailAddresses adds the given value to the EmailAddresses field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the EmailAddresses field. +func (b *NameConstraintItemApplyConfiguration) WithEmailAddresses(values ...string) *NameConstraintItemApplyConfiguration { + for i := range values { + b.EmailAddresses = append(b.EmailAddresses, values[i]) + } + return b +} + +// WithURIDomains adds the given value to the URIDomains field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the URIDomains field. +func (b *NameConstraintItemApplyConfiguration) WithURIDomains(values ...string) *NameConstraintItemApplyConfiguration { + for i := range values { + b.URIDomains = append(b.URIDomains, values[i]) + } + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/nameconstraints.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/nameconstraints.go new file mode 100644 index 0000000000..0ab8432cfc --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/nameconstraints.go @@ -0,0 +1,64 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// NameConstraintsApplyConfiguration represents a declarative configuration of the NameConstraints type for use +// with apply. +// +// NameConstraints is a type to represent x509 NameConstraints +type NameConstraintsApplyConfiguration struct { + // if true then the name constraints are marked critical. + Critical *bool `json:"critical,omitempty"` + // Permitted contains the constraints in which the names must be located. + Permitted *NameConstraintItemApplyConfiguration `json:"permitted,omitempty"` + // Excluded contains the constraints which must be disallowed. Any name matching a + // restriction in the excluded field is invalid regardless + // of information appearing in the permitted + Excluded *NameConstraintItemApplyConfiguration `json:"excluded,omitempty"` +} + +// NameConstraintsApplyConfiguration constructs a declarative configuration of the NameConstraints type for use with +// apply. +func NameConstraints() *NameConstraintsApplyConfiguration { + return &NameConstraintsApplyConfiguration{} +} + +// WithCritical sets the Critical field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Critical field is set to the value of the last call. +func (b *NameConstraintsApplyConfiguration) WithCritical(value bool) *NameConstraintsApplyConfiguration { + b.Critical = &value + return b +} + +// WithPermitted sets the Permitted field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Permitted field is set to the value of the last call. +func (b *NameConstraintsApplyConfiguration) WithPermitted(value *NameConstraintItemApplyConfiguration) *NameConstraintsApplyConfiguration { + b.Permitted = value + return b +} + +// WithExcluded sets the Excluded field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Excluded field is set to the value of the last call. +func (b *NameConstraintsApplyConfiguration) WithExcluded(value *NameConstraintItemApplyConfiguration) *NameConstraintsApplyConfiguration { + b.Excluded = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/othername.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/othername.go new file mode 100644 index 0000000000..8d6bb81290 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/othername.go @@ -0,0 +1,53 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// OtherNameApplyConfiguration represents a declarative configuration of the OtherName type for use +// with apply. +type OtherNameApplyConfiguration struct { + // OID is the object identifier for the otherName SAN. + // The object identifier must be expressed as a dotted string, for + // example, "1.2.840.113556.1.4.221". + OID *string `json:"oid,omitempty"` + // utf8Value is the string value of the otherName SAN. + // The utf8Value accepts any valid UTF8 string to set as value for the otherName SAN. + UTF8Value *string `json:"utf8Value,omitempty"` +} + +// OtherNameApplyConfiguration constructs a declarative configuration of the OtherName type for use with +// apply. +func OtherName() *OtherNameApplyConfiguration { + return &OtherNameApplyConfiguration{} +} + +// WithOID sets the OID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the OID field is set to the value of the last call. +func (b *OtherNameApplyConfiguration) WithOID(value string) *OtherNameApplyConfiguration { + b.OID = &value + return b +} + +// WithUTF8Value sets the UTF8Value field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the UTF8Value field is set to the value of the last call. +func (b *OtherNameApplyConfiguration) WithUTF8Value(value string) *OtherNameApplyConfiguration { + b.UTF8Value = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/pkcs12keystore.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/pkcs12keystore.go new file mode 100644 index 0000000000..63f7a2949a --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/pkcs12keystore.go @@ -0,0 +1,99 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + certmanagerv1 "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1" + metav1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1" +) + +// PKCS12KeystoreApplyConfiguration represents a declarative configuration of the PKCS12Keystore type for use +// with apply. +// +// PKCS12 configures options for storing a PKCS12 keystore in the +// `spec.secretName` Secret resource. +type PKCS12KeystoreApplyConfiguration struct { + // Create enables PKCS12 keystore creation for the Certificate. + // If true, a file named `keystore.p12` will be created in the target + // Secret resource, encrypted using the password stored in + // `passwordSecretRef` or in `password`. + // The keystore file will be updated immediately. + // If the issuer provided a CA certificate, a file named `truststore.p12` will + // also be created in the target Secret resource, encrypted using the + // password stored in `passwordSecretRef` containing the issuing Certificate + // Authority + Create *bool `json:"create,omitempty"` + // Profile specifies the key and certificate encryption algorithms and the HMAC algorithm + // used to create the PKCS12 keystore. Default value is `LegacyRC2` for backward compatibility. + // + // If provided, allowed values are: + // `LegacyRC2`: Deprecated. Not supported by default in OpenSSL 3 or Java 20. + // `LegacyDES`: Less secure algorithm. Use this option for maximal compatibility. + // `Modern2023`: Secure algorithm. Use this option in case you have to always use secure algorithms + // (e.g., because of company policy). Please note that the security of the algorithm is not that important + // in reality, because the unencrypted certificate and private key are also stored in the Secret. + Profile *certmanagerv1.PKCS12Profile `json:"profile,omitempty"` + // PasswordSecretRef is a reference to a non-empty key in a Secret resource + // containing the password used to encrypt the PKCS#12 keystore. + // Mutually exclusive with password. + // One of password or passwordSecretRef must provide a password with a non-zero length. + PasswordSecretRef *metav1.SecretKeySelectorApplyConfiguration `json:"passwordSecretRef,omitempty"` + // Password provides a literal password used to encrypt the PKCS#12 keystore. + // Mutually exclusive with passwordSecretRef. + // One of password or passwordSecretRef must provide a password with a non-zero length. + Password *string `json:"password,omitempty"` +} + +// PKCS12KeystoreApplyConfiguration constructs a declarative configuration of the PKCS12Keystore type for use with +// apply. +func PKCS12Keystore() *PKCS12KeystoreApplyConfiguration { + return &PKCS12KeystoreApplyConfiguration{} +} + +// WithCreate sets the Create field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Create field is set to the value of the last call. +func (b *PKCS12KeystoreApplyConfiguration) WithCreate(value bool) *PKCS12KeystoreApplyConfiguration { + b.Create = &value + return b +} + +// WithProfile sets the Profile field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Profile field is set to the value of the last call. +func (b *PKCS12KeystoreApplyConfiguration) WithProfile(value certmanagerv1.PKCS12Profile) *PKCS12KeystoreApplyConfiguration { + b.Profile = &value + return b +} + +// WithPasswordSecretRef sets the PasswordSecretRef field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the PasswordSecretRef field is set to the value of the last call. +func (b *PKCS12KeystoreApplyConfiguration) WithPasswordSecretRef(value *metav1.SecretKeySelectorApplyConfiguration) *PKCS12KeystoreApplyConfiguration { + b.PasswordSecretRef = value + return b +} + +// WithPassword sets the Password field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Password field is set to the value of the last call. +func (b *PKCS12KeystoreApplyConfiguration) WithPassword(value string) *PKCS12KeystoreApplyConfiguration { + b.Password = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/selfsignedissuer.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/selfsignedissuer.go new file mode 100644 index 0000000000..02897612a7 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/selfsignedissuer.go @@ -0,0 +1,47 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// SelfSignedIssuerApplyConfiguration represents a declarative configuration of the SelfSignedIssuer type for use +// with apply. +// +// Configures an issuer to 'self sign' certificates using the +// private key used to create the CertificateRequest object. +type SelfSignedIssuerApplyConfiguration struct { + // The CRL distribution points is an X.509 v3 certificate extension which identifies + // the location of the CRL from which the revocation of this certificate can be checked. + // If not set certificate will be issued without CDP. Values are strings. + CRLDistributionPoints []string `json:"crlDistributionPoints,omitempty"` +} + +// SelfSignedIssuerApplyConfiguration constructs a declarative configuration of the SelfSignedIssuer type for use with +// apply. +func SelfSignedIssuer() *SelfSignedIssuerApplyConfiguration { + return &SelfSignedIssuerApplyConfiguration{} +} + +// WithCRLDistributionPoints adds the given value to the CRLDistributionPoints field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the CRLDistributionPoints field. +func (b *SelfSignedIssuerApplyConfiguration) WithCRLDistributionPoints(values ...string) *SelfSignedIssuerApplyConfiguration { + for i := range values { + b.CRLDistributionPoints = append(b.CRLDistributionPoints, values[i]) + } + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/serviceaccountref.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/serviceaccountref.go new file mode 100644 index 0000000000..b27ea7a244 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/serviceaccountref.go @@ -0,0 +1,59 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// ServiceAccountRefApplyConfiguration represents a declarative configuration of the ServiceAccountRef type for use +// with apply. +// +// ServiceAccountRef is a service account used by cert-manager to request a +// token. By default two audiences are included: the address of the Vault server as specified +// on the issuer, and a generated audience taking the form of `vault://namespace-name/issuer-name` +// for an Issuer and `vault://issuer-name` for a ClusterIssuer. The expiration of the +// token is also set by cert-manager to 10 minutes. +type ServiceAccountRefApplyConfiguration struct { + // Name of the ServiceAccount used to request a token. + Name *string `json:"name,omitempty"` + // TokenAudiences is an optional list of extra audiences to include in the token passed to Vault. + // The default audiences are always included in the token. + TokenAudiences []string `json:"audiences,omitempty"` +} + +// ServiceAccountRefApplyConfiguration constructs a declarative configuration of the ServiceAccountRef type for use with +// apply. +func ServiceAccountRef() *ServiceAccountRefApplyConfiguration { + return &ServiceAccountRefApplyConfiguration{} +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *ServiceAccountRefApplyConfiguration) WithName(value string) *ServiceAccountRefApplyConfiguration { + b.Name = &value + return b +} + +// WithTokenAudiences adds the given value to the TokenAudiences field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the TokenAudiences field. +func (b *ServiceAccountRefApplyConfiguration) WithTokenAudiences(values ...string) *ServiceAccountRefApplyConfiguration { + for i := range values { + b.TokenAudiences = append(b.TokenAudiences, values[i]) + } + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/vaultapprole.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/vaultapprole.go new file mode 100644 index 0000000000..a079a7b4b0 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/vaultapprole.go @@ -0,0 +1,72 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1" +) + +// VaultAppRoleApplyConfiguration represents a declarative configuration of the VaultAppRole type for use +// with apply. +// +// VaultAppRole authenticates with Vault using the App Role auth mechanism, +// with the role and secret stored in a Kubernetes Secret resource. +type VaultAppRoleApplyConfiguration struct { + // Path where the App Role authentication backend is mounted in Vault, e.g: + // "approle" + Path *string `json:"path,omitempty"` + // RoleID configured in the App Role authentication backend when setting + // up the authentication backend in Vault. + RoleId *string `json:"roleId,omitempty"` + // Reference to a key in a Secret that contains the App Role secret used + // to authenticate with Vault. + // The `key` field must be specified and denotes which entry within the Secret + // resource is used as the app role secret. + SecretRef *metav1.SecretKeySelectorApplyConfiguration `json:"secretRef,omitempty"` +} + +// VaultAppRoleApplyConfiguration constructs a declarative configuration of the VaultAppRole type for use with +// apply. +func VaultAppRole() *VaultAppRoleApplyConfiguration { + return &VaultAppRoleApplyConfiguration{} +} + +// WithPath sets the Path field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Path field is set to the value of the last call. +func (b *VaultAppRoleApplyConfiguration) WithPath(value string) *VaultAppRoleApplyConfiguration { + b.Path = &value + return b +} + +// WithRoleId sets the RoleId field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the RoleId field is set to the value of the last call. +func (b *VaultAppRoleApplyConfiguration) WithRoleId(value string) *VaultAppRoleApplyConfiguration { + b.RoleId = &value + return b +} + +// WithSecretRef sets the SecretRef field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the SecretRef field is set to the value of the last call. +func (b *VaultAppRoleApplyConfiguration) WithSecretRef(value *metav1.SecretKeySelectorApplyConfiguration) *VaultAppRoleApplyConfiguration { + b.SecretRef = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/vaultauth.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/vaultauth.go new file mode 100644 index 0000000000..f498833eb7 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/vaultauth.go @@ -0,0 +1,81 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1" +) + +// VaultAuthApplyConfiguration represents a declarative configuration of the VaultAuth type for use +// with apply. +// +// VaultAuth is configuration used to authenticate with a Vault server. The +// order of precedence is [`tokenSecretRef`, `appRole`, `clientCertificate` or `kubernetes`]. +type VaultAuthApplyConfiguration struct { + // TokenSecretRef authenticates with Vault by presenting a token. + TokenSecretRef *metav1.SecretKeySelectorApplyConfiguration `json:"tokenSecretRef,omitempty"` + // AppRole authenticates with Vault using the App Role auth mechanism, + // with the role and secret stored in a Kubernetes Secret resource. + AppRole *VaultAppRoleApplyConfiguration `json:"appRole,omitempty"` + // ClientCertificate authenticates with Vault by presenting a client + // certificate during the request's TLS handshake. + // Works only when using HTTPS protocol. + ClientCertificate *VaultClientCertificateAuthApplyConfiguration `json:"clientCertificate,omitempty"` + // Kubernetes authenticates with Vault by passing the ServiceAccount + // token stored in the named Secret resource to the Vault server. + Kubernetes *VaultKubernetesAuthApplyConfiguration `json:"kubernetes,omitempty"` +} + +// VaultAuthApplyConfiguration constructs a declarative configuration of the VaultAuth type for use with +// apply. +func VaultAuth() *VaultAuthApplyConfiguration { + return &VaultAuthApplyConfiguration{} +} + +// WithTokenSecretRef sets the TokenSecretRef field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the TokenSecretRef field is set to the value of the last call. +func (b *VaultAuthApplyConfiguration) WithTokenSecretRef(value *metav1.SecretKeySelectorApplyConfiguration) *VaultAuthApplyConfiguration { + b.TokenSecretRef = value + return b +} + +// WithAppRole sets the AppRole field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the AppRole field is set to the value of the last call. +func (b *VaultAuthApplyConfiguration) WithAppRole(value *VaultAppRoleApplyConfiguration) *VaultAuthApplyConfiguration { + b.AppRole = value + return b +} + +// WithClientCertificate sets the ClientCertificate field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ClientCertificate field is set to the value of the last call. +func (b *VaultAuthApplyConfiguration) WithClientCertificate(value *VaultClientCertificateAuthApplyConfiguration) *VaultAuthApplyConfiguration { + b.ClientCertificate = value + return b +} + +// WithKubernetes sets the Kubernetes field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Kubernetes field is set to the value of the last call. +func (b *VaultAuthApplyConfiguration) WithKubernetes(value *VaultKubernetesAuthApplyConfiguration) *VaultAuthApplyConfiguration { + b.Kubernetes = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/vaultclientcertificateauth.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/vaultclientcertificateauth.go new file mode 100644 index 0000000000..d7b4b2acef --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/vaultclientcertificateauth.go @@ -0,0 +1,69 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// VaultClientCertificateAuthApplyConfiguration represents a declarative configuration of the VaultClientCertificateAuth type for use +// with apply. +// +// VaultClientCertificateAuth is used to authenticate against Vault using a client +// certificate stored in a Secret. +type VaultClientCertificateAuthApplyConfiguration struct { + // The Vault mountPath here is the mount path to use when authenticating with + // Vault. For example, setting a value to `/v1/auth/foo`, will use the path + // `/v1/auth/foo/login` to authenticate with Vault. If unspecified, the + // default value "/v1/auth/cert" will be used. + Path *string `json:"mountPath,omitempty"` + // Reference to Kubernetes Secret of type "kubernetes.io/tls" (hence containing + // tls.crt and tls.key) used to authenticate to Vault using TLS client + // authentication. + SecretName *string `json:"secretName,omitempty"` + // Name of the certificate role to authenticate against. + // If not set, matching any certificate role, if available. + Name *string `json:"name,omitempty"` +} + +// VaultClientCertificateAuthApplyConfiguration constructs a declarative configuration of the VaultClientCertificateAuth type for use with +// apply. +func VaultClientCertificateAuth() *VaultClientCertificateAuthApplyConfiguration { + return &VaultClientCertificateAuthApplyConfiguration{} +} + +// WithPath sets the Path field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Path field is set to the value of the last call. +func (b *VaultClientCertificateAuthApplyConfiguration) WithPath(value string) *VaultClientCertificateAuthApplyConfiguration { + b.Path = &value + return b +} + +// WithSecretName sets the SecretName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the SecretName field is set to the value of the last call. +func (b *VaultClientCertificateAuthApplyConfiguration) WithSecretName(value string) *VaultClientCertificateAuthApplyConfiguration { + b.SecretName = &value + return b +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *VaultClientCertificateAuthApplyConfiguration) WithName(value string) *VaultClientCertificateAuthApplyConfiguration { + b.Name = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/vaultissuer.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/vaultissuer.go new file mode 100644 index 0000000000..6f127caa05 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/vaultissuer.go @@ -0,0 +1,144 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1" +) + +// VaultIssuerApplyConfiguration represents a declarative configuration of the VaultIssuer type for use +// with apply. +// +// Configures an issuer to sign certificates using a HashiCorp Vault +// PKI backend. +type VaultIssuerApplyConfiguration struct { + // Auth configures how cert-manager authenticates with the Vault server. + Auth *VaultAuthApplyConfiguration `json:"auth,omitempty"` + // Server is the connection address for the Vault server, e.g: "https://vault.example.com:8200". + Server *string `json:"server,omitempty"` + // ServerName is used to verify the hostname on the returned certificates + // by the Vault server. + ServerName *string `json:"serverName,omitempty"` + // Path is the mount path of the Vault PKI backend's `sign` endpoint, e.g: + // "my_pki_mount/sign/my-role-name". + Path *string `json:"path,omitempty"` + // Name of the vault namespace. Namespaces is a set of features within Vault Enterprise that allows Vault environments to support Secure Multi-tenancy. e.g: "ns1" + // More about namespaces can be found here https://www.vaultproject.io/docs/enterprise/namespaces + Namespace *string `json:"namespace,omitempty"` + // Base64-encoded bundle of PEM CAs which will be used to validate the certificate + // chain presented by Vault. Only used if using HTTPS to connect to Vault and + // ignored for HTTP connections. + // Mutually exclusive with CABundleSecretRef. + // If neither CABundle nor CABundleSecretRef are defined, the certificate bundle in + // the cert-manager controller container is used to validate the TLS connection. + CABundle []byte `json:"caBundle,omitempty"` + // Reference to a Secret containing a bundle of PEM-encoded CAs to use when + // verifying the certificate chain presented by Vault when using HTTPS. + // Mutually exclusive with CABundle. + // If neither CABundle nor CABundleSecretRef are defined, the certificate bundle in + // the cert-manager controller container is used to validate the TLS connection. + // If no key for the Secret is specified, cert-manager will default to 'ca.crt'. + CABundleSecretRef *metav1.SecretKeySelectorApplyConfiguration `json:"caBundleSecretRef,omitempty"` + // Reference to a Secret containing a PEM-encoded Client Certificate to use when the + // Vault server requires mTLS. + ClientCertSecretRef *metav1.SecretKeySelectorApplyConfiguration `json:"clientCertSecretRef,omitempty"` + // Reference to a Secret containing a PEM-encoded Client Private Key to use when the + // Vault server requires mTLS. + ClientKeySecretRef *metav1.SecretKeySelectorApplyConfiguration `json:"clientKeySecretRef,omitempty"` +} + +// VaultIssuerApplyConfiguration constructs a declarative configuration of the VaultIssuer type for use with +// apply. +func VaultIssuer() *VaultIssuerApplyConfiguration { + return &VaultIssuerApplyConfiguration{} +} + +// WithAuth sets the Auth field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Auth field is set to the value of the last call. +func (b *VaultIssuerApplyConfiguration) WithAuth(value *VaultAuthApplyConfiguration) *VaultIssuerApplyConfiguration { + b.Auth = value + return b +} + +// WithServer sets the Server field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Server field is set to the value of the last call. +func (b *VaultIssuerApplyConfiguration) WithServer(value string) *VaultIssuerApplyConfiguration { + b.Server = &value + return b +} + +// WithServerName sets the ServerName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ServerName field is set to the value of the last call. +func (b *VaultIssuerApplyConfiguration) WithServerName(value string) *VaultIssuerApplyConfiguration { + b.ServerName = &value + return b +} + +// WithPath sets the Path field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Path field is set to the value of the last call. +func (b *VaultIssuerApplyConfiguration) WithPath(value string) *VaultIssuerApplyConfiguration { + b.Path = &value + return b +} + +// WithNamespace sets the Namespace field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Namespace field is set to the value of the last call. +func (b *VaultIssuerApplyConfiguration) WithNamespace(value string) *VaultIssuerApplyConfiguration { + b.Namespace = &value + return b +} + +// WithCABundle adds the given value to the CABundle field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the CABundle field. +func (b *VaultIssuerApplyConfiguration) WithCABundle(values ...byte) *VaultIssuerApplyConfiguration { + for i := range values { + b.CABundle = append(b.CABundle, values[i]) + } + return b +} + +// WithCABundleSecretRef sets the CABundleSecretRef field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CABundleSecretRef field is set to the value of the last call. +func (b *VaultIssuerApplyConfiguration) WithCABundleSecretRef(value *metav1.SecretKeySelectorApplyConfiguration) *VaultIssuerApplyConfiguration { + b.CABundleSecretRef = value + return b +} + +// WithClientCertSecretRef sets the ClientCertSecretRef field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ClientCertSecretRef field is set to the value of the last call. +func (b *VaultIssuerApplyConfiguration) WithClientCertSecretRef(value *metav1.SecretKeySelectorApplyConfiguration) *VaultIssuerApplyConfiguration { + b.ClientCertSecretRef = value + return b +} + +// WithClientKeySecretRef sets the ClientKeySecretRef field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ClientKeySecretRef field is set to the value of the last call. +func (b *VaultIssuerApplyConfiguration) WithClientKeySecretRef(value *metav1.SecretKeySelectorApplyConfiguration) *VaultIssuerApplyConfiguration { + b.ClientKeySecretRef = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/vaultkubernetesauth.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/vaultkubernetesauth.go new file mode 100644 index 0000000000..b1f941cff1 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/vaultkubernetesauth.go @@ -0,0 +1,87 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1" +) + +// VaultKubernetesAuthApplyConfiguration represents a declarative configuration of the VaultKubernetesAuth type for use +// with apply. +// +// Authenticate against Vault using a Kubernetes ServiceAccount token stored in +// a Secret. +type VaultKubernetesAuthApplyConfiguration struct { + // The Vault mountPath here is the mount path to use when authenticating with + // Vault. For example, setting a value to `/v1/auth/foo`, will use the path + // `/v1/auth/foo/login` to authenticate with Vault. If unspecified, the + // default value "/v1/auth/kubernetes" will be used. + Path *string `json:"mountPath,omitempty"` + // The required Secret field containing a Kubernetes ServiceAccount JWT used + // for authenticating with Vault. Use of 'ambient credentials' is not + // supported. + SecretRef *metav1.SecretKeySelectorApplyConfiguration `json:"secretRef,omitempty"` + // A reference to a service account that will be used to request a bound + // token (also known as "projected token"). Compared to using "secretRef", + // using this field means that you don't rely on statically bound tokens. To + // use this field, you must configure an RBAC rule to let cert-manager + // request a token. + ServiceAccountRef *ServiceAccountRefApplyConfiguration `json:"serviceAccountRef,omitempty"` + // A required field containing the Vault Role to assume. A Role binds a + // Kubernetes ServiceAccount with a set of Vault policies. + Role *string `json:"role,omitempty"` +} + +// VaultKubernetesAuthApplyConfiguration constructs a declarative configuration of the VaultKubernetesAuth type for use with +// apply. +func VaultKubernetesAuth() *VaultKubernetesAuthApplyConfiguration { + return &VaultKubernetesAuthApplyConfiguration{} +} + +// WithPath sets the Path field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Path field is set to the value of the last call. +func (b *VaultKubernetesAuthApplyConfiguration) WithPath(value string) *VaultKubernetesAuthApplyConfiguration { + b.Path = &value + return b +} + +// WithSecretRef sets the SecretRef field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the SecretRef field is set to the value of the last call. +func (b *VaultKubernetesAuthApplyConfiguration) WithSecretRef(value *metav1.SecretKeySelectorApplyConfiguration) *VaultKubernetesAuthApplyConfiguration { + b.SecretRef = value + return b +} + +// WithServiceAccountRef sets the ServiceAccountRef field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ServiceAccountRef field is set to the value of the last call. +func (b *VaultKubernetesAuthApplyConfiguration) WithServiceAccountRef(value *ServiceAccountRefApplyConfiguration) *VaultKubernetesAuthApplyConfiguration { + b.ServiceAccountRef = value + return b +} + +// WithRole sets the Role field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Role field is set to the value of the last call. +func (b *VaultKubernetesAuthApplyConfiguration) WithRole(value string) *VaultKubernetesAuthApplyConfiguration { + b.Role = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/venaficloud.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/venaficloud.go new file mode 100644 index 0000000000..a06ebbbc3a --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/venaficloud.go @@ -0,0 +1,57 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1" +) + +// VenafiCloudApplyConfiguration represents a declarative configuration of the VenafiCloud type for use +// with apply. +// +// VenafiCloud defines connection configuration details for CyberArk Certificate Manager SaaS +type VenafiCloudApplyConfiguration struct { + // URL is the base URL for CyberArk Certificate Manager SaaS. + // Defaults to "https://api.venafi.cloud/". + URL *string `json:"url,omitempty"` + // APITokenSecretRef is a secret key selector for the CyberArk Certificate Manager SaaS API token. + APITokenSecretRef *metav1.SecretKeySelectorApplyConfiguration `json:"apiTokenSecretRef,omitempty"` +} + +// VenafiCloudApplyConfiguration constructs a declarative configuration of the VenafiCloud type for use with +// apply. +func VenafiCloud() *VenafiCloudApplyConfiguration { + return &VenafiCloudApplyConfiguration{} +} + +// WithURL sets the URL field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the URL field is set to the value of the last call. +func (b *VenafiCloudApplyConfiguration) WithURL(value string) *VenafiCloudApplyConfiguration { + b.URL = &value + return b +} + +// WithAPITokenSecretRef sets the APITokenSecretRef field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the APITokenSecretRef field is set to the value of the last call. +func (b *VenafiCloudApplyConfiguration) WithAPITokenSecretRef(value *metav1.SecretKeySelectorApplyConfiguration) *VenafiCloudApplyConfiguration { + b.APITokenSecretRef = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/venafiissuer.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/venafiissuer.go new file mode 100644 index 0000000000..aa44d627a4 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/venafiissuer.go @@ -0,0 +1,68 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// VenafiIssuerApplyConfiguration represents a declarative configuration of the VenafiIssuer type for use +// with apply. +// +// Configures an issuer to sign certificates using a CyberArk Certificate Manager Self-Hosted +// or SaaS policy zone. +type VenafiIssuerApplyConfiguration struct { + // Zone is the Certificate Manager Policy Zone to use for this issuer. + // All requests made to the Certificate Manager platform will be restricted by the named + // zone policy. + // This field is required. + Zone *string `json:"zone,omitempty"` + // TPP specifies CyberArk Certificate Manager Self-Hosted configuration settings. + // Only one of CyberArk Certificate Manager may be specified. + TPP *VenafiTPPApplyConfiguration `json:"tpp,omitempty"` + // Cloud specifies the CyberArk Certificate Manager SaaS configuration settings. + // Only one of CyberArk Certificate Manager may be specified. + Cloud *VenafiCloudApplyConfiguration `json:"cloud,omitempty"` +} + +// VenafiIssuerApplyConfiguration constructs a declarative configuration of the VenafiIssuer type for use with +// apply. +func VenafiIssuer() *VenafiIssuerApplyConfiguration { + return &VenafiIssuerApplyConfiguration{} +} + +// WithZone sets the Zone field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Zone field is set to the value of the last call. +func (b *VenafiIssuerApplyConfiguration) WithZone(value string) *VenafiIssuerApplyConfiguration { + b.Zone = &value + return b +} + +// WithTPP sets the TPP field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the TPP field is set to the value of the last call. +func (b *VenafiIssuerApplyConfiguration) WithTPP(value *VenafiTPPApplyConfiguration) *VenafiIssuerApplyConfiguration { + b.TPP = value + return b +} + +// WithCloud sets the Cloud field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Cloud field is set to the value of the last call. +func (b *VenafiIssuerApplyConfiguration) WithCloud(value *VenafiCloudApplyConfiguration) *VenafiIssuerApplyConfiguration { + b.Cloud = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/venafitpp.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/venafitpp.go new file mode 100644 index 0000000000..98e80ce117 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/venafitpp.go @@ -0,0 +1,88 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1" +) + +// VenafiTPPApplyConfiguration represents a declarative configuration of the VenafiTPP type for use +// with apply. +// +// VenafiTPP defines connection configuration details for a CyberArk Certificate Manager Self-Hosted instance +type VenafiTPPApplyConfiguration struct { + // URL is the base URL for the vedsdk endpoint of the CyberArk Certificate Manager Self-Hosted instance, + // for example: "https://tpp.example.com/vedsdk". + URL *string `json:"url,omitempty"` + // CredentialsRef is a reference to a Secret containing the CyberArk Certificate Manager Self-Hosted API credentials. + // The secret must contain the key 'access-token' for the Access Token Authentication, + // or two keys, 'username' and 'password' for the API Keys Authentication. + CredentialsRef *metav1.LocalObjectReferenceApplyConfiguration `json:"credentialsRef,omitempty"` + // Base64-encoded bundle of PEM CAs which will be used to validate the certificate + // chain presented by the CyberArk Certificate Manager Self-Hosted server. Only used if using HTTPS; ignored for HTTP. + // If undefined, the certificate bundle in the cert-manager controller container + // is used to validate the chain. + CABundle []byte `json:"caBundle,omitempty"` + // Reference to a Secret containing a base64-encoded bundle of PEM CAs + // which will be used to validate the certificate chain presented by the CyberArk Certificate Manager Self-Hosted server. + // Only used if using HTTPS; ignored for HTTP. Mutually exclusive with CABundle. + // If neither CABundle nor CABundleSecretRef is defined, the certificate bundle in + // the cert-manager controller container is used to validate the TLS connection. + CABundleSecretRef *metav1.SecretKeySelectorApplyConfiguration `json:"caBundleSecretRef,omitempty"` +} + +// VenafiTPPApplyConfiguration constructs a declarative configuration of the VenafiTPP type for use with +// apply. +func VenafiTPP() *VenafiTPPApplyConfiguration { + return &VenafiTPPApplyConfiguration{} +} + +// WithURL sets the URL field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the URL field is set to the value of the last call. +func (b *VenafiTPPApplyConfiguration) WithURL(value string) *VenafiTPPApplyConfiguration { + b.URL = &value + return b +} + +// WithCredentialsRef sets the CredentialsRef field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CredentialsRef field is set to the value of the last call. +func (b *VenafiTPPApplyConfiguration) WithCredentialsRef(value *metav1.LocalObjectReferenceApplyConfiguration) *VenafiTPPApplyConfiguration { + b.CredentialsRef = value + return b +} + +// WithCABundle adds the given value to the CABundle field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the CABundle field. +func (b *VenafiTPPApplyConfiguration) WithCABundle(values ...byte) *VenafiTPPApplyConfiguration { + for i := range values { + b.CABundle = append(b.CABundle, values[i]) + } + return b +} + +// WithCABundleSecretRef sets the CABundleSecretRef field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CABundleSecretRef field is set to the value of the last call. +func (b *VenafiTPPApplyConfiguration) WithCABundleSecretRef(value *metav1.SecretKeySelectorApplyConfiguration) *VenafiTPPApplyConfiguration { + b.CABundleSecretRef = value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/x509subject.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/x509subject.go new file mode 100644 index 0000000000..cb9c1fefca --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1/x509subject.go @@ -0,0 +1,126 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// X509SubjectApplyConfiguration represents a declarative configuration of the X509Subject type for use +// with apply. +// +// X509Subject Full X509 name specification +type X509SubjectApplyConfiguration struct { + // Organizations to be used on the Certificate. + Organizations []string `json:"organizations,omitempty"` + // Countries to be used on the Certificate. + Countries []string `json:"countries,omitempty"` + // Organizational Units to be used on the Certificate. + OrganizationalUnits []string `json:"organizationalUnits,omitempty"` + // Cities to be used on the Certificate. + Localities []string `json:"localities,omitempty"` + // State/Provinces to be used on the Certificate. + Provinces []string `json:"provinces,omitempty"` + // Street addresses to be used on the Certificate. + StreetAddresses []string `json:"streetAddresses,omitempty"` + // Postal codes to be used on the Certificate. + PostalCodes []string `json:"postalCodes,omitempty"` + // Serial number to be used on the Certificate. + SerialNumber *string `json:"serialNumber,omitempty"` +} + +// X509SubjectApplyConfiguration constructs a declarative configuration of the X509Subject type for use with +// apply. +func X509Subject() *X509SubjectApplyConfiguration { + return &X509SubjectApplyConfiguration{} +} + +// WithOrganizations adds the given value to the Organizations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Organizations field. +func (b *X509SubjectApplyConfiguration) WithOrganizations(values ...string) *X509SubjectApplyConfiguration { + for i := range values { + b.Organizations = append(b.Organizations, values[i]) + } + return b +} + +// WithCountries adds the given value to the Countries field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Countries field. +func (b *X509SubjectApplyConfiguration) WithCountries(values ...string) *X509SubjectApplyConfiguration { + for i := range values { + b.Countries = append(b.Countries, values[i]) + } + return b +} + +// WithOrganizationalUnits adds the given value to the OrganizationalUnits field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the OrganizationalUnits field. +func (b *X509SubjectApplyConfiguration) WithOrganizationalUnits(values ...string) *X509SubjectApplyConfiguration { + for i := range values { + b.OrganizationalUnits = append(b.OrganizationalUnits, values[i]) + } + return b +} + +// WithLocalities adds the given value to the Localities field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Localities field. +func (b *X509SubjectApplyConfiguration) WithLocalities(values ...string) *X509SubjectApplyConfiguration { + for i := range values { + b.Localities = append(b.Localities, values[i]) + } + return b +} + +// WithProvinces adds the given value to the Provinces field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Provinces field. +func (b *X509SubjectApplyConfiguration) WithProvinces(values ...string) *X509SubjectApplyConfiguration { + for i := range values { + b.Provinces = append(b.Provinces, values[i]) + } + return b +} + +// WithStreetAddresses adds the given value to the StreetAddresses field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the StreetAddresses field. +func (b *X509SubjectApplyConfiguration) WithStreetAddresses(values ...string) *X509SubjectApplyConfiguration { + for i := range values { + b.StreetAddresses = append(b.StreetAddresses, values[i]) + } + return b +} + +// WithPostalCodes adds the given value to the PostalCodes field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the PostalCodes field. +func (b *X509SubjectApplyConfiguration) WithPostalCodes(values ...string) *X509SubjectApplyConfiguration { + for i := range values { + b.PostalCodes = append(b.PostalCodes, values[i]) + } + return b +} + +// WithSerialNumber sets the SerialNumber field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the SerialNumber field is set to the value of the last call. +func (b *X509SubjectApplyConfiguration) WithSerialNumber(value string) *X509SubjectApplyConfiguration { + b.SerialNumber = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/internal/internal.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/internal/internal.go new file mode 100644 index 0000000000..cac0cadc5c --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/internal/internal.go @@ -0,0 +1,1923 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package internal + +import ( + fmt "fmt" + sync "sync" + + typed "sigs.k8s.io/structured-merge-diff/v6/typed" +) + +func Parser() *typed.Parser { + parserOnce.Do(func() { + var err error + parser, err = typed.NewParser(schemaYAML) + if err != nil { + panic(fmt.Sprintf("Failed to parse schema: %v", err)) + } + }) + return parser +} + +var parserOnce sync.Once +var parser *typed.Parser +var schemaYAML = typed.YAMLObject(`types: +- name: Affinity.v1.core.api.k8s.io + map: + fields: + - name: nodeAffinity + type: + namedType: NodeAffinity.v1.core.api.k8s.io + - name: podAffinity + type: + namedType: PodAffinity.v1.core.api.k8s.io + - name: podAntiAffinity + type: + namedType: PodAntiAffinity.v1.core.api.k8s.io +- name: Duration.v1.meta.apis.pkg.apimachinery.k8s.io + scalar: string +- name: FieldsV1.v1.meta.apis.pkg.apimachinery.k8s.io + map: + elementType: + scalar: untyped + list: + elementType: + namedType: __untyped_atomic_ + elementRelationship: atomic + map: + elementType: + namedType: __untyped_deduced_ + elementRelationship: separable +- name: JSON.v1.apiextensions.apis.pkg.apiextensions-apiserver.k8s.io + scalar: untyped + list: + elementType: + namedType: __untyped_atomic_ + elementRelationship: atomic + map: + elementType: + namedType: __untyped_deduced_ + elementRelationship: separable +- name: LabelSelector.v1.meta.apis.pkg.apimachinery.k8s.io + map: + fields: + - name: matchExpressions + type: + list: + elementType: + namedType: LabelSelectorRequirement.v1.meta.apis.pkg.apimachinery.k8s.io + elementRelationship: atomic + - name: matchLabels + type: + map: + elementType: + scalar: string + elementRelationship: atomic +- name: LabelSelectorRequirement.v1.meta.apis.pkg.apimachinery.k8s.io + map: + fields: + - name: key + type: + scalar: string + default: "" + - name: operator + type: + scalar: string + default: "" + - name: values + type: + list: + elementType: + scalar: string + elementRelationship: atomic +- name: LocalObjectReference.v1.core.api.k8s.io + map: + fields: + - name: name + type: + scalar: string + default: "" + elementRelationship: atomic +- name: ManagedFieldsEntry.v1.meta.apis.pkg.apimachinery.k8s.io + map: + fields: + - name: apiVersion + type: + scalar: string + - name: fieldsType + type: + scalar: string + - name: fieldsV1 + type: + namedType: FieldsV1.v1.meta.apis.pkg.apimachinery.k8s.io + - name: manager + type: + scalar: string + - name: operation + type: + scalar: string + - name: subresource + type: + scalar: string + - name: time + type: + namedType: Time.v1.meta.apis.pkg.apimachinery.k8s.io +- name: NodeAffinity.v1.core.api.k8s.io + map: + fields: + - name: preferredDuringSchedulingIgnoredDuringExecution + type: + list: + elementType: + namedType: PreferredSchedulingTerm.v1.core.api.k8s.io + elementRelationship: atomic + - name: requiredDuringSchedulingIgnoredDuringExecution + type: + namedType: NodeSelector.v1.core.api.k8s.io +- name: NodeSelector.v1.core.api.k8s.io + map: + fields: + - name: nodeSelectorTerms + type: + list: + elementType: + namedType: NodeSelectorTerm.v1.core.api.k8s.io + elementRelationship: atomic + elementRelationship: atomic +- name: NodeSelectorRequirement.v1.core.api.k8s.io + map: + fields: + - name: key + type: + scalar: string + default: "" + - name: operator + type: + scalar: string + default: "" + - name: values + type: + list: + elementType: + scalar: string + elementRelationship: atomic +- name: NodeSelectorTerm.v1.core.api.k8s.io + map: + fields: + - name: matchExpressions + type: + list: + elementType: + namedType: NodeSelectorRequirement.v1.core.api.k8s.io + elementRelationship: atomic + - name: matchFields + type: + list: + elementType: + namedType: NodeSelectorRequirement.v1.core.api.k8s.io + elementRelationship: atomic + elementRelationship: atomic +- name: ObjectMeta.v1.meta.apis.pkg.apimachinery.k8s.io + map: + fields: + - name: annotations + type: + map: + elementType: + scalar: string + - name: creationTimestamp + type: + namedType: Time.v1.meta.apis.pkg.apimachinery.k8s.io + - name: deletionGracePeriodSeconds + type: + scalar: numeric + - name: deletionTimestamp + type: + namedType: Time.v1.meta.apis.pkg.apimachinery.k8s.io + - name: finalizers + type: + list: + elementType: + scalar: string + elementRelationship: associative + - name: generateName + type: + scalar: string + - name: generation + type: + scalar: numeric + - name: labels + type: + map: + elementType: + scalar: string + - name: managedFields + type: + list: + elementType: + namedType: ManagedFieldsEntry.v1.meta.apis.pkg.apimachinery.k8s.io + elementRelationship: atomic + - name: name + type: + scalar: string + - name: namespace + type: + scalar: string + - name: ownerReferences + type: + list: + elementType: + namedType: OwnerReference.v1.meta.apis.pkg.apimachinery.k8s.io + elementRelationship: associative + keys: + - uid + - name: resourceVersion + type: + scalar: string + - name: selfLink + type: + scalar: string + - name: uid + type: + scalar: string +- name: OwnerReference.v1.meta.apis.pkg.apimachinery.k8s.io + map: + fields: + - name: apiVersion + type: + scalar: string + default: "" + - name: blockOwnerDeletion + type: + scalar: boolean + - name: controller + type: + scalar: boolean + - name: kind + type: + scalar: string + default: "" + - name: name + type: + scalar: string + default: "" + - name: uid + type: + scalar: string + default: "" + elementRelationship: atomic +- name: PodAffinity.v1.core.api.k8s.io + map: + fields: + - name: preferredDuringSchedulingIgnoredDuringExecution + type: + list: + elementType: + namedType: WeightedPodAffinityTerm.v1.core.api.k8s.io + elementRelationship: atomic + - name: requiredDuringSchedulingIgnoredDuringExecution + type: + list: + elementType: + namedType: PodAffinityTerm.v1.core.api.k8s.io + elementRelationship: atomic +- name: PodAffinityTerm.v1.core.api.k8s.io + map: + fields: + - name: labelSelector + type: + namedType: LabelSelector.v1.meta.apis.pkg.apimachinery.k8s.io + - name: matchLabelKeys + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: mismatchLabelKeys + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: namespaceSelector + type: + namedType: LabelSelector.v1.meta.apis.pkg.apimachinery.k8s.io + - name: namespaces + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: topologyKey + type: + scalar: string + default: "" +- name: PodAntiAffinity.v1.core.api.k8s.io + map: + fields: + - name: preferredDuringSchedulingIgnoredDuringExecution + type: + list: + elementType: + namedType: WeightedPodAffinityTerm.v1.core.api.k8s.io + elementRelationship: atomic + - name: requiredDuringSchedulingIgnoredDuringExecution + type: + list: + elementType: + namedType: PodAffinityTerm.v1.core.api.k8s.io + elementRelationship: atomic +- name: PreferredSchedulingTerm.v1.core.api.k8s.io + map: + fields: + - name: preference + type: + namedType: NodeSelectorTerm.v1.core.api.k8s.io + default: {} + - name: weight + type: + scalar: numeric + default: 0 +- name: Quantity.resource.api.pkg.apimachinery.k8s.io + scalar: string +- name: SELinuxOptions.v1.core.api.k8s.io + map: + fields: + - name: level + type: + scalar: string + - name: role + type: + scalar: string + - name: type + type: + scalar: string + - name: user + type: + scalar: string +- name: SeccompProfile.v1.core.api.k8s.io + map: + fields: + - name: localhostProfile + type: + scalar: string + - name: type + type: + scalar: string + default: "" + unions: + - discriminator: type + fields: + - fieldName: localhostProfile + discriminatorValue: LocalhostProfile +- name: Sysctl.v1.core.api.k8s.io + map: + fields: + - name: name + type: + scalar: string + default: "" + - name: value + type: + scalar: string + default: "" +- name: Time.v1.meta.apis.pkg.apimachinery.k8s.io + scalar: untyped +- name: Toleration.v1.core.api.k8s.io + map: + fields: + - name: effect + type: + scalar: string + - name: key + type: + scalar: string + - name: operator + type: + scalar: string + - name: tolerationSeconds + type: + scalar: numeric + - name: value + type: + scalar: string +- name: WeightedPodAffinityTerm.v1.core.api.k8s.io + map: + fields: + - name: podAffinityTerm + type: + namedType: PodAffinityTerm.v1.core.api.k8s.io + default: {} + - name: weight + type: + scalar: numeric + default: 0 +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEAuthorization + map: + fields: + - name: challenges + type: + list: + elementType: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallenge + elementRelationship: atomic + - name: identifier + type: + scalar: string + - name: initialState + type: + scalar: string + - name: url + type: + scalar: string + default: "" + - name: wildcard + type: + scalar: boolean +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallenge + map: + fields: + - name: token + type: + scalar: string + default: "" + - name: type + type: + scalar: string + default: "" + - name: url + type: + scalar: string + default: "" +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolver + map: + fields: + - name: dns01 + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolverDNS01 + - name: http01 + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolverHTTP01 + - name: selector + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.CertificateDNSNameSelector +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolverDNS01 + map: + fields: + - name: acmeDNS + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEIssuerDNS01ProviderAcmeDNS + - name: akamai + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEIssuerDNS01ProviderAkamai + - name: azureDNS + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEIssuerDNS01ProviderAzureDNS + - name: cloudDNS + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEIssuerDNS01ProviderCloudDNS + - name: cloudflare + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEIssuerDNS01ProviderCloudflare + - name: cnameStrategy + type: + scalar: string + - name: digitalocean + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEIssuerDNS01ProviderDigitalOcean + - name: rfc2136 + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEIssuerDNS01ProviderRFC2136 + - name: route53 + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEIssuerDNS01ProviderRoute53 + - name: webhook + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEIssuerDNS01ProviderWebhook +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolverHTTP01 + map: + fields: + - name: gatewayHTTPRoute + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolverHTTP01GatewayHTTPRoute + - name: ingress + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolverHTTP01Ingress +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolverHTTP01GatewayHTTPRoute + map: + fields: + - name: labels + type: + map: + elementType: + scalar: string + - name: parentRefs + type: + list: + elementType: + namedType: io.k8s.sigs.gateway-api.apis.v1.ParentReference + elementRelationship: atomic + - name: podTemplate + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolverHTTP01IngressPodTemplate + - name: serviceType + type: + scalar: string +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolverHTTP01Ingress + map: + fields: + - name: class + type: + scalar: string + - name: ingressClassName + type: + scalar: string + - name: ingressTemplate + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolverHTTP01IngressTemplate + - name: name + type: + scalar: string + - name: podTemplate + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolverHTTP01IngressPodTemplate + - name: serviceType + type: + scalar: string +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolverHTTP01IngressObjectMeta + map: + fields: + - name: annotations + type: + map: + elementType: + scalar: string + - name: labels + type: + map: + elementType: + scalar: string +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolverHTTP01IngressPodObjectMeta + map: + fields: + - name: annotations + type: + map: + elementType: + scalar: string + - name: labels + type: + map: + elementType: + scalar: string +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolverHTTP01IngressPodResources + map: + fields: + - name: limits + type: + map: + elementType: + namedType: Quantity.resource.api.pkg.apimachinery.k8s.io + - name: requests + type: + map: + elementType: + namedType: Quantity.resource.api.pkg.apimachinery.k8s.io +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolverHTTP01IngressPodSecurityContext + map: + fields: + - name: fsGroup + type: + scalar: numeric + - name: fsGroupChangePolicy + type: + scalar: string + - name: runAsGroup + type: + scalar: numeric + - name: runAsNonRoot + type: + scalar: boolean + - name: runAsUser + type: + scalar: numeric + - name: seLinuxOptions + type: + namedType: SELinuxOptions.v1.core.api.k8s.io + - name: seccompProfile + type: + namedType: SeccompProfile.v1.core.api.k8s.io + - name: supplementalGroups + type: + list: + elementType: + scalar: numeric + elementRelationship: atomic + - name: sysctls + type: + list: + elementType: + namedType: Sysctl.v1.core.api.k8s.io + elementRelationship: atomic +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolverHTTP01IngressPodSpec + map: + fields: + - name: affinity + type: + namedType: Affinity.v1.core.api.k8s.io + - name: imagePullSecrets + type: + list: + elementType: + namedType: LocalObjectReference.v1.core.api.k8s.io + elementRelationship: associative + keys: + - name + - name: nodeSelector + type: + map: + elementType: + scalar: string + - name: priorityClassName + type: + scalar: string + - name: resources + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolverHTTP01IngressPodResources + - name: securityContext + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolverHTTP01IngressPodSecurityContext + - name: serviceAccountName + type: + scalar: string + - name: tolerations + type: + list: + elementType: + namedType: Toleration.v1.core.api.k8s.io + elementRelationship: atomic +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolverHTTP01IngressPodTemplate + map: + fields: + - name: metadata + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolverHTTP01IngressPodObjectMeta + default: {} + - name: spec + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolverHTTP01IngressPodSpec + default: {} +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolverHTTP01IngressTemplate + map: + fields: + - name: metadata + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolverHTTP01IngressObjectMeta + default: {} +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEExternalAccountBinding + map: + fields: + - name: keyAlgorithm + type: + scalar: string + - name: keyID + type: + scalar: string + default: "" + - name: keySecretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector + default: {} +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEIssuer + map: + fields: + - name: caBundle + type: + scalar: string + - name: disableAccountKeyGeneration + type: + scalar: boolean + - name: email + type: + scalar: string + - name: enableDurationFeature + type: + scalar: boolean + - name: externalAccountBinding + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEExternalAccountBinding + - name: preferredChain + type: + scalar: string + - name: privateKeySecretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector + default: {} + - name: profile + type: + scalar: string + - name: server + type: + scalar: string + default: "" + - name: skipTLSVerify + type: + scalar: boolean + - name: solvers + type: + list: + elementType: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolver + elementRelationship: atomic +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEIssuerDNS01ProviderAcmeDNS + map: + fields: + - name: accountSecretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector + default: {} + - name: host + type: + scalar: string + default: "" +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEIssuerDNS01ProviderAkamai + map: + fields: + - name: accessTokenSecretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector + default: {} + - name: clientSecretSecretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector + default: {} + - name: clientTokenSecretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector + default: {} + - name: serviceConsumerDomain + type: + scalar: string + default: "" +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEIssuerDNS01ProviderAzureDNS + map: + fields: + - name: clientID + type: + scalar: string + - name: clientSecretSecretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector + - name: environment + type: + scalar: string + - name: hostedZoneName + type: + scalar: string + - name: managedIdentity + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.AzureManagedIdentity + - name: resourceGroupName + type: + scalar: string + default: "" + - name: subscriptionID + type: + scalar: string + default: "" + - name: tenantID + type: + scalar: string + - name: zoneType + type: + scalar: string +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEIssuerDNS01ProviderCloudDNS + map: + fields: + - name: hostedZoneName + type: + scalar: string + - name: project + type: + scalar: string + default: "" + - name: serviceAccountSecretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEIssuerDNS01ProviderCloudflare + map: + fields: + - name: apiKeySecretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector + - name: apiTokenSecretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector + - name: email + type: + scalar: string +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEIssuerDNS01ProviderDigitalOcean + map: + fields: + - name: tokenSecretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector + default: {} +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEIssuerDNS01ProviderRFC2136 + map: + fields: + - name: nameserver + type: + scalar: string + default: "" + - name: protocol + type: + scalar: string + - name: tsigAlgorithm + type: + scalar: string + - name: tsigKeyName + type: + scalar: string + - name: tsigSecretSecretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector + default: {} +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEIssuerDNS01ProviderRoute53 + map: + fields: + - name: accessKeyID + type: + scalar: string + - name: accessKeyIDSecretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector + - name: auth + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.Route53Auth + - name: hostedZoneID + type: + scalar: string + - name: region + type: + scalar: string + - name: role + type: + scalar: string + - name: secretAccessKeySecretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector + default: {} +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEIssuerDNS01ProviderWebhook + map: + fields: + - name: config + type: + namedType: JSON.v1.apiextensions.apis.pkg.apiextensions-apiserver.k8s.io + - name: groupName + type: + scalar: string + default: "" + - name: solverName + type: + scalar: string + default: "" +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEIssuerStatus + map: + fields: + - name: lastPrivateKeyHash + type: + scalar: string + - name: lastRegisteredEmail + type: + scalar: string + - name: uri + type: + scalar: string +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.AzureManagedIdentity + map: + fields: + - name: clientID + type: + scalar: string + - name: resourceID + type: + scalar: string + - name: tenantID + type: + scalar: string +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.CertificateDNSNameSelector + map: + fields: + - name: dnsNames + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: dnsZones + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: matchLabels + type: + map: + elementType: + scalar: string +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.Challenge + map: + fields: + - name: apiVersion + type: + scalar: string + - name: kind + type: + scalar: string + - name: metadata + type: + namedType: ObjectMeta.v1.meta.apis.pkg.apimachinery.k8s.io + default: {} + - name: spec + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ChallengeSpec + default: {} + - name: status + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ChallengeStatus + default: {} +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ChallengeSpec + map: + fields: + - name: authorizationURL + type: + scalar: string + default: "" + - name: dnsName + type: + scalar: string + default: "" + - name: issuerRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.IssuerReference + default: {} + - name: key + type: + scalar: string + default: "" + - name: solver + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEChallengeSolver + default: {} + - name: token + type: + scalar: string + default: "" + - name: type + type: + scalar: string + default: "" + - name: url + type: + scalar: string + default: "" + - name: wildcard + type: + scalar: boolean + default: false +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ChallengeStatus + map: + fields: + - name: presented + type: + scalar: boolean + default: false + - name: processing + type: + scalar: boolean + default: false + - name: reason + type: + scalar: string + - name: state + type: + scalar: string +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.Order + map: + fields: + - name: apiVersion + type: + scalar: string + - name: kind + type: + scalar: string + - name: metadata + type: + namedType: ObjectMeta.v1.meta.apis.pkg.apimachinery.k8s.io + default: {} + - name: spec + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.OrderSpec + default: {} + - name: status + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.OrderStatus + default: {} +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.OrderSpec + map: + fields: + - name: commonName + type: + scalar: string + - name: dnsNames + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: duration + type: + namedType: Duration.v1.meta.apis.pkg.apimachinery.k8s.io + - name: ipAddresses + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: issuerRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.IssuerReference + default: {} + - name: profile + type: + scalar: string + - name: request + type: + scalar: string +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.OrderStatus + map: + fields: + - name: authorizations + type: + list: + elementType: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEAuthorization + elementRelationship: atomic + - name: certificate + type: + scalar: string + - name: failureTime + type: + namedType: Time.v1.meta.apis.pkg.apimachinery.k8s.io + - name: finalizeURL + type: + scalar: string + - name: reason + type: + scalar: string + - name: state + type: + scalar: string + - name: url + type: + scalar: string +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.Route53Auth + map: + fields: + - name: kubernetes + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.Route53KubernetesAuth +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.Route53KubernetesAuth + map: + fields: + - name: serviceAccountRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ServiceAccountRef +- name: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ServiceAccountRef + map: + fields: + - name: audiences + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: name + type: + scalar: string + default: "" +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CAIssuer + map: + fields: + - name: crlDistributionPoints + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: issuingCertificateURLs + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: ocspServers + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: secretName + type: + scalar: string + default: "" +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.Certificate + map: + fields: + - name: apiVersion + type: + scalar: string + - name: kind + type: + scalar: string + - name: metadata + type: + namedType: ObjectMeta.v1.meta.apis.pkg.apimachinery.k8s.io + default: {} + - name: spec + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CertificateSpec + default: {} + - name: status + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CertificateStatus + default: {} +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CertificateAdditionalOutputFormat + map: + fields: + - name: type + type: + scalar: string + default: "" +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CertificateCondition + map: + fields: + - name: lastTransitionTime + type: + namedType: Time.v1.meta.apis.pkg.apimachinery.k8s.io + - name: message + type: + scalar: string + - name: observedGeneration + type: + scalar: numeric + - name: reason + type: + scalar: string + - name: status + type: + scalar: string + default: "" + - name: type + type: + scalar: string + default: "" +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CertificateKeystores + map: + fields: + - name: jks + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.JKSKeystore + - name: pkcs12 + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.PKCS12Keystore +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CertificatePrivateKey + map: + fields: + - name: algorithm + type: + scalar: string + - name: encoding + type: + scalar: string + - name: rotationPolicy + type: + scalar: string + - name: size + type: + scalar: numeric +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CertificateRequest + map: + fields: + - name: apiVersion + type: + scalar: string + - name: kind + type: + scalar: string + - name: metadata + type: + namedType: ObjectMeta.v1.meta.apis.pkg.apimachinery.k8s.io + default: {} + - name: spec + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CertificateRequestSpec + default: {} + - name: status + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CertificateRequestStatus + default: {} +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CertificateRequestCondition + map: + fields: + - name: lastTransitionTime + type: + namedType: Time.v1.meta.apis.pkg.apimachinery.k8s.io + - name: message + type: + scalar: string + - name: reason + type: + scalar: string + - name: status + type: + scalar: string + default: "" + - name: type + type: + scalar: string + default: "" +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CertificateRequestSpec + map: + fields: + - name: duration + type: + namedType: Duration.v1.meta.apis.pkg.apimachinery.k8s.io + - name: extra + type: + map: + elementType: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: groups + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: isCA + type: + scalar: boolean + - name: issuerRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.IssuerReference + default: {} + - name: request + type: + scalar: string + - name: uid + type: + scalar: string + - name: usages + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: username + type: + scalar: string +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CertificateRequestStatus + map: + fields: + - name: ca + type: + scalar: string + - name: certificate + type: + scalar: string + - name: conditions + type: + list: + elementType: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CertificateRequestCondition + elementRelationship: associative + keys: + - type + - name: failureTime + type: + namedType: Time.v1.meta.apis.pkg.apimachinery.k8s.io +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CertificateSecretTemplate + map: + fields: + - name: annotations + type: + map: + elementType: + scalar: string + - name: labels + type: + map: + elementType: + scalar: string +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CertificateSpec + map: + fields: + - name: additionalOutputFormats + type: + list: + elementType: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CertificateAdditionalOutputFormat + elementRelationship: atomic + - name: commonName + type: + scalar: string + - name: dnsNames + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: duration + type: + namedType: Duration.v1.meta.apis.pkg.apimachinery.k8s.io + - name: emailAddresses + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: encodeUsagesInRequest + type: + scalar: boolean + - name: ipAddresses + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: isCA + type: + scalar: boolean + - name: issuerRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.IssuerReference + default: {} + - name: keystores + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CertificateKeystores + - name: literalSubject + type: + scalar: string + - name: nameConstraints + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.NameConstraints + - name: otherNames + type: + list: + elementType: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.OtherName + elementRelationship: atomic + - name: privateKey + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CertificatePrivateKey + - name: renewBefore + type: + namedType: Duration.v1.meta.apis.pkg.apimachinery.k8s.io + - name: renewBeforePercentage + type: + scalar: numeric + - name: revisionHistoryLimit + type: + scalar: numeric + - name: secretName + type: + scalar: string + default: "" + - name: secretTemplate + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CertificateSecretTemplate + - name: signatureAlgorithm + type: + scalar: string + - name: subject + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.X509Subject + - name: uris + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: usages + type: + list: + elementType: + scalar: string + elementRelationship: atomic +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CertificateStatus + map: + fields: + - name: conditions + type: + list: + elementType: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CertificateCondition + elementRelationship: associative + keys: + - type + - name: failedIssuanceAttempts + type: + scalar: numeric + - name: lastFailureTime + type: + namedType: Time.v1.meta.apis.pkg.apimachinery.k8s.io + - name: nextPrivateKeySecretName + type: + scalar: string + - name: notAfter + type: + namedType: Time.v1.meta.apis.pkg.apimachinery.k8s.io + - name: notBefore + type: + namedType: Time.v1.meta.apis.pkg.apimachinery.k8s.io + - name: renewalTime + type: + namedType: Time.v1.meta.apis.pkg.apimachinery.k8s.io + - name: revision + type: + scalar: numeric +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.ClusterIssuer + map: + fields: + - name: apiVersion + type: + scalar: string + - name: kind + type: + scalar: string + - name: metadata + type: + namedType: ObjectMeta.v1.meta.apis.pkg.apimachinery.k8s.io + default: {} + - name: spec + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.IssuerSpec + default: {} + - name: status + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.IssuerStatus + default: {} +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.Issuer + map: + fields: + - name: apiVersion + type: + scalar: string + - name: kind + type: + scalar: string + - name: metadata + type: + namedType: ObjectMeta.v1.meta.apis.pkg.apimachinery.k8s.io + default: {} + - name: spec + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.IssuerSpec + default: {} + - name: status + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.IssuerStatus + default: {} +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.IssuerCondition + map: + fields: + - name: lastTransitionTime + type: + namedType: Time.v1.meta.apis.pkg.apimachinery.k8s.io + - name: message + type: + scalar: string + - name: observedGeneration + type: + scalar: numeric + - name: reason + type: + scalar: string + - name: status + type: + scalar: string + default: "" + - name: type + type: + scalar: string + default: "" +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.IssuerSpec + map: + fields: + - name: acme + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEIssuer + - name: ca + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.CAIssuer + - name: selfSigned + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.SelfSignedIssuer + - name: vault + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.VaultIssuer + - name: venafi + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.VenafiIssuer +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.IssuerStatus + map: + fields: + - name: acme + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.acme.v1.ACMEIssuerStatus + - name: conditions + type: + list: + elementType: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.IssuerCondition + elementRelationship: associative + keys: + - type +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.JKSKeystore + map: + fields: + - name: alias + type: + scalar: string + - name: create + type: + scalar: boolean + default: false + - name: password + type: + scalar: string + - name: passwordSecretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector + default: {} +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.NameConstraintItem + map: + fields: + - name: dnsDomains + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: emailAddresses + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: ipRanges + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: uriDomains + type: + list: + elementType: + scalar: string + elementRelationship: atomic +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.NameConstraints + map: + fields: + - name: critical + type: + scalar: boolean + - name: excluded + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.NameConstraintItem + - name: permitted + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.NameConstraintItem +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.OtherName + map: + fields: + - name: oid + type: + scalar: string + - name: utf8Value + type: + scalar: string +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.PKCS12Keystore + map: + fields: + - name: create + type: + scalar: boolean + default: false + - name: password + type: + scalar: string + - name: passwordSecretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector + default: {} + - name: profile + type: + scalar: string +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.SelfSignedIssuer + map: + fields: + - name: crlDistributionPoints + type: + list: + elementType: + scalar: string + elementRelationship: atomic +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.ServiceAccountRef + map: + fields: + - name: audiences + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: name + type: + scalar: string + default: "" +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.VaultAppRole + map: + fields: + - name: path + type: + scalar: string + default: "" + - name: roleId + type: + scalar: string + default: "" + - name: secretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector + default: {} +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.VaultAuth + map: + fields: + - name: appRole + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.VaultAppRole + - name: clientCertificate + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.VaultClientCertificateAuth + - name: kubernetes + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.VaultKubernetesAuth + - name: tokenSecretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.VaultClientCertificateAuth + map: + fields: + - name: mountPath + type: + scalar: string + - name: name + type: + scalar: string + - name: secretName + type: + scalar: string +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.VaultIssuer + map: + fields: + - name: auth + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.VaultAuth + default: {} + - name: caBundle + type: + scalar: string + - name: caBundleSecretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector + - name: clientCertSecretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector + - name: clientKeySecretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector + - name: namespace + type: + scalar: string + - name: path + type: + scalar: string + default: "" + - name: server + type: + scalar: string + default: "" + - name: serverName + type: + scalar: string +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.VaultKubernetesAuth + map: + fields: + - name: mountPath + type: + scalar: string + - name: role + type: + scalar: string + default: "" + - name: secretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector + default: {} + - name: serviceAccountRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.ServiceAccountRef +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.VenafiCloud + map: + fields: + - name: apiTokenSecretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector + default: {} + - name: url + type: + scalar: string +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.VenafiIssuer + map: + fields: + - name: cloud + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.VenafiCloud + - name: tpp + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.VenafiTPP + - name: zone + type: + scalar: string + default: "" +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.VenafiTPP + map: + fields: + - name: caBundle + type: + scalar: string + - name: caBundleSecretRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector + - name: credentialsRef + type: + namedType: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.LocalObjectReference + default: {} + - name: url + type: + scalar: string + default: "" +- name: com.github.cert-manager.cert-manager.pkg.apis.certmanager.v1.X509Subject + map: + fields: + - name: countries + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: localities + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: organizationalUnits + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: organizations + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: postalCodes + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: provinces + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: serialNumber + type: + scalar: string + - name: streetAddresses + type: + list: + elementType: + scalar: string + elementRelationship: atomic +- name: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.IssuerReference + map: + fields: + - name: group + type: + scalar: string + - name: kind + type: + scalar: string + - name: name + type: + scalar: string + default: "" +- name: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.LocalObjectReference + map: + fields: + - name: name + type: + scalar: string + default: "" +- name: com.github.cert-manager.cert-manager.pkg.apis.meta.v1.SecretKeySelector + map: + fields: + - name: key + type: + scalar: string + - name: name + type: + scalar: string + default: "" +- name: io.k8s.sigs.gateway-api.apis.v1.ParentReference + map: + fields: + - name: group + type: + scalar: string + - name: kind + type: + scalar: string + - name: name + type: + scalar: string + default: "" + - name: namespace + type: + scalar: string + - name: port + type: + scalar: numeric + - name: sectionName + type: + scalar: string +- name: __untyped_atomic_ + scalar: untyped + list: + elementType: + namedType: __untyped_atomic_ + elementRelationship: atomic + map: + elementType: + namedType: __untyped_atomic_ + elementRelationship: atomic +- name: __untyped_deduced_ + scalar: untyped + list: + elementType: + namedType: __untyped_atomic_ + elementRelationship: atomic + map: + elementType: + namedType: __untyped_deduced_ + elementRelationship: separable +`) diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1/issuerreference.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1/issuerreference.go new file mode 100644 index 0000000000..f45c2ce823 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1/issuerreference.go @@ -0,0 +1,64 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// IssuerReferenceApplyConfiguration represents a declarative configuration of the IssuerReference type for use +// with apply. +// +// IssuerReference is a reference to a certificate issuer object with a given name, kind and group. +type IssuerReferenceApplyConfiguration struct { + // Name of the issuer being referred to. + Name *string `json:"name,omitempty"` + // Kind of the issuer being referred to. + // Defaults to 'Issuer'. + Kind *string `json:"kind,omitempty"` + // Group of the issuer being referred to. + // Defaults to 'cert-manager.io'. + Group *string `json:"group,omitempty"` +} + +// IssuerReferenceApplyConfiguration constructs a declarative configuration of the IssuerReference type for use with +// apply. +func IssuerReference() *IssuerReferenceApplyConfiguration { + return &IssuerReferenceApplyConfiguration{} +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *IssuerReferenceApplyConfiguration) WithName(value string) *IssuerReferenceApplyConfiguration { + b.Name = &value + return b +} + +// WithKind sets the Kind field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Kind field is set to the value of the last call. +func (b *IssuerReferenceApplyConfiguration) WithKind(value string) *IssuerReferenceApplyConfiguration { + b.Kind = &value + return b +} + +// WithGroup sets the Group field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Group field is set to the value of the last call. +func (b *IssuerReferenceApplyConfiguration) WithGroup(value string) *IssuerReferenceApplyConfiguration { + b.Group = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1/localobjectreference.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1/localobjectreference.go new file mode 100644 index 0000000000..c25794621c --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1/localobjectreference.go @@ -0,0 +1,48 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// LocalObjectReferenceApplyConfiguration represents a declarative configuration of the LocalObjectReference type for use +// with apply. +// +// A reference to an object in the same namespace as the referent. +// If the referent is a cluster-scoped resource (e.g., a ClusterIssuer), +// the reference instead refers to the resource with the given name in the +// configured 'cluster resource namespace', which is set as a flag on the +// controller component (and defaults to the namespace that cert-manager +// runs in). +type LocalObjectReferenceApplyConfiguration struct { + // Name of the resource being referred to. + // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + Name *string `json:"name,omitempty"` +} + +// LocalObjectReferenceApplyConfiguration constructs a declarative configuration of the LocalObjectReference type for use with +// apply. +func LocalObjectReference() *LocalObjectReferenceApplyConfiguration { + return &LocalObjectReferenceApplyConfiguration{} +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *LocalObjectReferenceApplyConfiguration) WithName(value string) *LocalObjectReferenceApplyConfiguration { + b.Name = &value + return b +} diff --git a/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1/secretkeyselector.go b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1/secretkeyselector.go new file mode 100644 index 0000000000..3c923a6b72 --- /dev/null +++ b/vendor/github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1/secretkeyselector.go @@ -0,0 +1,55 @@ +/* +Copyright The cert-manager 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. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// SecretKeySelectorApplyConfiguration represents a declarative configuration of the SecretKeySelector type for use +// with apply. +// +// A reference to a specific 'key' within a Secret resource. +// In some instances, `key` is a required field. +type SecretKeySelectorApplyConfiguration struct { + // The name of the Secret resource being referred to. + LocalObjectReferenceApplyConfiguration `json:",inline"` + // The key of the entry in the Secret resource's `data` field to be used. + // Some instances of this field may be defaulted, in others it may be + // required. + Key *string `json:"key,omitempty"` +} + +// SecretKeySelectorApplyConfiguration constructs a declarative configuration of the SecretKeySelector type for use with +// apply. +func SecretKeySelector() *SecretKeySelectorApplyConfiguration { + return &SecretKeySelectorApplyConfiguration{} +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *SecretKeySelectorApplyConfiguration) WithName(value string) *SecretKeySelectorApplyConfiguration { + b.LocalObjectReferenceApplyConfiguration.Name = &value + return b +} + +// WithKey sets the Key field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Key field is set to the value of the last call. +func (b *SecretKeySelectorApplyConfiguration) WithKey(value string) *SecretKeySelectorApplyConfiguration { + b.Key = &value + return b +} diff --git a/vendor/github.com/gorilla/websocket/.gitignore b/vendor/github.com/gorilla/websocket/.gitignore new file mode 100644 index 0000000000..cd3fcd1ef7 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/.gitignore @@ -0,0 +1,25 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe + +.idea/ +*.iml diff --git a/vendor/github.com/gorilla/websocket/AUTHORS b/vendor/github.com/gorilla/websocket/AUTHORS new file mode 100644 index 0000000000..1931f40068 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/AUTHORS @@ -0,0 +1,9 @@ +# This is the official list of Gorilla WebSocket authors for copyright +# purposes. +# +# Please keep the list sorted. + +Gary Burd +Google LLC (https://opensource.google.com/) +Joachim Bauch + diff --git a/vendor/github.com/gorilla/websocket/LICENSE b/vendor/github.com/gorilla/websocket/LICENSE new file mode 100644 index 0000000000..9171c97225 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2013 The Gorilla WebSocket Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/gorilla/websocket/README.md b/vendor/github.com/gorilla/websocket/README.md new file mode 100644 index 0000000000..ff8bfab0b2 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/README.md @@ -0,0 +1,32 @@ +# Gorilla WebSocket + +[![GoDoc](https://godoc.org/github.com/gorilla/websocket?status.svg)](https://godoc.org/github.com/gorilla/websocket) +[![CircleCI](https://circleci.com/gh/gorilla/websocket.svg?style=svg)](https://circleci.com/gh/gorilla/websocket) + +Gorilla WebSocket is a [Go](http://golang.org/) implementation of the +[WebSocket](http://www.rfc-editor.org/rfc/rfc6455.txt) protocol. + + +### Documentation + +* [API Reference](https://pkg.go.dev/github.com/gorilla/websocket?tab=doc) +* [Chat example](https://github.com/gorilla/websocket/tree/main/examples/chat) +* [Command example](https://github.com/gorilla/websocket/tree/main/examples/command) +* [Client and server example](https://github.com/gorilla/websocket/tree/main/examples/echo) +* [File watch example](https://github.com/gorilla/websocket/tree/main/examples/filewatch) + +### Status + +The Gorilla WebSocket package provides a complete and tested implementation of +the [WebSocket](http://www.rfc-editor.org/rfc/rfc6455.txt) protocol. The +package API is stable. + +### Installation + + go get github.com/gorilla/websocket + +### Protocol Compliance + +The Gorilla WebSocket package passes the server tests in the [Autobahn Test +Suite](https://github.com/crossbario/autobahn-testsuite) using the application in the [examples/autobahn +subdirectory](https://github.com/gorilla/websocket/tree/main/examples/autobahn). diff --git a/vendor/github.com/gorilla/websocket/client.go b/vendor/github.com/gorilla/websocket/client.go new file mode 100644 index 0000000000..00917ea341 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/client.go @@ -0,0 +1,517 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bytes" + "context" + "crypto/tls" + "errors" + "fmt" + "io" + "net" + "net/http" + "net/http/httptrace" + "net/url" + "strings" + "time" +) + +// ErrBadHandshake is returned when the server response to opening handshake is +// invalid. +var ErrBadHandshake = errors.New("websocket: bad handshake") + +var errInvalidCompression = errors.New("websocket: invalid compression negotiation") + +// NewClient creates a new client connection using the given net connection. +// The URL u specifies the host and request URI. Use requestHeader to specify +// the origin (Origin), subprotocols (Sec-WebSocket-Protocol) and cookies +// (Cookie). Use the response.Header to get the selected subprotocol +// (Sec-WebSocket-Protocol) and cookies (Set-Cookie). +// +// If the WebSocket handshake fails, ErrBadHandshake is returned along with a +// non-nil *http.Response so that callers can handle redirects, authentication, +// etc. +// +// Deprecated: Use Dialer instead. +func NewClient(netConn net.Conn, u *url.URL, requestHeader http.Header, readBufSize, writeBufSize int) (c *Conn, response *http.Response, err error) { + d := Dialer{ + ReadBufferSize: readBufSize, + WriteBufferSize: writeBufSize, + NetDial: func(net, addr string) (net.Conn, error) { + return netConn, nil + }, + } + return d.Dial(u.String(), requestHeader) +} + +// A Dialer contains options for connecting to WebSocket server. +// +// It is safe to call Dialer's methods concurrently. +type Dialer struct { + // The following custom dial functions can be set to establish + // connections to either the backend server or the proxy (if it + // exists). The scheme of the dialed entity (either backend or + // proxy) determines which custom dial function is selected: + // either NetDialTLSContext for HTTPS or NetDialContext/NetDial + // for HTTP. Since the "Proxy" function can determine the scheme + // dynamically, it can make sense to set multiple custom dial + // functions simultaneously. + // + // NetDial specifies the dial function for creating TCP connections. If + // NetDial is nil, net.Dialer DialContext is used. + // If "Proxy" field is also set, this function dials the proxy--not + // the backend server. + NetDial func(network, addr string) (net.Conn, error) + + // NetDialContext specifies the dial function for creating TCP connections. If + // NetDialContext is nil, NetDial is used. + // If "Proxy" field is also set, this function dials the proxy--not + // the backend server. + NetDialContext func(ctx context.Context, network, addr string) (net.Conn, error) + + // NetDialTLSContext specifies the dial function for creating TLS/TCP connections. If + // NetDialTLSContext is nil, NetDialContext is used. + // If NetDialTLSContext is set, Dial assumes the TLS handshake is done there and + // TLSClientConfig is ignored. + // If "Proxy" field is also set, this function dials the proxy (and performs + // the TLS handshake with the proxy, ignoring TLSClientConfig). In this TLS proxy + // dialing case the TLSClientConfig could still be necessary for TLS to the backend server. + NetDialTLSContext func(ctx context.Context, network, addr string) (net.Conn, error) + + // Proxy specifies a function to return a proxy for a given + // Request. If the function returns a non-nil error, the + // request is aborted with the provided error. + // If Proxy is nil or returns a nil *URL, no proxy is used. + Proxy func(*http.Request) (*url.URL, error) + + // TLSClientConfig specifies the TLS configuration to use with tls.Client. + // If nil, the default configuration is used. + // If NetDialTLSContext is set, Dial assumes the TLS handshake + // is done there and TLSClientConfig is ignored. + TLSClientConfig *tls.Config + + // HandshakeTimeout specifies the duration for the handshake to complete. + HandshakeTimeout time.Duration + + // ReadBufferSize and WriteBufferSize specify I/O buffer sizes in bytes. If a buffer + // size is zero, then a useful default size is used. The I/O buffer sizes + // do not limit the size of the messages that can be sent or received. + ReadBufferSize, WriteBufferSize int + + // WriteBufferPool is a pool of buffers for write operations. If the value + // is not set, then write buffers are allocated to the connection for the + // lifetime of the connection. + // + // A pool is most useful when the application has a modest volume of writes + // across a large number of connections. + // + // Applications should use a single pool for each unique value of + // WriteBufferSize. + WriteBufferPool BufferPool + + // Subprotocols specifies the client's requested subprotocols. + Subprotocols []string + + // EnableCompression specifies if the client should attempt to negotiate + // per message compression (RFC 7692). Setting this value to true does not + // guarantee that compression will be supported. Currently only "no context + // takeover" modes are supported. + EnableCompression bool + + // Jar specifies the cookie jar. + // If Jar is nil, cookies are not sent in requests and ignored + // in responses. + Jar http.CookieJar +} + +// Dial creates a new client connection by calling DialContext with a background context. +func (d *Dialer) Dial(urlStr string, requestHeader http.Header) (*Conn, *http.Response, error) { + return d.DialContext(context.Background(), urlStr, requestHeader) +} + +var errMalformedURL = errors.New("malformed ws or wss URL") + +func hostPortNoPort(u *url.URL) (hostPort, hostNoPort string) { + hostPort = u.Host + hostNoPort = u.Host + if i := strings.LastIndex(u.Host, ":"); i > strings.LastIndex(u.Host, "]") { + hostNoPort = hostNoPort[:i] + } else { + switch u.Scheme { + case "wss": + hostPort += ":443" + case "https": + hostPort += ":443" + default: + hostPort += ":80" + } + } + return hostPort, hostNoPort +} + +// DefaultDialer is a dialer with all fields set to the default values. +var DefaultDialer = &Dialer{ + Proxy: http.ProxyFromEnvironment, + HandshakeTimeout: 45 * time.Second, +} + +// nilDialer is dialer to use when receiver is nil. +var nilDialer = *DefaultDialer + +// DialContext creates a new client connection. Use requestHeader to specify the +// origin (Origin), subprotocols (Sec-WebSocket-Protocol) and cookies (Cookie). +// Use the response.Header to get the selected subprotocol +// (Sec-WebSocket-Protocol) and cookies (Set-Cookie). +// +// The context will be used in the request and in the Dialer. +// +// If the WebSocket handshake fails, ErrBadHandshake is returned along with a +// non-nil *http.Response so that callers can handle redirects, authentication, +// etcetera. The response body may not contain the entire response and does not +// need to be closed by the application. +func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader http.Header) (*Conn, *http.Response, error) { + if d == nil { + d = &nilDialer + } + + challengeKey, err := generateChallengeKey() + if err != nil { + return nil, nil, err + } + + u, err := url.Parse(urlStr) + if err != nil { + return nil, nil, err + } + + switch u.Scheme { + case "ws": + u.Scheme = "http" + case "wss": + u.Scheme = "https" + default: + return nil, nil, errMalformedURL + } + + if u.User != nil { + // User name and password are not allowed in websocket URIs. + return nil, nil, errMalformedURL + } + + req := &http.Request{ + Method: http.MethodGet, + URL: u, + Proto: "HTTP/1.1", + ProtoMajor: 1, + ProtoMinor: 1, + Header: make(http.Header), + Host: u.Host, + } + req = req.WithContext(ctx) + + // Set the cookies present in the cookie jar of the dialer + if d.Jar != nil { + for _, cookie := range d.Jar.Cookies(u) { + req.AddCookie(cookie) + } + } + + // Set the request headers using the capitalization for names and values in + // RFC examples. Although the capitalization shouldn't matter, there are + // servers that depend on it. The Header.Set method is not used because the + // method canonicalizes the header names. + req.Header["Upgrade"] = []string{"websocket"} + req.Header["Connection"] = []string{"Upgrade"} + req.Header["Sec-WebSocket-Key"] = []string{challengeKey} + req.Header["Sec-WebSocket-Version"] = []string{"13"} + if len(d.Subprotocols) > 0 { + req.Header["Sec-WebSocket-Protocol"] = []string{strings.Join(d.Subprotocols, ", ")} + } + for k, vs := range requestHeader { + switch { + case k == "Host": + if len(vs) > 0 { + req.Host = vs[0] + } + case k == "Upgrade" || + k == "Connection" || + k == "Sec-Websocket-Key" || + k == "Sec-Websocket-Version" || + k == "Sec-Websocket-Extensions" || + (k == "Sec-Websocket-Protocol" && len(d.Subprotocols) > 0): + return nil, nil, errors.New("websocket: duplicate header not allowed: " + k) + case k == "Sec-Websocket-Protocol": + req.Header["Sec-WebSocket-Protocol"] = vs + default: + req.Header[k] = vs + } + } + + if d.EnableCompression { + req.Header["Sec-WebSocket-Extensions"] = []string{"permessage-deflate; server_no_context_takeover; client_no_context_takeover"} + } + + if d.HandshakeTimeout != 0 { + var cancel func() + ctx, cancel = context.WithTimeout(ctx, d.HandshakeTimeout) + defer cancel() + } + + var proxyURL *url.URL + if d.Proxy != nil { + proxyURL, err = d.Proxy(req) + if err != nil { + return nil, nil, err + } + } + netDial, err := d.netDialFn(ctx, proxyURL, u) + if err != nil { + return nil, nil, err + } + + hostPort, hostNoPort := hostPortNoPort(u) + trace := httptrace.ContextClientTrace(ctx) + if trace != nil && trace.GetConn != nil { + trace.GetConn(hostPort) + } + + netConn, err := netDial(ctx, "tcp", hostPort) + if err != nil { + return nil, nil, err + } + if trace != nil && trace.GotConn != nil { + trace.GotConn(httptrace.GotConnInfo{ + Conn: netConn, + }) + } + + // Close the network connection when returning an error. The variable + // netConn is set to nil before the success return at the end of the + // function. + defer func() { + if netConn != nil { + // It's safe to ignore the error from Close() because this code is + // only executed when returning a more important error to the + // application. + _ = netConn.Close() + } + }() + + // Do TLS handshake over established connection if a proxy exists. + if proxyURL != nil && u.Scheme == "https" { + + cfg := cloneTLSConfig(d.TLSClientConfig) + if cfg.ServerName == "" { + cfg.ServerName = hostNoPort + } + tlsConn := tls.Client(netConn, cfg) + netConn = tlsConn + + if trace != nil && trace.TLSHandshakeStart != nil { + trace.TLSHandshakeStart() + } + err := doHandshake(ctx, tlsConn, cfg) + if trace != nil && trace.TLSHandshakeDone != nil { + trace.TLSHandshakeDone(tlsConn.ConnectionState(), err) + } + + if err != nil { + return nil, nil, err + } + } + + conn := newConn(netConn, false, d.ReadBufferSize, d.WriteBufferSize, d.WriteBufferPool, nil, nil) + + if err := req.Write(netConn); err != nil { + return nil, nil, err + } + + if trace != nil && trace.GotFirstResponseByte != nil { + if peek, err := conn.br.Peek(1); err == nil && len(peek) == 1 { + trace.GotFirstResponseByte() + } + } + + resp, err := http.ReadResponse(conn.br, req) + if err != nil { + if d.TLSClientConfig != nil { + for _, proto := range d.TLSClientConfig.NextProtos { + if proto != "http/1.1" { + return nil, nil, fmt.Errorf( + "websocket: protocol %q was given but is not supported;"+ + "sharing tls.Config with net/http Transport can cause this error: %w", + proto, err, + ) + } + } + } + return nil, nil, err + } + + if d.Jar != nil { + if rc := resp.Cookies(); len(rc) > 0 { + d.Jar.SetCookies(u, rc) + } + } + + if resp.StatusCode != 101 || + !tokenListContainsValue(resp.Header, "Upgrade", "websocket") || + !tokenListContainsValue(resp.Header, "Connection", "upgrade") || + resp.Header.Get("Sec-Websocket-Accept") != computeAcceptKey(challengeKey) { + // Before closing the network connection on return from this + // function, slurp up some of the response to aid application + // debugging. + buf := make([]byte, 1024) + n, _ := io.ReadFull(resp.Body, buf) + resp.Body = io.NopCloser(bytes.NewReader(buf[:n])) + return nil, resp, ErrBadHandshake + } + + for _, ext := range parseExtensions(resp.Header) { + if ext[""] != "permessage-deflate" { + continue + } + _, snct := ext["server_no_context_takeover"] + _, cnct := ext["client_no_context_takeover"] + if !snct || !cnct { + return nil, resp, errInvalidCompression + } + conn.newCompressionWriter = compressNoContextTakeover + conn.newDecompressionReader = decompressNoContextTakeover + break + } + + resp.Body = io.NopCloser(bytes.NewReader([]byte{})) + conn.subprotocol = resp.Header.Get("Sec-Websocket-Protocol") + + if err := netConn.SetDeadline(time.Time{}); err != nil { + return nil, resp, err + } + + // Success! Set netConn to nil to stop the deferred function above from + // closing the network connection. + netConn = nil + + return conn, resp, nil +} + +// Returns the dial function to establish the connection to either the backend +// server or the proxy (if it exists). If the dialed entity is HTTPS, then the +// returned dial function *also* performs the TLS handshake to the dialed entity. +// NOTE: If a proxy exists, it is possible for a second TLS handshake to be +// necessary over the established connection. +func (d *Dialer) netDialFn(ctx context.Context, proxyURL *url.URL, backendURL *url.URL) (netDialerFunc, error) { + var netDial netDialerFunc + if proxyURL != nil { + netDial = d.netDialFromURL(proxyURL) + } else { + netDial = d.netDialFromURL(backendURL) + } + // If needed, wrap the dial function to set the connection deadline. + if deadline, ok := ctx.Deadline(); ok { + netDial = netDialWithDeadline(netDial, deadline) + } + // Proxy dialing is wrapped to implement CONNECT method and possibly proxy auth. + if proxyURL != nil { + return proxyFromURL(proxyURL, netDial) + } + return netDial, nil +} + +// Returns function to create the connection depending on the Dialer's +// custom dialing functions and the passed URL of entity connecting to. +func (d *Dialer) netDialFromURL(u *url.URL) netDialerFunc { + var netDial netDialerFunc + switch { + case d.NetDialContext != nil: + netDial = d.NetDialContext + case d.NetDial != nil: + netDial = func(ctx context.Context, net, addr string) (net.Conn, error) { + return d.NetDial(net, addr) + } + default: + netDial = (&net.Dialer{}).DialContext + } + // If dialed entity is HTTPS, then either use custom TLS dialing function (if exists) + // or wrap the previously computed "netDial" to use TLS config for handshake. + if u.Scheme == "https" { + if d.NetDialTLSContext != nil { + netDial = d.NetDialTLSContext + } else { + netDial = netDialWithTLSHandshake(netDial, d.TLSClientConfig, u) + } + } + return netDial +} + +// Returns wrapped "netDial" function, performing TLS handshake after connecting. +func netDialWithTLSHandshake(netDial netDialerFunc, tlsConfig *tls.Config, u *url.URL) netDialerFunc { + return func(ctx context.Context, unused, addr string) (net.Conn, error) { + hostPort, hostNoPort := hostPortNoPort(u) + trace := httptrace.ContextClientTrace(ctx) + if trace != nil && trace.GetConn != nil { + trace.GetConn(hostPort) + } + // Creates TCP connection to addr using passed "netDial" function. + conn, err := netDial(ctx, "tcp", addr) + if err != nil { + return nil, err + } + cfg := cloneTLSConfig(tlsConfig) + if cfg.ServerName == "" { + cfg.ServerName = hostNoPort + } + tlsConn := tls.Client(conn, cfg) + // Do the TLS handshake using TLSConfig over the wrapped connection. + if trace != nil && trace.TLSHandshakeStart != nil { + trace.TLSHandshakeStart() + } + err = doHandshake(ctx, tlsConn, cfg) + if trace != nil && trace.TLSHandshakeDone != nil { + trace.TLSHandshakeDone(tlsConn.ConnectionState(), err) + } + if err != nil { + tlsConn.Close() + return nil, err + } + return tlsConn, nil + } +} + +// Returns wrapped "netDial" function, setting passed deadline. +func netDialWithDeadline(netDial netDialerFunc, deadline time.Time) netDialerFunc { + return func(ctx context.Context, network, addr string) (net.Conn, error) { + c, err := netDial(ctx, network, addr) + if err != nil { + return nil, err + } + err = c.SetDeadline(deadline) + if err != nil { + c.Close() + return nil, err + } + return c, nil + } +} + +func cloneTLSConfig(cfg *tls.Config) *tls.Config { + if cfg == nil { + return &tls.Config{} + } + return cfg.Clone() +} + +func doHandshake(ctx context.Context, tlsConn *tls.Conn, cfg *tls.Config) error { + if err := tlsConn.HandshakeContext(ctx); err != nil { + return err + } + if !cfg.InsecureSkipVerify { + if err := tlsConn.VerifyHostname(cfg.ServerName); err != nil { + return err + } + } + return nil +} diff --git a/vendor/github.com/gorilla/websocket/compression.go b/vendor/github.com/gorilla/websocket/compression.go new file mode 100644 index 0000000000..fe1079edbc --- /dev/null +++ b/vendor/github.com/gorilla/websocket/compression.go @@ -0,0 +1,152 @@ +// Copyright 2017 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "compress/flate" + "errors" + "io" + "strings" + "sync" +) + +const ( + minCompressionLevel = -2 // flate.HuffmanOnly not defined in Go < 1.6 + maxCompressionLevel = flate.BestCompression + defaultCompressionLevel = 1 +) + +var ( + flateWriterPools [maxCompressionLevel - minCompressionLevel + 1]sync.Pool + flateReaderPool = sync.Pool{New: func() interface{} { + return flate.NewReader(nil) + }} +) + +func decompressNoContextTakeover(r io.Reader) io.ReadCloser { + const tail = + // Add four bytes as specified in RFC + "\x00\x00\xff\xff" + + // Add final block to squelch unexpected EOF error from flate reader. + "\x01\x00\x00\xff\xff" + + fr, _ := flateReaderPool.Get().(io.ReadCloser) + mr := io.MultiReader(r, strings.NewReader(tail)) + if err := fr.(flate.Resetter).Reset(mr, nil); err != nil { + // Reset never fails, but handle error in case that changes. + fr = flate.NewReader(mr) + } + return &flateReadWrapper{fr} +} + +func isValidCompressionLevel(level int) bool { + return minCompressionLevel <= level && level <= maxCompressionLevel +} + +func compressNoContextTakeover(w io.WriteCloser, level int) io.WriteCloser { + p := &flateWriterPools[level-minCompressionLevel] + tw := &truncWriter{w: w} + fw, _ := p.Get().(*flate.Writer) + if fw == nil { + fw, _ = flate.NewWriter(tw, level) + } else { + fw.Reset(tw) + } + return &flateWriteWrapper{fw: fw, tw: tw, p: p} +} + +// truncWriter is an io.Writer that writes all but the last four bytes of the +// stream to another io.Writer. +type truncWriter struct { + w io.WriteCloser + n int + p [4]byte +} + +func (w *truncWriter) Write(p []byte) (int, error) { + n := 0 + + // fill buffer first for simplicity. + if w.n < len(w.p) { + n = copy(w.p[w.n:], p) + p = p[n:] + w.n += n + if len(p) == 0 { + return n, nil + } + } + + m := len(p) + if m > len(w.p) { + m = len(w.p) + } + + if nn, err := w.w.Write(w.p[:m]); err != nil { + return n + nn, err + } + + copy(w.p[:], w.p[m:]) + copy(w.p[len(w.p)-m:], p[len(p)-m:]) + nn, err := w.w.Write(p[:len(p)-m]) + return n + nn, err +} + +type flateWriteWrapper struct { + fw *flate.Writer + tw *truncWriter + p *sync.Pool +} + +func (w *flateWriteWrapper) Write(p []byte) (int, error) { + if w.fw == nil { + return 0, errWriteClosed + } + return w.fw.Write(p) +} + +func (w *flateWriteWrapper) Close() error { + if w.fw == nil { + return errWriteClosed + } + err1 := w.fw.Flush() + w.p.Put(w.fw) + w.fw = nil + if w.tw.p != [4]byte{0, 0, 0xff, 0xff} { + return errors.New("websocket: internal error, unexpected bytes at end of flate stream") + } + err2 := w.tw.w.Close() + if err1 != nil { + return err1 + } + return err2 +} + +type flateReadWrapper struct { + fr io.ReadCloser +} + +func (r *flateReadWrapper) Read(p []byte) (int, error) { + if r.fr == nil { + return 0, io.ErrClosedPipe + } + n, err := r.fr.Read(p) + if err == io.EOF { + // Preemptively place the reader back in the pool. This helps with + // scenarios where the application does not call NextReader() soon after + // this final read. + r.Close() + } + return n, err +} + +func (r *flateReadWrapper) Close() error { + if r.fr == nil { + return io.ErrClosedPipe + } + err := r.fr.Close() + flateReaderPool.Put(r.fr) + r.fr = nil + return err +} diff --git a/vendor/github.com/gorilla/websocket/conn.go b/vendor/github.com/gorilla/websocket/conn.go new file mode 100644 index 0000000000..9562ffd497 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/conn.go @@ -0,0 +1,1246 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bufio" + "crypto/rand" + "encoding/binary" + "errors" + "io" + "net" + "strconv" + "strings" + "sync" + "time" + "unicode/utf8" +) + +const ( + // Frame header byte 0 bits from Section 5.2 of RFC 6455 + finalBit = 1 << 7 + rsv1Bit = 1 << 6 + rsv2Bit = 1 << 5 + rsv3Bit = 1 << 4 + + // Frame header byte 1 bits from Section 5.2 of RFC 6455 + maskBit = 1 << 7 + + maxFrameHeaderSize = 2 + 8 + 4 // Fixed header + length + mask + maxControlFramePayloadSize = 125 + + writeWait = time.Second + + defaultReadBufferSize = 4096 + defaultWriteBufferSize = 4096 + + continuationFrame = 0 + noFrame = -1 +) + +// Close codes defined in RFC 6455, section 11.7. +const ( + CloseNormalClosure = 1000 + CloseGoingAway = 1001 + CloseProtocolError = 1002 + CloseUnsupportedData = 1003 + CloseNoStatusReceived = 1005 + CloseAbnormalClosure = 1006 + CloseInvalidFramePayloadData = 1007 + ClosePolicyViolation = 1008 + CloseMessageTooBig = 1009 + CloseMandatoryExtension = 1010 + CloseInternalServerErr = 1011 + CloseServiceRestart = 1012 + CloseTryAgainLater = 1013 + CloseTLSHandshake = 1015 +) + +// The message types are defined in RFC 6455, section 11.8. +const ( + // TextMessage denotes a text data message. The text message payload is + // interpreted as UTF-8 encoded text data. + TextMessage = 1 + + // BinaryMessage denotes a binary data message. + BinaryMessage = 2 + + // CloseMessage denotes a close control message. The optional message + // payload contains a numeric code and text. Use the FormatCloseMessage + // function to format a close message payload. + CloseMessage = 8 + + // PingMessage denotes a ping control message. The optional message payload + // is UTF-8 encoded text. + PingMessage = 9 + + // PongMessage denotes a pong control message. The optional message payload + // is UTF-8 encoded text. + PongMessage = 10 +) + +// ErrCloseSent is returned when the application writes a message to the +// connection after sending a close message. +var ErrCloseSent = errors.New("websocket: close sent") + +// ErrReadLimit is returned when reading a message that is larger than the +// read limit set for the connection. +var ErrReadLimit = errors.New("websocket: read limit exceeded") + +// netError satisfies the net Error interface. +type netError struct { + msg string + temporary bool + timeout bool +} + +func (e *netError) Error() string { return e.msg } +func (e *netError) Temporary() bool { return e.temporary } +func (e *netError) Timeout() bool { return e.timeout } + +// CloseError represents a close message. +type CloseError struct { + // Code is defined in RFC 6455, section 11.7. + Code int + + // Text is the optional text payload. + Text string +} + +func (e *CloseError) Error() string { + s := []byte("websocket: close ") + s = strconv.AppendInt(s, int64(e.Code), 10) + switch e.Code { + case CloseNormalClosure: + s = append(s, " (normal)"...) + case CloseGoingAway: + s = append(s, " (going away)"...) + case CloseProtocolError: + s = append(s, " (protocol error)"...) + case CloseUnsupportedData: + s = append(s, " (unsupported data)"...) + case CloseNoStatusReceived: + s = append(s, " (no status)"...) + case CloseAbnormalClosure: + s = append(s, " (abnormal closure)"...) + case CloseInvalidFramePayloadData: + s = append(s, " (invalid payload data)"...) + case ClosePolicyViolation: + s = append(s, " (policy violation)"...) + case CloseMessageTooBig: + s = append(s, " (message too big)"...) + case CloseMandatoryExtension: + s = append(s, " (mandatory extension missing)"...) + case CloseInternalServerErr: + s = append(s, " (internal server error)"...) + case CloseTLSHandshake: + s = append(s, " (TLS handshake error)"...) + } + if e.Text != "" { + s = append(s, ": "...) + s = append(s, e.Text...) + } + return string(s) +} + +// IsCloseError returns boolean indicating whether the error is a *CloseError +// with one of the specified codes. +func IsCloseError(err error, codes ...int) bool { + if e, ok := err.(*CloseError); ok { + for _, code := range codes { + if e.Code == code { + return true + } + } + } + return false +} + +// IsUnexpectedCloseError returns boolean indicating whether the error is a +// *CloseError with a code not in the list of expected codes. +func IsUnexpectedCloseError(err error, expectedCodes ...int) bool { + if e, ok := err.(*CloseError); ok { + for _, code := range expectedCodes { + if e.Code == code { + return false + } + } + return true + } + return false +} + +var ( + errWriteTimeout = &netError{msg: "websocket: write timeout", timeout: true, temporary: true} + errUnexpectedEOF = &CloseError{Code: CloseAbnormalClosure, Text: io.ErrUnexpectedEOF.Error()} + errBadWriteOpCode = errors.New("websocket: bad write message type") + errWriteClosed = errors.New("websocket: write closed") + errInvalidControlFrame = errors.New("websocket: invalid control frame") +) + +// maskRand is an io.Reader for generating mask bytes. The reader is initialized +// to crypto/rand Reader. Tests swap the reader to a math/rand reader for +// reproducible results. +var maskRand = rand.Reader + +// newMaskKey returns a new 32 bit value for masking client frames. +func newMaskKey() [4]byte { + var k [4]byte + _, _ = io.ReadFull(maskRand, k[:]) + return k +} + +func isControl(frameType int) bool { + return frameType == CloseMessage || frameType == PingMessage || frameType == PongMessage +} + +func isData(frameType int) bool { + return frameType == TextMessage || frameType == BinaryMessage +} + +var validReceivedCloseCodes = map[int]bool{ + // see http://www.iana.org/assignments/websocket/websocket.xhtml#close-code-number + + CloseNormalClosure: true, + CloseGoingAway: true, + CloseProtocolError: true, + CloseUnsupportedData: true, + CloseNoStatusReceived: false, + CloseAbnormalClosure: false, + CloseInvalidFramePayloadData: true, + ClosePolicyViolation: true, + CloseMessageTooBig: true, + CloseMandatoryExtension: true, + CloseInternalServerErr: true, + CloseServiceRestart: true, + CloseTryAgainLater: true, + CloseTLSHandshake: false, +} + +func isValidReceivedCloseCode(code int) bool { + return validReceivedCloseCodes[code] || (code >= 3000 && code <= 4999) +} + +// BufferPool represents a pool of buffers. The *sync.Pool type satisfies this +// interface. The type of the value stored in a pool is not specified. +type BufferPool interface { + // Get gets a value from the pool or returns nil if the pool is empty. + Get() interface{} + // Put adds a value to the pool. + Put(interface{}) +} + +// writePoolData is the type added to the write buffer pool. This wrapper is +// used to prevent applications from peeking at and depending on the values +// added to the pool. +type writePoolData struct{ buf []byte } + +// The Conn type represents a WebSocket connection. +type Conn struct { + conn net.Conn + isServer bool + subprotocol string + + // Write fields + mu chan struct{} // used as mutex to protect write to conn + writeBuf []byte // frame is constructed in this buffer. + writePool BufferPool + writeBufSize int + writeDeadline time.Time + writer io.WriteCloser // the current writer returned to the application + isWriting bool // for best-effort concurrent write detection + + writeErrMu sync.Mutex + writeErr error + + enableWriteCompression bool + compressionLevel int + newCompressionWriter func(io.WriteCloser, int) io.WriteCloser + + // Read fields + reader io.ReadCloser // the current reader returned to the application + readErr error + br *bufio.Reader + // bytes remaining in current frame. + // set setReadRemaining to safely update this value and prevent overflow + readRemaining int64 + readFinal bool // true the current message has more frames. + readLength int64 // Message size. + readLimit int64 // Maximum message size. + readMaskPos int + readMaskKey [4]byte + handlePong func(string) error + handlePing func(string) error + handleClose func(int, string) error + readErrCount int + messageReader *messageReader // the current low-level reader + + readDecompress bool // whether last read frame had RSV1 set + newDecompressionReader func(io.Reader) io.ReadCloser +} + +func newConn(conn net.Conn, isServer bool, readBufferSize, writeBufferSize int, writeBufferPool BufferPool, br *bufio.Reader, writeBuf []byte) *Conn { + + if br == nil { + if readBufferSize == 0 { + readBufferSize = defaultReadBufferSize + } else if readBufferSize < maxControlFramePayloadSize { + // must be large enough for control frame + readBufferSize = maxControlFramePayloadSize + } + br = bufio.NewReaderSize(conn, readBufferSize) + } + + if writeBufferSize <= 0 { + writeBufferSize = defaultWriteBufferSize + } + writeBufferSize += maxFrameHeaderSize + + if writeBuf == nil && writeBufferPool == nil { + writeBuf = make([]byte, writeBufferSize) + } + + mu := make(chan struct{}, 1) + mu <- struct{}{} + c := &Conn{ + isServer: isServer, + br: br, + conn: conn, + mu: mu, + readFinal: true, + writeBuf: writeBuf, + writePool: writeBufferPool, + writeBufSize: writeBufferSize, + enableWriteCompression: true, + compressionLevel: defaultCompressionLevel, + } + c.SetCloseHandler(nil) + c.SetPingHandler(nil) + c.SetPongHandler(nil) + return c +} + +// setReadRemaining tracks the number of bytes remaining on the connection. If n +// overflows, an ErrReadLimit is returned. +func (c *Conn) setReadRemaining(n int64) error { + if n < 0 { + return ErrReadLimit + } + + c.readRemaining = n + return nil +} + +// Subprotocol returns the negotiated protocol for the connection. +func (c *Conn) Subprotocol() string { + return c.subprotocol +} + +// Close closes the underlying network connection without sending or waiting +// for a close message. +func (c *Conn) Close() error { + return c.conn.Close() +} + +// LocalAddr returns the local network address. +func (c *Conn) LocalAddr() net.Addr { + return c.conn.LocalAddr() +} + +// RemoteAddr returns the remote network address. +func (c *Conn) RemoteAddr() net.Addr { + return c.conn.RemoteAddr() +} + +// Write methods + +func (c *Conn) writeFatal(err error) error { + c.writeErrMu.Lock() + if c.writeErr == nil { + c.writeErr = err + } + c.writeErrMu.Unlock() + return err +} + +func (c *Conn) read(n int) ([]byte, error) { + p, err := c.br.Peek(n) + if err == io.EOF { + err = errUnexpectedEOF + } + // Discard is guaranteed to succeed because the number of bytes to discard + // is less than or equal to the number of bytes buffered. + _, _ = c.br.Discard(len(p)) + return p, err +} + +func (c *Conn) write(frameType int, deadline time.Time, buf0, buf1 []byte) error { + <-c.mu + defer func() { c.mu <- struct{}{} }() + + c.writeErrMu.Lock() + err := c.writeErr + c.writeErrMu.Unlock() + if err != nil { + return err + } + + if err := c.conn.SetWriteDeadline(deadline); err != nil { + return c.writeFatal(err) + } + if len(buf1) == 0 { + _, err = c.conn.Write(buf0) + } else { + err = c.writeBufs(buf0, buf1) + } + if err != nil { + return c.writeFatal(err) + } + if frameType == CloseMessage { + _ = c.writeFatal(ErrCloseSent) + } + return nil +} + +func (c *Conn) writeBufs(bufs ...[]byte) error { + b := net.Buffers(bufs) + _, err := b.WriteTo(c.conn) + return err +} + +// WriteControl writes a control message with the given deadline. The allowed +// message types are CloseMessage, PingMessage and PongMessage. +func (c *Conn) WriteControl(messageType int, data []byte, deadline time.Time) error { + if !isControl(messageType) { + return errBadWriteOpCode + } + if len(data) > maxControlFramePayloadSize { + return errInvalidControlFrame + } + + b0 := byte(messageType) | finalBit + b1 := byte(len(data)) + if !c.isServer { + b1 |= maskBit + } + + buf := make([]byte, 0, maxFrameHeaderSize+maxControlFramePayloadSize) + buf = append(buf, b0, b1) + + if c.isServer { + buf = append(buf, data...) + } else { + key := newMaskKey() + buf = append(buf, key[:]...) + buf = append(buf, data...) + maskBytes(key, 0, buf[6:]) + } + + if deadline.IsZero() { + // No timeout for zero time. + <-c.mu + } else { + d := time.Until(deadline) + if d < 0 { + return errWriteTimeout + } + select { + case <-c.mu: + default: + timer := time.NewTimer(d) + select { + case <-c.mu: + timer.Stop() + case <-timer.C: + return errWriteTimeout + } + } + } + + defer func() { c.mu <- struct{}{} }() + + c.writeErrMu.Lock() + err := c.writeErr + c.writeErrMu.Unlock() + if err != nil { + return err + } + + if err := c.conn.SetWriteDeadline(deadline); err != nil { + return c.writeFatal(err) + } + if _, err = c.conn.Write(buf); err != nil { + return c.writeFatal(err) + } + if messageType == CloseMessage { + _ = c.writeFatal(ErrCloseSent) + } + return err +} + +// beginMessage prepares a connection and message writer for a new message. +func (c *Conn) beginMessage(mw *messageWriter, messageType int) error { + // Close previous writer if not already closed by the application. It's + // probably better to return an error in this situation, but we cannot + // change this without breaking existing applications. + if c.writer != nil { + c.writer.Close() + c.writer = nil + } + + if !isControl(messageType) && !isData(messageType) { + return errBadWriteOpCode + } + + c.writeErrMu.Lock() + err := c.writeErr + c.writeErrMu.Unlock() + if err != nil { + return err + } + + mw.c = c + mw.frameType = messageType + mw.pos = maxFrameHeaderSize + + if c.writeBuf == nil { + wpd, ok := c.writePool.Get().(writePoolData) + if ok { + c.writeBuf = wpd.buf + } else { + c.writeBuf = make([]byte, c.writeBufSize) + } + } + return nil +} + +// NextWriter returns a writer for the next message to send. The writer's Close +// method flushes the complete message to the network. +// +// There can be at most one open writer on a connection. NextWriter closes the +// previous writer if the application has not already done so. +// +// All message types (TextMessage, BinaryMessage, CloseMessage, PingMessage and +// PongMessage) are supported. +func (c *Conn) NextWriter(messageType int) (io.WriteCloser, error) { + var mw messageWriter + if err := c.beginMessage(&mw, messageType); err != nil { + return nil, err + } + c.writer = &mw + if c.newCompressionWriter != nil && c.enableWriteCompression && isData(messageType) { + w := c.newCompressionWriter(c.writer, c.compressionLevel) + mw.compress = true + c.writer = w + } + return c.writer, nil +} + +type messageWriter struct { + c *Conn + compress bool // whether next call to flushFrame should set RSV1 + pos int // end of data in writeBuf. + frameType int // type of the current frame. + err error +} + +func (w *messageWriter) endMessage(err error) error { + if w.err != nil { + return err + } + c := w.c + w.err = err + c.writer = nil + if c.writePool != nil { + c.writePool.Put(writePoolData{buf: c.writeBuf}) + c.writeBuf = nil + } + return err +} + +// flushFrame writes buffered data and extra as a frame to the network. The +// final argument indicates that this is the last frame in the message. +func (w *messageWriter) flushFrame(final bool, extra []byte) error { + c := w.c + length := w.pos - maxFrameHeaderSize + len(extra) + + // Check for invalid control frames. + if isControl(w.frameType) && + (!final || length > maxControlFramePayloadSize) { + return w.endMessage(errInvalidControlFrame) + } + + b0 := byte(w.frameType) + if final { + b0 |= finalBit + } + if w.compress { + b0 |= rsv1Bit + } + w.compress = false + + b1 := byte(0) + if !c.isServer { + b1 |= maskBit + } + + // Assume that the frame starts at beginning of c.writeBuf. + framePos := 0 + if c.isServer { + // Adjust up if mask not included in the header. + framePos = 4 + } + + switch { + case length >= 65536: + c.writeBuf[framePos] = b0 + c.writeBuf[framePos+1] = b1 | 127 + binary.BigEndian.PutUint64(c.writeBuf[framePos+2:], uint64(length)) + case length > 125: + framePos += 6 + c.writeBuf[framePos] = b0 + c.writeBuf[framePos+1] = b1 | 126 + binary.BigEndian.PutUint16(c.writeBuf[framePos+2:], uint16(length)) + default: + framePos += 8 + c.writeBuf[framePos] = b0 + c.writeBuf[framePos+1] = b1 | byte(length) + } + + if !c.isServer { + key := newMaskKey() + copy(c.writeBuf[maxFrameHeaderSize-4:], key[:]) + maskBytes(key, 0, c.writeBuf[maxFrameHeaderSize:w.pos]) + if len(extra) > 0 { + return w.endMessage(c.writeFatal(errors.New("websocket: internal error, extra used in client mode"))) + } + } + + // Write the buffers to the connection with best-effort detection of + // concurrent writes. See the concurrency section in the package + // documentation for more info. + + if c.isWriting { + panic("concurrent write to websocket connection") + } + c.isWriting = true + + err := c.write(w.frameType, c.writeDeadline, c.writeBuf[framePos:w.pos], extra) + + if !c.isWriting { + panic("concurrent write to websocket connection") + } + c.isWriting = false + + if err != nil { + return w.endMessage(err) + } + + if final { + _ = w.endMessage(errWriteClosed) + return nil + } + + // Setup for next frame. + w.pos = maxFrameHeaderSize + w.frameType = continuationFrame + return nil +} + +func (w *messageWriter) ncopy(max int) (int, error) { + n := len(w.c.writeBuf) - w.pos + if n <= 0 { + if err := w.flushFrame(false, nil); err != nil { + return 0, err + } + n = len(w.c.writeBuf) - w.pos + } + if n > max { + n = max + } + return n, nil +} + +func (w *messageWriter) Write(p []byte) (int, error) { + if w.err != nil { + return 0, w.err + } + + if len(p) > 2*len(w.c.writeBuf) && w.c.isServer { + // Don't buffer large messages. + err := w.flushFrame(false, p) + if err != nil { + return 0, err + } + return len(p), nil + } + + nn := len(p) + for len(p) > 0 { + n, err := w.ncopy(len(p)) + if err != nil { + return 0, err + } + copy(w.c.writeBuf[w.pos:], p[:n]) + w.pos += n + p = p[n:] + } + return nn, nil +} + +func (w *messageWriter) WriteString(p string) (int, error) { + if w.err != nil { + return 0, w.err + } + + nn := len(p) + for len(p) > 0 { + n, err := w.ncopy(len(p)) + if err != nil { + return 0, err + } + copy(w.c.writeBuf[w.pos:], p[:n]) + w.pos += n + p = p[n:] + } + return nn, nil +} + +func (w *messageWriter) ReadFrom(r io.Reader) (nn int64, err error) { + if w.err != nil { + return 0, w.err + } + for { + if w.pos == len(w.c.writeBuf) { + err = w.flushFrame(false, nil) + if err != nil { + break + } + } + var n int + n, err = r.Read(w.c.writeBuf[w.pos:]) + w.pos += n + nn += int64(n) + if err != nil { + if err == io.EOF { + err = nil + } + break + } + } + return nn, err +} + +func (w *messageWriter) Close() error { + if w.err != nil { + return w.err + } + return w.flushFrame(true, nil) +} + +// WritePreparedMessage writes prepared message into connection. +func (c *Conn) WritePreparedMessage(pm *PreparedMessage) error { + frameType, frameData, err := pm.frame(prepareKey{ + isServer: c.isServer, + compress: c.newCompressionWriter != nil && c.enableWriteCompression && isData(pm.messageType), + compressionLevel: c.compressionLevel, + }) + if err != nil { + return err + } + if c.isWriting { + panic("concurrent write to websocket connection") + } + c.isWriting = true + err = c.write(frameType, c.writeDeadline, frameData, nil) + if !c.isWriting { + panic("concurrent write to websocket connection") + } + c.isWriting = false + return err +} + +// WriteMessage is a helper method for getting a writer using NextWriter, +// writing the message and closing the writer. +func (c *Conn) WriteMessage(messageType int, data []byte) error { + + if c.isServer && (c.newCompressionWriter == nil || !c.enableWriteCompression) { + // Fast path with no allocations and single frame. + + var mw messageWriter + if err := c.beginMessage(&mw, messageType); err != nil { + return err + } + n := copy(c.writeBuf[mw.pos:], data) + mw.pos += n + data = data[n:] + return mw.flushFrame(true, data) + } + + w, err := c.NextWriter(messageType) + if err != nil { + return err + } + if _, err = w.Write(data); err != nil { + return err + } + return w.Close() +} + +// SetWriteDeadline sets the write deadline on the underlying network +// connection. After a write has timed out, the websocket state is corrupt and +// all future writes will return an error. A zero value for t means writes will +// not time out. +func (c *Conn) SetWriteDeadline(t time.Time) error { + c.writeDeadline = t + return nil +} + +// Read methods + +func (c *Conn) advanceFrame() (int, error) { + // 1. Skip remainder of previous frame. + + if c.readRemaining > 0 { + if _, err := io.CopyN(io.Discard, c.br, c.readRemaining); err != nil { + return noFrame, err + } + } + + // 2. Read and parse first two bytes of frame header. + // To aid debugging, collect and report all errors in the first two bytes + // of the header. + + var errors []string + + p, err := c.read(2) + if err != nil { + return noFrame, err + } + + frameType := int(p[0] & 0xf) + final := p[0]&finalBit != 0 + rsv1 := p[0]&rsv1Bit != 0 + rsv2 := p[0]&rsv2Bit != 0 + rsv3 := p[0]&rsv3Bit != 0 + mask := p[1]&maskBit != 0 + _ = c.setReadRemaining(int64(p[1] & 0x7f)) // will not fail because argument is >= 0 + + c.readDecompress = false + if rsv1 { + if c.newDecompressionReader != nil { + c.readDecompress = true + } else { + errors = append(errors, "RSV1 set") + } + } + + if rsv2 { + errors = append(errors, "RSV2 set") + } + + if rsv3 { + errors = append(errors, "RSV3 set") + } + + switch frameType { + case CloseMessage, PingMessage, PongMessage: + if c.readRemaining > maxControlFramePayloadSize { + errors = append(errors, "len > 125 for control") + } + if !final { + errors = append(errors, "FIN not set on control") + } + case TextMessage, BinaryMessage: + if !c.readFinal { + errors = append(errors, "data before FIN") + } + c.readFinal = final + case continuationFrame: + if c.readFinal { + errors = append(errors, "continuation after FIN") + } + c.readFinal = final + default: + errors = append(errors, "bad opcode "+strconv.Itoa(frameType)) + } + + if mask != c.isServer { + errors = append(errors, "bad MASK") + } + + if len(errors) > 0 { + return noFrame, c.handleProtocolError(strings.Join(errors, ", ")) + } + + // 3. Read and parse frame length as per + // https://tools.ietf.org/html/rfc6455#section-5.2 + // + // The length of the "Payload data", in bytes: if 0-125, that is the payload + // length. + // - If 126, the following 2 bytes interpreted as a 16-bit unsigned + // integer are the payload length. + // - If 127, the following 8 bytes interpreted as + // a 64-bit unsigned integer (the most significant bit MUST be 0) are the + // payload length. Multibyte length quantities are expressed in network byte + // order. + + switch c.readRemaining { + case 126: + p, err := c.read(2) + if err != nil { + return noFrame, err + } + + if err := c.setReadRemaining(int64(binary.BigEndian.Uint16(p))); err != nil { + return noFrame, err + } + case 127: + p, err := c.read(8) + if err != nil { + return noFrame, err + } + + if err := c.setReadRemaining(int64(binary.BigEndian.Uint64(p))); err != nil { + return noFrame, err + } + } + + // 4. Handle frame masking. + + if mask { + c.readMaskPos = 0 + p, err := c.read(len(c.readMaskKey)) + if err != nil { + return noFrame, err + } + copy(c.readMaskKey[:], p) + } + + // 5. For text and binary messages, enforce read limit and return. + + if frameType == continuationFrame || frameType == TextMessage || frameType == BinaryMessage { + + c.readLength += c.readRemaining + // Don't allow readLength to overflow in the presence of a large readRemaining + // counter. + if c.readLength < 0 { + return noFrame, ErrReadLimit + } + + if c.readLimit > 0 && c.readLength > c.readLimit { + // Make a best effort to send a close message describing the problem. + _ = c.WriteControl(CloseMessage, FormatCloseMessage(CloseMessageTooBig, ""), time.Now().Add(writeWait)) + return noFrame, ErrReadLimit + } + + return frameType, nil + } + + // 6. Read control frame payload. + + var payload []byte + if c.readRemaining > 0 { + payload, err = c.read(int(c.readRemaining)) + _ = c.setReadRemaining(0) // will not fail because argument is >= 0 + if err != nil { + return noFrame, err + } + if c.isServer { + maskBytes(c.readMaskKey, 0, payload) + } + } + + // 7. Process control frame payload. + + switch frameType { + case PongMessage: + if err := c.handlePong(string(payload)); err != nil { + return noFrame, err + } + case PingMessage: + if err := c.handlePing(string(payload)); err != nil { + return noFrame, err + } + case CloseMessage: + closeCode := CloseNoStatusReceived + closeText := "" + if len(payload) >= 2 { + closeCode = int(binary.BigEndian.Uint16(payload)) + if !isValidReceivedCloseCode(closeCode) { + return noFrame, c.handleProtocolError("bad close code " + strconv.Itoa(closeCode)) + } + closeText = string(payload[2:]) + if !utf8.ValidString(closeText) { + return noFrame, c.handleProtocolError("invalid utf8 payload in close frame") + } + } + if err := c.handleClose(closeCode, closeText); err != nil { + return noFrame, err + } + return noFrame, &CloseError{Code: closeCode, Text: closeText} + } + + return frameType, nil +} + +func (c *Conn) handleProtocolError(message string) error { + data := FormatCloseMessage(CloseProtocolError, message) + if len(data) > maxControlFramePayloadSize { + data = data[:maxControlFramePayloadSize] + } + // Make a best effor to send a close message describing the problem. + _ = c.WriteControl(CloseMessage, data, time.Now().Add(writeWait)) + return errors.New("websocket: " + message) +} + +// NextReader returns the next data message received from the peer. The +// returned messageType is either TextMessage or BinaryMessage. +// +// There can be at most one open reader on a connection. NextReader discards +// the previous message if the application has not already consumed it. +// +// Applications must break out of the application's read loop when this method +// returns a non-nil error value. Errors returned from this method are +// permanent. Once this method returns a non-nil error, all subsequent calls to +// this method return the same error. +func (c *Conn) NextReader() (messageType int, r io.Reader, err error) { + // Close previous reader, only relevant for decompression. + if c.reader != nil { + c.reader.Close() + c.reader = nil + } + + c.messageReader = nil + c.readLength = 0 + + for c.readErr == nil { + frameType, err := c.advanceFrame() + if err != nil { + c.readErr = err + break + } + + if frameType == TextMessage || frameType == BinaryMessage { + c.messageReader = &messageReader{c} + c.reader = c.messageReader + if c.readDecompress { + c.reader = c.newDecompressionReader(c.reader) + } + return frameType, c.reader, nil + } + } + + // Applications that do handle the error returned from this method spin in + // tight loop on connection failure. To help application developers detect + // this error, panic on repeated reads to the failed connection. + c.readErrCount++ + if c.readErrCount >= 1000 { + panic("repeated read on failed websocket connection") + } + + return noFrame, nil, c.readErr +} + +type messageReader struct{ c *Conn } + +func (r *messageReader) Read(b []byte) (int, error) { + c := r.c + if c.messageReader != r { + return 0, io.EOF + } + + for c.readErr == nil { + + if c.readRemaining > 0 { + if int64(len(b)) > c.readRemaining { + b = b[:c.readRemaining] + } + n, err := c.br.Read(b) + c.readErr = err + if c.isServer { + c.readMaskPos = maskBytes(c.readMaskKey, c.readMaskPos, b[:n]) + } + rem := c.readRemaining + rem -= int64(n) + _ = c.setReadRemaining(rem) // rem is guaranteed to be >= 0 + if c.readRemaining > 0 && c.readErr == io.EOF { + c.readErr = errUnexpectedEOF + } + return n, c.readErr + } + + if c.readFinal { + c.messageReader = nil + return 0, io.EOF + } + + frameType, err := c.advanceFrame() + switch { + case err != nil: + c.readErr = err + case frameType == TextMessage || frameType == BinaryMessage: + c.readErr = errors.New("websocket: internal error, unexpected text or binary in Reader") + } + } + + err := c.readErr + if err == io.EOF && c.messageReader == r { + err = errUnexpectedEOF + } + return 0, err +} + +func (r *messageReader) Close() error { + return nil +} + +// ReadMessage is a helper method for getting a reader using NextReader and +// reading from that reader to a buffer. +func (c *Conn) ReadMessage() (messageType int, p []byte, err error) { + var r io.Reader + messageType, r, err = c.NextReader() + if err != nil { + return messageType, nil, err + } + p, err = io.ReadAll(r) + return messageType, p, err +} + +// SetReadDeadline sets the read deadline on the underlying network connection. +// After a read has timed out, the websocket connection state is corrupt and +// all future reads will return an error. A zero value for t means reads will +// not time out. +func (c *Conn) SetReadDeadline(t time.Time) error { + return c.conn.SetReadDeadline(t) +} + +// SetReadLimit sets the maximum size in bytes for a message read from the peer. If a +// message exceeds the limit, the connection sends a close message to the peer +// and returns ErrReadLimit to the application. +func (c *Conn) SetReadLimit(limit int64) { + c.readLimit = limit +} + +// CloseHandler returns the current close handler +func (c *Conn) CloseHandler() func(code int, text string) error { + return c.handleClose +} + +// SetCloseHandler sets the handler for close messages received from the peer. +// The code argument to h is the received close code or CloseNoStatusReceived +// if the close message is empty. The default close handler sends a close +// message back to the peer. +// +// The handler function is called from the NextReader, ReadMessage and message +// reader Read methods. The application must read the connection to process +// close messages as described in the section on Control Messages above. +// +// The connection read methods return a CloseError when a close message is +// received. Most applications should handle close messages as part of their +// normal error handling. Applications should only set a close handler when the +// application must perform some action before sending a close message back to +// the peer. +func (c *Conn) SetCloseHandler(h func(code int, text string) error) { + if h == nil { + h = func(code int, text string) error { + message := FormatCloseMessage(code, "") + // Make a best effor to send the close message. + _ = c.WriteControl(CloseMessage, message, time.Now().Add(writeWait)) + return nil + } + } + c.handleClose = h +} + +// PingHandler returns the current ping handler +func (c *Conn) PingHandler() func(appData string) error { + return c.handlePing +} + +// SetPingHandler sets the handler for ping messages received from the peer. +// The appData argument to h is the PING message application data. The default +// ping handler sends a pong to the peer. +// +// The handler function is called from the NextReader, ReadMessage and message +// reader Read methods. The application must read the connection to process +// ping messages as described in the section on Control Messages above. +func (c *Conn) SetPingHandler(h func(appData string) error) { + if h == nil { + h = func(message string) error { + // Make a best effort to send the pong message. + _ = c.WriteControl(PongMessage, []byte(message), time.Now().Add(writeWait)) + return nil + } + } + c.handlePing = h +} + +// PongHandler returns the current pong handler +func (c *Conn) PongHandler() func(appData string) error { + return c.handlePong +} + +// SetPongHandler sets the handler for pong messages received from the peer. +// The appData argument to h is the PONG message application data. The default +// pong handler does nothing. +// +// The handler function is called from the NextReader, ReadMessage and message +// reader Read methods. The application must read the connection to process +// pong messages as described in the section on Control Messages above. +func (c *Conn) SetPongHandler(h func(appData string) error) { + if h == nil { + h = func(string) error { return nil } + } + c.handlePong = h +} + +// NetConn returns the underlying connection that is wrapped by c. +// Note that writing to or reading from this connection directly will corrupt the +// WebSocket connection. +func (c *Conn) NetConn() net.Conn { + return c.conn +} + +// UnderlyingConn returns the internal net.Conn. This can be used to further +// modifications to connection specific flags. +// Deprecated: Use the NetConn method. +func (c *Conn) UnderlyingConn() net.Conn { + return c.conn +} + +// EnableWriteCompression enables and disables write compression of +// subsequent text and binary messages. This function is a noop if +// compression was not negotiated with the peer. +func (c *Conn) EnableWriteCompression(enable bool) { + c.enableWriteCompression = enable +} + +// SetCompressionLevel sets the flate compression level for subsequent text and +// binary messages. This function is a noop if compression was not negotiated +// with the peer. See the compress/flate package for a description of +// compression levels. +func (c *Conn) SetCompressionLevel(level int) error { + if !isValidCompressionLevel(level) { + return errors.New("websocket: invalid compression level") + } + c.compressionLevel = level + return nil +} + +// FormatCloseMessage formats closeCode and text as a WebSocket close message. +// An empty message is returned for code CloseNoStatusReceived. +func FormatCloseMessage(closeCode int, text string) []byte { + if closeCode == CloseNoStatusReceived { + // Return empty message because it's illegal to send + // CloseNoStatusReceived. Return non-nil value in case application + // checks for nil. + return []byte{} + } + buf := make([]byte, 2+len(text)) + binary.BigEndian.PutUint16(buf, uint16(closeCode)) + copy(buf[2:], text) + return buf +} diff --git a/vendor/github.com/gorilla/websocket/doc.go b/vendor/github.com/gorilla/websocket/doc.go new file mode 100644 index 0000000000..8db0cef95a --- /dev/null +++ b/vendor/github.com/gorilla/websocket/doc.go @@ -0,0 +1,227 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package websocket implements the WebSocket protocol defined in RFC 6455. +// +// Overview +// +// The Conn type represents a WebSocket connection. A server application calls +// the Upgrader.Upgrade method from an HTTP request handler to get a *Conn: +// +// var upgrader = websocket.Upgrader{ +// ReadBufferSize: 1024, +// WriteBufferSize: 1024, +// } +// +// func handler(w http.ResponseWriter, r *http.Request) { +// conn, err := upgrader.Upgrade(w, r, nil) +// if err != nil { +// log.Println(err) +// return +// } +// ... Use conn to send and receive messages. +// } +// +// Call the connection's WriteMessage and ReadMessage methods to send and +// receive messages as a slice of bytes. This snippet of code shows how to echo +// messages using these methods: +// +// for { +// messageType, p, err := conn.ReadMessage() +// if err != nil { +// log.Println(err) +// return +// } +// if err := conn.WriteMessage(messageType, p); err != nil { +// log.Println(err) +// return +// } +// } +// +// In above snippet of code, p is a []byte and messageType is an int with value +// websocket.BinaryMessage or websocket.TextMessage. +// +// An application can also send and receive messages using the io.WriteCloser +// and io.Reader interfaces. To send a message, call the connection NextWriter +// method to get an io.WriteCloser, write the message to the writer and close +// the writer when done. To receive a message, call the connection NextReader +// method to get an io.Reader and read until io.EOF is returned. This snippet +// shows how to echo messages using the NextWriter and NextReader methods: +// +// for { +// messageType, r, err := conn.NextReader() +// if err != nil { +// return +// } +// w, err := conn.NextWriter(messageType) +// if err != nil { +// return err +// } +// if _, err := io.Copy(w, r); err != nil { +// return err +// } +// if err := w.Close(); err != nil { +// return err +// } +// } +// +// Data Messages +// +// The WebSocket protocol distinguishes between text and binary data messages. +// Text messages are interpreted as UTF-8 encoded text. The interpretation of +// binary messages is left to the application. +// +// This package uses the TextMessage and BinaryMessage integer constants to +// identify the two data message types. The ReadMessage and NextReader methods +// return the type of the received message. The messageType argument to the +// WriteMessage and NextWriter methods specifies the type of a sent message. +// +// It is the application's responsibility to ensure that text messages are +// valid UTF-8 encoded text. +// +// Control Messages +// +// The WebSocket protocol defines three types of control messages: close, ping +// and pong. Call the connection WriteControl, WriteMessage or NextWriter +// methods to send a control message to the peer. +// +// Connections handle received close messages by calling the handler function +// set with the SetCloseHandler method and by returning a *CloseError from the +// NextReader, ReadMessage or the message Read method. The default close +// handler sends a close message to the peer. +// +// Connections handle received ping messages by calling the handler function +// set with the SetPingHandler method. The default ping handler sends a pong +// message to the peer. +// +// Connections handle received pong messages by calling the handler function +// set with the SetPongHandler method. The default pong handler does nothing. +// If an application sends ping messages, then the application should set a +// pong handler to receive the corresponding pong. +// +// The control message handler functions are called from the NextReader, +// ReadMessage and message reader Read methods. The default close and ping +// handlers can block these methods for a short time when the handler writes to +// the connection. +// +// The application must read the connection to process close, ping and pong +// messages sent from the peer. If the application is not otherwise interested +// in messages from the peer, then the application should start a goroutine to +// read and discard messages from the peer. A simple example is: +// +// func readLoop(c *websocket.Conn) { +// for { +// if _, _, err := c.NextReader(); err != nil { +// c.Close() +// break +// } +// } +// } +// +// Concurrency +// +// Connections support one concurrent reader and one concurrent writer. +// +// Applications are responsible for ensuring that no more than one goroutine +// calls the write methods (NextWriter, SetWriteDeadline, WriteMessage, +// WriteJSON, EnableWriteCompression, SetCompressionLevel) concurrently and +// that no more than one goroutine calls the read methods (NextReader, +// SetReadDeadline, ReadMessage, ReadJSON, SetPongHandler, SetPingHandler) +// concurrently. +// +// The Close and WriteControl methods can be called concurrently with all other +// methods. +// +// Origin Considerations +// +// Web browsers allow Javascript applications to open a WebSocket connection to +// any host. It's up to the server to enforce an origin policy using the Origin +// request header sent by the browser. +// +// The Upgrader calls the function specified in the CheckOrigin field to check +// the origin. If the CheckOrigin function returns false, then the Upgrade +// method fails the WebSocket handshake with HTTP status 403. +// +// If the CheckOrigin field is nil, then the Upgrader uses a safe default: fail +// the handshake if the Origin request header is present and the Origin host is +// not equal to the Host request header. +// +// The deprecated package-level Upgrade function does not perform origin +// checking. The application is responsible for checking the Origin header +// before calling the Upgrade function. +// +// Buffers +// +// Connections buffer network input and output to reduce the number +// of system calls when reading or writing messages. +// +// Write buffers are also used for constructing WebSocket frames. See RFC 6455, +// Section 5 for a discussion of message framing. A WebSocket frame header is +// written to the network each time a write buffer is flushed to the network. +// Decreasing the size of the write buffer can increase the amount of framing +// overhead on the connection. +// +// The buffer sizes in bytes are specified by the ReadBufferSize and +// WriteBufferSize fields in the Dialer and Upgrader. The Dialer uses a default +// size of 4096 when a buffer size field is set to zero. The Upgrader reuses +// buffers created by the HTTP server when a buffer size field is set to zero. +// The HTTP server buffers have a size of 4096 at the time of this writing. +// +// The buffer sizes do not limit the size of a message that can be read or +// written by a connection. +// +// Buffers are held for the lifetime of the connection by default. If the +// Dialer or Upgrader WriteBufferPool field is set, then a connection holds the +// write buffer only when writing a message. +// +// Applications should tune the buffer sizes to balance memory use and +// performance. Increasing the buffer size uses more memory, but can reduce the +// number of system calls to read or write the network. In the case of writing, +// increasing the buffer size can reduce the number of frame headers written to +// the network. +// +// Some guidelines for setting buffer parameters are: +// +// Limit the buffer sizes to the maximum expected message size. Buffers larger +// than the largest message do not provide any benefit. +// +// Depending on the distribution of message sizes, setting the buffer size to +// a value less than the maximum expected message size can greatly reduce memory +// use with a small impact on performance. Here's an example: If 99% of the +// messages are smaller than 256 bytes and the maximum message size is 512 +// bytes, then a buffer size of 256 bytes will result in 1.01 more system calls +// than a buffer size of 512 bytes. The memory savings is 50%. +// +// A write buffer pool is useful when the application has a modest number +// writes over a large number of connections. when buffers are pooled, a larger +// buffer size has a reduced impact on total memory use and has the benefit of +// reducing system calls and frame overhead. +// +// Compression EXPERIMENTAL +// +// Per message compression extensions (RFC 7692) are experimentally supported +// by this package in a limited capacity. Setting the EnableCompression option +// to true in Dialer or Upgrader will attempt to negotiate per message deflate +// support. +// +// var upgrader = websocket.Upgrader{ +// EnableCompression: true, +// } +// +// If compression was successfully negotiated with the connection's peer, any +// message received in compressed form will be automatically decompressed. +// All Read methods will return uncompressed bytes. +// +// Per message compression of messages written to a connection can be enabled +// or disabled by calling the corresponding Conn method: +// +// conn.EnableWriteCompression(false) +// +// Currently this package does not support compression with "context takeover". +// This means that messages must be compressed and decompressed in isolation, +// without retaining sliding window or dictionary state across messages. For +// more details refer to RFC 7692. +// +// Use of compression is experimental and may result in decreased performance. +package websocket diff --git a/vendor/github.com/gorilla/websocket/join.go b/vendor/github.com/gorilla/websocket/join.go new file mode 100644 index 0000000000..c64f8c8290 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/join.go @@ -0,0 +1,42 @@ +// Copyright 2019 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "io" + "strings" +) + +// JoinMessages concatenates received messages to create a single io.Reader. +// The string term is appended to each message. The returned reader does not +// support concurrent calls to the Read method. +func JoinMessages(c *Conn, term string) io.Reader { + return &joinReader{c: c, term: term} +} + +type joinReader struct { + c *Conn + term string + r io.Reader +} + +func (r *joinReader) Read(p []byte) (int, error) { + if r.r == nil { + var err error + _, r.r, err = r.c.NextReader() + if err != nil { + return 0, err + } + if r.term != "" { + r.r = io.MultiReader(r.r, strings.NewReader(r.term)) + } + } + n, err := r.r.Read(p) + if err == io.EOF { + err = nil + r.r = nil + } + return n, err +} diff --git a/vendor/github.com/gorilla/websocket/json.go b/vendor/github.com/gorilla/websocket/json.go new file mode 100644 index 0000000000..dc2c1f6415 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/json.go @@ -0,0 +1,60 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "encoding/json" + "io" +) + +// WriteJSON writes the JSON encoding of v as a message. +// +// Deprecated: Use c.WriteJSON instead. +func WriteJSON(c *Conn, v interface{}) error { + return c.WriteJSON(v) +} + +// WriteJSON writes the JSON encoding of v as a message. +// +// See the documentation for encoding/json Marshal for details about the +// conversion of Go values to JSON. +func (c *Conn) WriteJSON(v interface{}) error { + w, err := c.NextWriter(TextMessage) + if err != nil { + return err + } + err1 := json.NewEncoder(w).Encode(v) + err2 := w.Close() + if err1 != nil { + return err1 + } + return err2 +} + +// ReadJSON reads the next JSON-encoded message from the connection and stores +// it in the value pointed to by v. +// +// Deprecated: Use c.ReadJSON instead. +func ReadJSON(c *Conn, v interface{}) error { + return c.ReadJSON(v) +} + +// ReadJSON reads the next JSON-encoded message from the connection and stores +// it in the value pointed to by v. +// +// See the documentation for the encoding/json Unmarshal function for details +// about the conversion of JSON to a Go value. +func (c *Conn) ReadJSON(v interface{}) error { + _, r, err := c.NextReader() + if err != nil { + return err + } + err = json.NewDecoder(r).Decode(v) + if err == io.EOF { + // One value is expected in the message. + err = io.ErrUnexpectedEOF + } + return err +} diff --git a/vendor/github.com/gorilla/websocket/mask.go b/vendor/github.com/gorilla/websocket/mask.go new file mode 100644 index 0000000000..d0742bf2a5 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/mask.go @@ -0,0 +1,55 @@ +// Copyright 2016 The Gorilla WebSocket Authors. All rights reserved. Use of +// this source code is governed by a BSD-style license that can be found in the +// LICENSE file. + +//go:build !appengine +// +build !appengine + +package websocket + +import "unsafe" + +const wordSize = int(unsafe.Sizeof(uintptr(0))) + +func maskBytes(key [4]byte, pos int, b []byte) int { + // Mask one byte at a time for small buffers. + if len(b) < 2*wordSize { + for i := range b { + b[i] ^= key[pos&3] + pos++ + } + return pos & 3 + } + + // Mask one byte at a time to word boundary. + if n := int(uintptr(unsafe.Pointer(&b[0]))) % wordSize; n != 0 { + n = wordSize - n + for i := range b[:n] { + b[i] ^= key[pos&3] + pos++ + } + b = b[n:] + } + + // Create aligned word size key. + var k [wordSize]byte + for i := range k { + k[i] = key[(pos+i)&3] + } + kw := *(*uintptr)(unsafe.Pointer(&k)) + + // Mask one word at a time. + n := (len(b) / wordSize) * wordSize + for i := 0; i < n; i += wordSize { + *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&b[0])) + uintptr(i))) ^= kw + } + + // Mask one byte at a time for remaining bytes. + b = b[n:] + for i := range b { + b[i] ^= key[pos&3] + pos++ + } + + return pos & 3 +} diff --git a/vendor/github.com/gorilla/websocket/mask_safe.go b/vendor/github.com/gorilla/websocket/mask_safe.go new file mode 100644 index 0000000000..36250ca7c4 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/mask_safe.go @@ -0,0 +1,16 @@ +// Copyright 2016 The Gorilla WebSocket Authors. All rights reserved. Use of +// this source code is governed by a BSD-style license that can be found in the +// LICENSE file. + +//go:build appengine +// +build appengine + +package websocket + +func maskBytes(key [4]byte, pos int, b []byte) int { + for i := range b { + b[i] ^= key[pos&3] + pos++ + } + return pos & 3 +} diff --git a/vendor/github.com/gorilla/websocket/prepared.go b/vendor/github.com/gorilla/websocket/prepared.go new file mode 100644 index 0000000000..c854225e96 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/prepared.go @@ -0,0 +1,102 @@ +// Copyright 2017 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bytes" + "net" + "sync" + "time" +) + +// PreparedMessage caches on the wire representations of a message payload. +// Use PreparedMessage to efficiently send a message payload to multiple +// connections. PreparedMessage is especially useful when compression is used +// because the CPU and memory expensive compression operation can be executed +// once for a given set of compression options. +type PreparedMessage struct { + messageType int + data []byte + mu sync.Mutex + frames map[prepareKey]*preparedFrame +} + +// prepareKey defines a unique set of options to cache prepared frames in PreparedMessage. +type prepareKey struct { + isServer bool + compress bool + compressionLevel int +} + +// preparedFrame contains data in wire representation. +type preparedFrame struct { + once sync.Once + data []byte +} + +// NewPreparedMessage returns an initialized PreparedMessage. You can then send +// it to connection using WritePreparedMessage method. Valid wire +// representation will be calculated lazily only once for a set of current +// connection options. +func NewPreparedMessage(messageType int, data []byte) (*PreparedMessage, error) { + pm := &PreparedMessage{ + messageType: messageType, + frames: make(map[prepareKey]*preparedFrame), + data: data, + } + + // Prepare a plain server frame. + _, frameData, err := pm.frame(prepareKey{isServer: true, compress: false}) + if err != nil { + return nil, err + } + + // To protect against caller modifying the data argument, remember the data + // copied to the plain server frame. + pm.data = frameData[len(frameData)-len(data):] + return pm, nil +} + +func (pm *PreparedMessage) frame(key prepareKey) (int, []byte, error) { + pm.mu.Lock() + frame, ok := pm.frames[key] + if !ok { + frame = &preparedFrame{} + pm.frames[key] = frame + } + pm.mu.Unlock() + + var err error + frame.once.Do(func() { + // Prepare a frame using a 'fake' connection. + // TODO: Refactor code in conn.go to allow more direct construction of + // the frame. + mu := make(chan struct{}, 1) + mu <- struct{}{} + var nc prepareConn + c := &Conn{ + conn: &nc, + mu: mu, + isServer: key.isServer, + compressionLevel: key.compressionLevel, + enableWriteCompression: true, + writeBuf: make([]byte, defaultWriteBufferSize+maxFrameHeaderSize), + } + if key.compress { + c.newCompressionWriter = compressNoContextTakeover + } + err = c.WriteMessage(pm.messageType, pm.data) + frame.data = nc.buf.Bytes() + }) + return pm.messageType, frame.data, err +} + +type prepareConn struct { + buf bytes.Buffer + net.Conn +} + +func (pc *prepareConn) Write(p []byte) (int, error) { return pc.buf.Write(p) } +func (pc *prepareConn) SetWriteDeadline(t time.Time) error { return nil } diff --git a/vendor/github.com/gorilla/websocket/proxy.go b/vendor/github.com/gorilla/websocket/proxy.go new file mode 100644 index 0000000000..d716a05884 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/proxy.go @@ -0,0 +1,104 @@ +// Copyright 2017 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bufio" + "bytes" + "context" + "encoding/base64" + "errors" + "net" + "net/http" + "net/url" + "strings" + + "golang.org/x/net/proxy" +) + +type netDialerFunc func(ctx context.Context, network, addr string) (net.Conn, error) + +func (fn netDialerFunc) Dial(network, addr string) (net.Conn, error) { + return fn(context.Background(), network, addr) +} + +func (fn netDialerFunc) DialContext(ctx context.Context, network, addr string) (net.Conn, error) { + return fn(ctx, network, addr) +} + +func proxyFromURL(proxyURL *url.URL, forwardDial netDialerFunc) (netDialerFunc, error) { + if proxyURL.Scheme == "http" || proxyURL.Scheme == "https" { + return (&httpProxyDialer{proxyURL: proxyURL, forwardDial: forwardDial}).DialContext, nil + } + dialer, err := proxy.FromURL(proxyURL, forwardDial) + if err != nil { + return nil, err + } + if d, ok := dialer.(proxy.ContextDialer); ok { + return d.DialContext, nil + } + return func(ctx context.Context, net, addr string) (net.Conn, error) { + return dialer.Dial(net, addr) + }, nil +} + +type httpProxyDialer struct { + proxyURL *url.URL + forwardDial netDialerFunc +} + +func (hpd *httpProxyDialer) DialContext(ctx context.Context, network string, addr string) (net.Conn, error) { + hostPort, _ := hostPortNoPort(hpd.proxyURL) + conn, err := hpd.forwardDial(ctx, network, hostPort) + if err != nil { + return nil, err + } + + connectHeader := make(http.Header) + if user := hpd.proxyURL.User; user != nil { + proxyUser := user.Username() + if proxyPassword, passwordSet := user.Password(); passwordSet { + credential := base64.StdEncoding.EncodeToString([]byte(proxyUser + ":" + proxyPassword)) + connectHeader.Set("Proxy-Authorization", "Basic "+credential) + } + } + connectReq := &http.Request{ + Method: http.MethodConnect, + URL: &url.URL{Opaque: addr}, + Host: addr, + Header: connectHeader, + } + + if err := connectReq.Write(conn); err != nil { + conn.Close() + return nil, err + } + + // Read response. It's OK to use and discard buffered reader here because + // the remote server does not speak until spoken to. + br := bufio.NewReader(conn) + resp, err := http.ReadResponse(br, connectReq) + if err != nil { + conn.Close() + return nil, err + } + + // Close the response body to silence false positives from linters. Reset + // the buffered reader first to ensure that Close() does not read from + // conn. + // Note: Applications must call resp.Body.Close() on a response returned + // http.ReadResponse to inspect trailers or read another response from the + // buffered reader. The call to resp.Body.Close() does not release + // resources. + br.Reset(bytes.NewReader(nil)) + _ = resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + _ = conn.Close() + f := strings.SplitN(resp.Status, " ", 2) + return nil, errors.New(f[1]) + } + return conn, nil +} diff --git a/vendor/github.com/gorilla/websocket/server.go b/vendor/github.com/gorilla/websocket/server.go new file mode 100644 index 0000000000..02ea01fdcd --- /dev/null +++ b/vendor/github.com/gorilla/websocket/server.go @@ -0,0 +1,373 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bufio" + "net" + "net/http" + "net/url" + "strings" + "time" +) + +// HandshakeError describes an error with the handshake from the peer. +type HandshakeError struct { + message string +} + +func (e HandshakeError) Error() string { return e.message } + +// Upgrader specifies parameters for upgrading an HTTP connection to a +// WebSocket connection. +// +// It is safe to call Upgrader's methods concurrently. +type Upgrader struct { + // HandshakeTimeout specifies the duration for the handshake to complete. + HandshakeTimeout time.Duration + + // ReadBufferSize and WriteBufferSize specify I/O buffer sizes in bytes. If a buffer + // size is zero, then buffers allocated by the HTTP server are used. The + // I/O buffer sizes do not limit the size of the messages that can be sent + // or received. + ReadBufferSize, WriteBufferSize int + + // WriteBufferPool is a pool of buffers for write operations. If the value + // is not set, then write buffers are allocated to the connection for the + // lifetime of the connection. + // + // A pool is most useful when the application has a modest volume of writes + // across a large number of connections. + // + // Applications should use a single pool for each unique value of + // WriteBufferSize. + WriteBufferPool BufferPool + + // Subprotocols specifies the server's supported protocols in order of + // preference. If this field is not nil, then the Upgrade method negotiates a + // subprotocol by selecting the first match in this list with a protocol + // requested by the client. If there's no match, then no protocol is + // negotiated (the Sec-Websocket-Protocol header is not included in the + // handshake response). + Subprotocols []string + + // Error specifies the function for generating HTTP error responses. If Error + // is nil, then http.Error is used to generate the HTTP response. + Error func(w http.ResponseWriter, r *http.Request, status int, reason error) + + // CheckOrigin returns true if the request Origin header is acceptable. If + // CheckOrigin is nil, then a safe default is used: return false if the + // Origin request header is present and the origin host is not equal to + // request Host header. + // + // A CheckOrigin function should carefully validate the request origin to + // prevent cross-site request forgery. + CheckOrigin func(r *http.Request) bool + + // EnableCompression specify if the server should attempt to negotiate per + // message compression (RFC 7692). Setting this value to true does not + // guarantee that compression will be supported. Currently only "no context + // takeover" modes are supported. + EnableCompression bool +} + +func (u *Upgrader) returnError(w http.ResponseWriter, r *http.Request, status int, reason string) (*Conn, error) { + err := HandshakeError{reason} + if u.Error != nil { + u.Error(w, r, status, err) + } else { + w.Header().Set("Sec-Websocket-Version", "13") + http.Error(w, http.StatusText(status), status) + } + return nil, err +} + +// checkSameOrigin returns true if the origin is not set or is equal to the request host. +func checkSameOrigin(r *http.Request) bool { + origin := r.Header["Origin"] + if len(origin) == 0 { + return true + } + u, err := url.Parse(origin[0]) + if err != nil { + return false + } + return equalASCIIFold(u.Host, r.Host) +} + +func (u *Upgrader) selectSubprotocol(r *http.Request, responseHeader http.Header) string { + if u.Subprotocols != nil { + clientProtocols := Subprotocols(r) + for _, clientProtocol := range clientProtocols { + for _, serverProtocol := range u.Subprotocols { + if clientProtocol == serverProtocol { + return clientProtocol + } + } + } + } else if responseHeader != nil { + return responseHeader.Get("Sec-Websocket-Protocol") + } + return "" +} + +// Upgrade upgrades the HTTP server connection to the WebSocket protocol. +// +// The responseHeader is included in the response to the client's upgrade +// request. Use the responseHeader to specify cookies (Set-Cookie). To specify +// subprotocols supported by the server, set Upgrader.Subprotocols directly. +// +// If the upgrade fails, then Upgrade replies to the client with an HTTP error +// response. +func (u *Upgrader) Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header) (*Conn, error) { + const badHandshake = "websocket: the client is not using the websocket protocol: " + + if !tokenListContainsValue(r.Header, "Connection", "upgrade") { + return u.returnError(w, r, http.StatusBadRequest, badHandshake+"'upgrade' token not found in 'Connection' header") + } + + if !tokenListContainsValue(r.Header, "Upgrade", "websocket") { + w.Header().Set("Upgrade", "websocket") + return u.returnError(w, r, http.StatusUpgradeRequired, badHandshake+"'websocket' token not found in 'Upgrade' header") + } + + if r.Method != http.MethodGet { + return u.returnError(w, r, http.StatusMethodNotAllowed, badHandshake+"request method is not GET") + } + + if !tokenListContainsValue(r.Header, "Sec-Websocket-Version", "13") { + return u.returnError(w, r, http.StatusBadRequest, "websocket: unsupported version: 13 not found in 'Sec-Websocket-Version' header") + } + + if _, ok := responseHeader["Sec-Websocket-Extensions"]; ok { + return u.returnError(w, r, http.StatusInternalServerError, "websocket: application specific 'Sec-WebSocket-Extensions' headers are unsupported") + } + + checkOrigin := u.CheckOrigin + if checkOrigin == nil { + checkOrigin = checkSameOrigin + } + if !checkOrigin(r) { + return u.returnError(w, r, http.StatusForbidden, "websocket: request origin not allowed by Upgrader.CheckOrigin") + } + + challengeKey := r.Header.Get("Sec-Websocket-Key") + if !isValidChallengeKey(challengeKey) { + return u.returnError(w, r, http.StatusBadRequest, "websocket: not a websocket handshake: 'Sec-WebSocket-Key' header must be Base64 encoded value of 16-byte in length") + } + + subprotocol := u.selectSubprotocol(r, responseHeader) + + // Negotiate PMCE + var compress bool + if u.EnableCompression { + for _, ext := range parseExtensions(r.Header) { + if ext[""] != "permessage-deflate" { + continue + } + compress = true + break + } + } + + netConn, brw, err := http.NewResponseController(w).Hijack() + if err != nil { + return u.returnError(w, r, http.StatusInternalServerError, + "websocket: hijack: "+err.Error()) + } + + // Close the network connection when returning an error. The variable + // netConn is set to nil before the success return at the end of the + // function. + defer func() { + if netConn != nil { + // It's safe to ignore the error from Close() because this code is + // only executed when returning a more important error to the + // application. + _ = netConn.Close() + } + }() + + var br *bufio.Reader + if u.ReadBufferSize == 0 && brw.Reader.Size() > 256 { + // Use hijacked buffered reader as the connection reader. + br = brw.Reader + } else if brw.Reader.Buffered() > 0 { + // Wrap the network connection to read buffered data in brw.Reader + // before reading from the network connection. This should be rare + // because a client must not send message data before receiving the + // handshake response. + netConn = &brNetConn{br: brw.Reader, Conn: netConn} + } + + buf := brw.Writer.AvailableBuffer() + + var writeBuf []byte + if u.WriteBufferPool == nil && u.WriteBufferSize == 0 && len(buf) >= maxFrameHeaderSize+256 { + // Reuse hijacked write buffer as connection buffer. + writeBuf = buf + } + + c := newConn(netConn, true, u.ReadBufferSize, u.WriteBufferSize, u.WriteBufferPool, br, writeBuf) + c.subprotocol = subprotocol + + if compress { + c.newCompressionWriter = compressNoContextTakeover + c.newDecompressionReader = decompressNoContextTakeover + } + + // Use larger of hijacked buffer and connection write buffer for header. + p := buf + if len(c.writeBuf) > len(p) { + p = c.writeBuf + } + p = p[:0] + + p = append(p, "HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: "...) + p = append(p, computeAcceptKey(challengeKey)...) + p = append(p, "\r\n"...) + if c.subprotocol != "" { + p = append(p, "Sec-WebSocket-Protocol: "...) + p = append(p, c.subprotocol...) + p = append(p, "\r\n"...) + } + if compress { + p = append(p, "Sec-WebSocket-Extensions: permessage-deflate; server_no_context_takeover; client_no_context_takeover\r\n"...) + } + for k, vs := range responseHeader { + if k == "Sec-Websocket-Protocol" { + continue + } + for _, v := range vs { + p = append(p, k...) + p = append(p, ": "...) + for i := 0; i < len(v); i++ { + b := v[i] + if b <= 31 { + // prevent response splitting. + b = ' ' + } + p = append(p, b) + } + p = append(p, "\r\n"...) + } + } + p = append(p, "\r\n"...) + + if u.HandshakeTimeout > 0 { + if err := netConn.SetWriteDeadline(time.Now().Add(u.HandshakeTimeout)); err != nil { + return nil, err + } + } else { + // Clear deadlines set by HTTP server. + if err := netConn.SetDeadline(time.Time{}); err != nil { + return nil, err + } + } + + if _, err = netConn.Write(p); err != nil { + return nil, err + } + if u.HandshakeTimeout > 0 { + if err := netConn.SetWriteDeadline(time.Time{}); err != nil { + return nil, err + } + } + + // Success! Set netConn to nil to stop the deferred function above from + // closing the network connection. + netConn = nil + + return c, nil +} + +// Upgrade upgrades the HTTP server connection to the WebSocket protocol. +// +// Deprecated: Use websocket.Upgrader instead. +// +// Upgrade does not perform origin checking. The application is responsible for +// checking the Origin header before calling Upgrade. An example implementation +// of the same origin policy check is: +// +// if req.Header.Get("Origin") != "http://"+req.Host { +// http.Error(w, "Origin not allowed", http.StatusForbidden) +// return +// } +// +// If the endpoint supports subprotocols, then the application is responsible +// for negotiating the protocol used on the connection. Use the Subprotocols() +// function to get the subprotocols requested by the client. Use the +// Sec-Websocket-Protocol response header to specify the subprotocol selected +// by the application. +// +// The responseHeader is included in the response to the client's upgrade +// request. Use the responseHeader to specify cookies (Set-Cookie) and the +// negotiated subprotocol (Sec-Websocket-Protocol). +// +// The connection buffers IO to the underlying network connection. The +// readBufSize and writeBufSize parameters specify the size of the buffers to +// use. Messages can be larger than the buffers. +// +// If the request is not a valid WebSocket handshake, then Upgrade returns an +// error of type HandshakeError. Applications should handle this error by +// replying to the client with an HTTP error response. +func Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header, readBufSize, writeBufSize int) (*Conn, error) { + u := Upgrader{ReadBufferSize: readBufSize, WriteBufferSize: writeBufSize} + u.Error = func(w http.ResponseWriter, r *http.Request, status int, reason error) { + // don't return errors to maintain backwards compatibility + } + u.CheckOrigin = func(r *http.Request) bool { + // allow all connections by default + return true + } + return u.Upgrade(w, r, responseHeader) +} + +// Subprotocols returns the subprotocols requested by the client in the +// Sec-Websocket-Protocol header. +func Subprotocols(r *http.Request) []string { + h := strings.TrimSpace(r.Header.Get("Sec-Websocket-Protocol")) + if h == "" { + return nil + } + protocols := strings.Split(h, ",") + for i := range protocols { + protocols[i] = strings.TrimSpace(protocols[i]) + } + return protocols +} + +// IsWebSocketUpgrade returns true if the client requested upgrade to the +// WebSocket protocol. +func IsWebSocketUpgrade(r *http.Request) bool { + return tokenListContainsValue(r.Header, "Connection", "upgrade") && + tokenListContainsValue(r.Header, "Upgrade", "websocket") +} + +type brNetConn struct { + br *bufio.Reader + net.Conn +} + +func (b *brNetConn) Read(p []byte) (n int, err error) { + if b.br != nil { + // Limit read to buferred data. + if n := b.br.Buffered(); len(p) > n { + p = p[:n] + } + n, err = b.br.Read(p) + if b.br.Buffered() == 0 { + b.br = nil + } + return n, err + } + return b.Conn.Read(p) +} + +// NetConn returns the underlying connection that is wrapped by b. +func (b *brNetConn) NetConn() net.Conn { + return b.Conn +} + diff --git a/vendor/github.com/gorilla/websocket/util.go b/vendor/github.com/gorilla/websocket/util.go new file mode 100644 index 0000000000..31a5dee646 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/util.go @@ -0,0 +1,298 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "crypto/rand" + "crypto/sha1" + "encoding/base64" + "io" + "net/http" + "strings" + "unicode/utf8" +) + +var keyGUID = []byte("258EAFA5-E914-47DA-95CA-C5AB0DC85B11") + +func computeAcceptKey(challengeKey string) string { + h := sha1.New() + h.Write([]byte(challengeKey)) + h.Write(keyGUID) + return base64.StdEncoding.EncodeToString(h.Sum(nil)) +} + +func generateChallengeKey() (string, error) { + p := make([]byte, 16) + if _, err := io.ReadFull(rand.Reader, p); err != nil { + return "", err + } + return base64.StdEncoding.EncodeToString(p), nil +} + +// Token octets per RFC 2616. +var isTokenOctet = [256]bool{ + '!': true, + '#': true, + '$': true, + '%': true, + '&': true, + '\'': true, + '*': true, + '+': true, + '-': true, + '.': true, + '0': true, + '1': true, + '2': true, + '3': true, + '4': true, + '5': true, + '6': true, + '7': true, + '8': true, + '9': true, + 'A': true, + 'B': true, + 'C': true, + 'D': true, + 'E': true, + 'F': true, + 'G': true, + 'H': true, + 'I': true, + 'J': true, + 'K': true, + 'L': true, + 'M': true, + 'N': true, + 'O': true, + 'P': true, + 'Q': true, + 'R': true, + 'S': true, + 'T': true, + 'U': true, + 'W': true, + 'V': true, + 'X': true, + 'Y': true, + 'Z': true, + '^': true, + '_': true, + '`': true, + 'a': true, + 'b': true, + 'c': true, + 'd': true, + 'e': true, + 'f': true, + 'g': true, + 'h': true, + 'i': true, + 'j': true, + 'k': true, + 'l': true, + 'm': true, + 'n': true, + 'o': true, + 'p': true, + 'q': true, + 'r': true, + 's': true, + 't': true, + 'u': true, + 'v': true, + 'w': true, + 'x': true, + 'y': true, + 'z': true, + '|': true, + '~': true, +} + +// skipSpace returns a slice of the string s with all leading RFC 2616 linear +// whitespace removed. +func skipSpace(s string) (rest string) { + i := 0 + for ; i < len(s); i++ { + if b := s[i]; b != ' ' && b != '\t' { + break + } + } + return s[i:] +} + +// nextToken returns the leading RFC 2616 token of s and the string following +// the token. +func nextToken(s string) (token, rest string) { + i := 0 + for ; i < len(s); i++ { + if !isTokenOctet[s[i]] { + break + } + } + return s[:i], s[i:] +} + +// nextTokenOrQuoted returns the leading token or quoted string per RFC 2616 +// and the string following the token or quoted string. +func nextTokenOrQuoted(s string) (value string, rest string) { + if !strings.HasPrefix(s, "\"") { + return nextToken(s) + } + s = s[1:] + for i := 0; i < len(s); i++ { + switch s[i] { + case '"': + return s[:i], s[i+1:] + case '\\': + p := make([]byte, len(s)-1) + j := copy(p, s[:i]) + escape := true + for i = i + 1; i < len(s); i++ { + b := s[i] + switch { + case escape: + escape = false + p[j] = b + j++ + case b == '\\': + escape = true + case b == '"': + return string(p[:j]), s[i+1:] + default: + p[j] = b + j++ + } + } + return "", "" + } + } + return "", "" +} + +// equalASCIIFold returns true if s is equal to t with ASCII case folding as +// defined in RFC 4790. +func equalASCIIFold(s, t string) bool { + for s != "" && t != "" { + sr, size := utf8.DecodeRuneInString(s) + s = s[size:] + tr, size := utf8.DecodeRuneInString(t) + t = t[size:] + if sr == tr { + continue + } + if 'A' <= sr && sr <= 'Z' { + sr = sr + 'a' - 'A' + } + if 'A' <= tr && tr <= 'Z' { + tr = tr + 'a' - 'A' + } + if sr != tr { + return false + } + } + return s == t +} + +// tokenListContainsValue returns true if the 1#token header with the given +// name contains a token equal to value with ASCII case folding. +func tokenListContainsValue(header http.Header, name string, value string) bool { +headers: + for _, s := range header[name] { + for { + var t string + t, s = nextToken(skipSpace(s)) + if t == "" { + continue headers + } + s = skipSpace(s) + if s != "" && s[0] != ',' { + continue headers + } + if equalASCIIFold(t, value) { + return true + } + if s == "" { + continue headers + } + s = s[1:] + } + } + return false +} + +// parseExtensions parses WebSocket extensions from a header. +func parseExtensions(header http.Header) []map[string]string { + // From RFC 6455: + // + // Sec-WebSocket-Extensions = extension-list + // extension-list = 1#extension + // extension = extension-token *( ";" extension-param ) + // extension-token = registered-token + // registered-token = token + // extension-param = token [ "=" (token | quoted-string) ] + // ;When using the quoted-string syntax variant, the value + // ;after quoted-string unescaping MUST conform to the + // ;'token' ABNF. + + var result []map[string]string +headers: + for _, s := range header["Sec-Websocket-Extensions"] { + for { + var t string + t, s = nextToken(skipSpace(s)) + if t == "" { + continue headers + } + ext := map[string]string{"": t} + for { + s = skipSpace(s) + if !strings.HasPrefix(s, ";") { + break + } + var k string + k, s = nextToken(skipSpace(s[1:])) + if k == "" { + continue headers + } + s = skipSpace(s) + var v string + if strings.HasPrefix(s, "=") { + v, s = nextTokenOrQuoted(skipSpace(s[1:])) + s = skipSpace(s) + } + if s != "" && s[0] != ',' && s[0] != ';' { + continue headers + } + ext[k] = v + } + if s != "" && s[0] != ',' { + continue headers + } + result = append(result, ext) + if s == "" { + continue headers + } + s = s[1:] + } + } + return result +} + +// isValidChallengeKey checks if the argument meets RFC6455 specification. +func isValidChallengeKey(s string) bool { + // From RFC6455: + // + // A |Sec-WebSocket-Key| header field with a base64-encoded (see + // Section 4 of [RFC4648]) value that, when decoded, is 16 bytes in + // length. + + if s == "" { + return false + } + decoded, err := base64.StdEncoding.DecodeString(s) + return err == nil && len(decoded) == 16 +} diff --git a/vendor/github.com/moby/spdystream/CONTRIBUTING.md b/vendor/github.com/moby/spdystream/CONTRIBUTING.md new file mode 100644 index 0000000000..d4eddcc539 --- /dev/null +++ b/vendor/github.com/moby/spdystream/CONTRIBUTING.md @@ -0,0 +1,13 @@ +# Contributing to SpdyStream + +Want to hack on spdystream? Awesome! Here are instructions to get you +started. + +SpdyStream is a part of the [Docker](https://docker.io) project, and follows +the same rules and principles. If you're already familiar with the way +Docker does things, you'll feel right at home. + +Otherwise, go read +[Docker's contributions guidelines](https://github.com/dotcloud/docker/blob/master/CONTRIBUTING.md). + +Happy hacking! diff --git a/vendor/github.com/moby/spdystream/LICENSE b/vendor/github.com/moby/spdystream/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/vendor/github.com/moby/spdystream/LICENSE @@ -0,0 +1,202 @@ + + 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. diff --git a/vendor/github.com/moby/spdystream/MAINTAINERS b/vendor/github.com/moby/spdystream/MAINTAINERS new file mode 100644 index 0000000000..26e5ec828a --- /dev/null +++ b/vendor/github.com/moby/spdystream/MAINTAINERS @@ -0,0 +1,40 @@ +# Spdystream maintainers file +# +# This file describes who runs the moby/spdystream project and how. +# This is a living document - if you see something out of date or missing, speak up! +# +# It is structured to be consumable by both humans and programs. +# To extract its contents programmatically, use any TOML-compliant parser. +# +# This file is compiled into the MAINTAINERS file in docker/opensource. +# +[Org] + [Org."Core maintainers"] + people = [ + "adisky", + "dims", + "dmcgowan", + ] + +[people] + +# A reference list of all people associated with the project. +# All other sections should refer to people by their canonical key +# in the people section. + + # ADD YOURSELF HERE IN ALPHABETICAL ORDER + + [people.adisky] + Name = "Aditi Sharma" + Email = "adi.sky17@gmail.com" + GitHub = "adisky" + + [people.dims] + Name = "Davanum Srinivas" + Email = "davanum@gmail.com" + GitHub = "dims" + + [people.dmcgowan] + Name = "Derek McGowan" + Email = "derek@mcg.dev" + GitHub = "dmcgowan" diff --git a/vendor/github.com/moby/spdystream/NOTICE b/vendor/github.com/moby/spdystream/NOTICE new file mode 100644 index 0000000000..b9b11c9ab7 --- /dev/null +++ b/vendor/github.com/moby/spdystream/NOTICE @@ -0,0 +1,5 @@ +SpdyStream +Copyright 2014-2021 Docker Inc. + +This product includes software developed at +Docker Inc. (https://www.docker.com/). diff --git a/vendor/github.com/moby/spdystream/README.md b/vendor/github.com/moby/spdystream/README.md new file mode 100644 index 0000000000..b84e983439 --- /dev/null +++ b/vendor/github.com/moby/spdystream/README.md @@ -0,0 +1,77 @@ +# SpdyStream + +A multiplexed stream library using spdy + +## Usage + +Client example (connecting to mirroring server without auth) + +```go +package main + +import ( + "fmt" + "github.com/moby/spdystream" + "net" + "net/http" +) + +func main() { + conn, err := net.Dial("tcp", "localhost:8080") + if err != nil { + panic(err) + } + spdyConn, err := spdystream.NewConnection(conn, false) + if err != nil { + panic(err) + } + go spdyConn.Serve(spdystream.NoOpStreamHandler) + stream, err := spdyConn.CreateStream(http.Header{}, nil, false) + if err != nil { + panic(err) + } + + stream.Wait() + + fmt.Fprint(stream, "Writing to stream") + + buf := make([]byte, 25) + stream.Read(buf) + fmt.Println(string(buf)) + + stream.Close() +} +``` + +Server example (mirroring server without auth) + +```go +package main + +import ( + "github.com/moby/spdystream" + "net" +) + +func main() { + listener, err := net.Listen("tcp", "localhost:8080") + if err != nil { + panic(err) + } + for { + conn, err := listener.Accept() + if err != nil { + panic(err) + } + spdyConn, err := spdystream.NewConnection(conn, true) + if err != nil { + panic(err) + } + go spdyConn.Serve(spdystream.MirrorStreamHandler) + } +} +``` + +## Copyright and license + +Copyright 2013-2021 Docker, inc. Released under the [Apache 2.0 license](LICENSE). diff --git a/vendor/github.com/moby/spdystream/connection.go b/vendor/github.com/moby/spdystream/connection.go new file mode 100644 index 0000000000..1394d0ad4c --- /dev/null +++ b/vendor/github.com/moby/spdystream/connection.go @@ -0,0 +1,991 @@ +/* + Copyright 2014-2021 Docker Inc. + + 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 spdystream + +import ( + "errors" + "fmt" + "io" + "net" + "net/http" + "sync" + "time" + + "github.com/moby/spdystream/spdy" +) + +var ( + ErrInvalidStreamId = errors.New("Invalid stream id") + ErrTimeout = errors.New("Timeout occurred") + ErrReset = errors.New("Stream reset") + ErrWriteClosedStream = errors.New("Write on closed stream") +) + +const ( + FRAME_WORKERS = 5 + QUEUE_SIZE = 50 +) + +type StreamHandler func(stream *Stream) + +type AuthHandler func(header http.Header, slot uint8, parent uint32) bool + +type idleAwareFramer struct { + f *spdy.Framer + conn *Connection + writeLock sync.Mutex + resetChan chan struct{} + setTimeoutLock sync.Mutex + setTimeoutChan chan time.Duration + timeout time.Duration +} + +func newIdleAwareFramer(framer *spdy.Framer) *idleAwareFramer { + iaf := &idleAwareFramer{ + f: framer, + resetChan: make(chan struct{}, 2), + // setTimeoutChan needs to be buffered to avoid deadlocks when calling setIdleTimeout at about + // the same time the connection is being closed + setTimeoutChan: make(chan time.Duration, 1), + } + return iaf +} + +func (i *idleAwareFramer) monitor() { + var ( + timer *time.Timer + expired <-chan time.Time + resetChan = i.resetChan + setTimeoutChan = i.setTimeoutChan + ) +Loop: + for { + select { + case timeout := <-i.setTimeoutChan: + i.timeout = timeout + if timeout == 0 { + if timer != nil { + timer.Stop() + } + } else { + if timer == nil { + timer = time.NewTimer(timeout) + expired = timer.C + } else { + timer.Reset(timeout) + } + } + case <-resetChan: + if timer != nil && i.timeout > 0 { + timer.Reset(i.timeout) + } + case <-expired: + i.conn.streamCond.L.Lock() + streams := i.conn.streams + i.conn.streams = make(map[spdy.StreamId]*Stream) + i.conn.streamCond.Broadcast() + i.conn.streamCond.L.Unlock() + go func() { + for _, stream := range streams { + stream.resetStream() + } + i.conn.Close() + }() + case <-i.conn.closeChan: + if timer != nil { + timer.Stop() + } + + // Start a goroutine to drain resetChan. This is needed because we've seen + // some unit tests with large numbers of goroutines get into a situation + // where resetChan fills up, at least 1 call to Write() is still trying to + // send to resetChan, the connection gets closed, and this case statement + // attempts to grab the write lock that Write() already has, causing a + // deadlock. + // + // See https://github.com/moby/spdystream/issues/49 for more details. + go func() { + for range resetChan { + } + }() + + go func() { + for range setTimeoutChan { + } + }() + + i.writeLock.Lock() + close(resetChan) + i.resetChan = nil + i.writeLock.Unlock() + + i.setTimeoutLock.Lock() + close(i.setTimeoutChan) + i.setTimeoutChan = nil + i.setTimeoutLock.Unlock() + + break Loop + } + } + + // Drain resetChan + for range resetChan { + } +} + +func (i *idleAwareFramer) WriteFrame(frame spdy.Frame) error { + i.writeLock.Lock() + defer i.writeLock.Unlock() + if i.resetChan == nil { + return io.EOF + } + err := i.f.WriteFrame(frame) + if err != nil { + return err + } + + i.resetChan <- struct{}{} + + return nil +} + +func (i *idleAwareFramer) ReadFrame() (spdy.Frame, error) { + frame, err := i.f.ReadFrame() + if err != nil { + return nil, err + } + + // resetChan should never be closed since it is only closed + // when the connection has closed its closeChan. This closure + // only occurs after all Reads have finished + // TODO (dmcgowan): refactor relationship into connection + i.resetChan <- struct{}{} + + return frame, nil +} + +func (i *idleAwareFramer) setIdleTimeout(timeout time.Duration) { + i.setTimeoutLock.Lock() + defer i.setTimeoutLock.Unlock() + + if i.setTimeoutChan == nil { + return + } + + i.setTimeoutChan <- timeout +} + +type Connection struct { + conn net.Conn + framer *idleAwareFramer + + closeChan chan bool + goneAway bool + lastStreamChan chan<- *Stream + goAwayTimeout time.Duration + closeTimeout time.Duration + + streamLock *sync.RWMutex + streamCond *sync.Cond + streams map[spdy.StreamId]*Stream + + nextIdLock sync.Mutex + receiveIdLock sync.Mutex + nextStreamId spdy.StreamId + receivedStreamId spdy.StreamId + + // pingLock protects pingChans and pingId + pingLock sync.Mutex + pingId uint32 + pingChans map[uint32]chan error + + shutdownLock sync.Mutex + shutdownChan chan error + hasShutdown bool + + // for testing https://github.com/moby/spdystream/pull/56 + dataFrameHandler func(*spdy.DataFrame) error +} + +// NewConnection creates a new spdy connection from an existing +// network connection. +func NewConnection(conn net.Conn, server bool) (*Connection, error) { + framer, framerErr := spdy.NewFramer(conn, conn) + if framerErr != nil { + return nil, framerErr + } + idleAwareFramer := newIdleAwareFramer(framer) + var sid spdy.StreamId + var rid spdy.StreamId + var pid uint32 + if server { + sid = 2 + rid = 1 + pid = 2 + } else { + sid = 1 + rid = 2 + pid = 1 + } + + streamLock := new(sync.RWMutex) + streamCond := sync.NewCond(streamLock) + + session := &Connection{ + conn: conn, + framer: idleAwareFramer, + + closeChan: make(chan bool), + goAwayTimeout: time.Duration(0), + closeTimeout: time.Duration(0), + + streamLock: streamLock, + streamCond: streamCond, + streams: make(map[spdy.StreamId]*Stream), + nextStreamId: sid, + receivedStreamId: rid, + + pingId: pid, + pingChans: make(map[uint32]chan error), + + shutdownChan: make(chan error), + } + session.dataFrameHandler = session.handleDataFrame + idleAwareFramer.conn = session + go idleAwareFramer.monitor() + + return session, nil +} + +// Ping sends a ping frame across the connection and +// returns the response time +func (s *Connection) Ping() (time.Duration, error) { + pid := s.pingId + s.pingLock.Lock() + if s.pingId > 0x7ffffffe { + s.pingId = s.pingId - 0x7ffffffe + } else { + s.pingId = s.pingId + 2 + } + pingChan := make(chan error) + s.pingChans[pid] = pingChan + s.pingLock.Unlock() + defer func() { + s.pingLock.Lock() + delete(s.pingChans, pid) + s.pingLock.Unlock() + }() + + frame := &spdy.PingFrame{Id: pid} + startTime := time.Now() + writeErr := s.framer.WriteFrame(frame) + if writeErr != nil { + return time.Duration(0), writeErr + } + select { + case <-s.closeChan: + return time.Duration(0), errors.New("connection closed") + case err, ok := <-pingChan: + if ok && err != nil { + return time.Duration(0), err + } + break + } + return time.Since(startTime), nil +} + +// Serve handles frames sent from the server, including reply frames +// which are needed to fully initiate connections. Both clients and servers +// should call Serve in a separate goroutine before creating streams. +func (s *Connection) Serve(newHandler StreamHandler) { + // use a WaitGroup to wait for all frames to be drained after receiving + // go-away. + var wg sync.WaitGroup + + // Parition queues to ensure stream frames are handled + // by the same worker, ensuring order is maintained + frameQueues := make([]*PriorityFrameQueue, FRAME_WORKERS) + for i := 0; i < FRAME_WORKERS; i++ { + frameQueues[i] = NewPriorityFrameQueue(QUEUE_SIZE) + + // Ensure frame queue is drained when connection is closed + go func(frameQueue *PriorityFrameQueue) { + <-s.closeChan + frameQueue.Drain() + }(frameQueues[i]) + + wg.Add(1) + go func(frameQueue *PriorityFrameQueue) { + // let the WaitGroup know this worker is done + defer wg.Done() + + s.frameHandler(frameQueue, newHandler) + }(frameQueues[i]) + } + + var ( + partitionRoundRobin int + goAwayFrame *spdy.GoAwayFrame + ) +Loop: + for { + readFrame, err := s.framer.ReadFrame() + if err != nil { + if err != io.EOF { + debugMessage("frame read error: %s", err) + } else { + debugMessage("(%p) EOF received", s) + } + break + } + var priority uint8 + var partition int + switch frame := readFrame.(type) { + case *spdy.SynStreamFrame: + if s.checkStreamFrame(frame) { + priority = frame.Priority + partition = int(frame.StreamId % FRAME_WORKERS) + debugMessage("(%p) Add stream frame: %d ", s, frame.StreamId) + s.addStreamFrame(frame) + } else { + debugMessage("(%p) Rejected stream frame: %d ", s, frame.StreamId) + continue + } + case *spdy.SynReplyFrame: + priority = s.getStreamPriority(frame.StreamId) + partition = int(frame.StreamId % FRAME_WORKERS) + case *spdy.DataFrame: + priority = s.getStreamPriority(frame.StreamId) + partition = int(frame.StreamId % FRAME_WORKERS) + case *spdy.RstStreamFrame: + priority = s.getStreamPriority(frame.StreamId) + partition = int(frame.StreamId % FRAME_WORKERS) + case *spdy.HeadersFrame: + priority = s.getStreamPriority(frame.StreamId) + partition = int(frame.StreamId % FRAME_WORKERS) + case *spdy.PingFrame: + priority = 0 + partition = partitionRoundRobin + partitionRoundRobin = (partitionRoundRobin + 1) % FRAME_WORKERS + case *spdy.GoAwayFrame: + // hold on to the go away frame and exit the loop + goAwayFrame = frame + break Loop + default: + priority = 7 + partition = partitionRoundRobin + partitionRoundRobin = (partitionRoundRobin + 1) % FRAME_WORKERS + } + frameQueues[partition].Push(readFrame, priority) + } + close(s.closeChan) + + // wait for all frame handler workers to indicate they've drained their queues + // before handling the go away frame + wg.Wait() + + if goAwayFrame != nil { + s.handleGoAwayFrame(goAwayFrame) + } + + // now it's safe to close remote channels and empty s.streams + s.streamCond.L.Lock() + // notify streams that they're now closed, which will + // unblock any stream Read() calls + for _, stream := range s.streams { + stream.closeRemoteChannels() + } + s.streams = make(map[spdy.StreamId]*Stream) + s.streamCond.Broadcast() + s.streamCond.L.Unlock() +} + +func (s *Connection) frameHandler(frameQueue *PriorityFrameQueue, newHandler StreamHandler) { + for { + popFrame := frameQueue.Pop() + if popFrame == nil { + return + } + + var frameErr error + switch frame := popFrame.(type) { + case *spdy.SynStreamFrame: + frameErr = s.handleStreamFrame(frame, newHandler) + case *spdy.SynReplyFrame: + frameErr = s.handleReplyFrame(frame) + case *spdy.DataFrame: + frameErr = s.dataFrameHandler(frame) + case *spdy.RstStreamFrame: + frameErr = s.handleResetFrame(frame) + case *spdy.HeadersFrame: + frameErr = s.handleHeaderFrame(frame) + case *spdy.PingFrame: + frameErr = s.handlePingFrame(frame) + case *spdy.GoAwayFrame: + frameErr = s.handleGoAwayFrame(frame) + default: + frameErr = fmt.Errorf("unhandled frame type: %T", frame) + } + + if frameErr != nil { + debugMessage("frame handling error: %s", frameErr) + } + } +} + +func (s *Connection) getStreamPriority(streamId spdy.StreamId) uint8 { + stream, streamOk := s.getStream(streamId) + if !streamOk { + return 7 + } + return stream.priority +} + +func (s *Connection) addStreamFrame(frame *spdy.SynStreamFrame) { + var parent *Stream + if frame.AssociatedToStreamId != spdy.StreamId(0) { + parent, _ = s.getStream(frame.AssociatedToStreamId) + } + + stream := &Stream{ + streamId: frame.StreamId, + parent: parent, + conn: s, + startChan: make(chan error), + headers: frame.Headers, + finished: (frame.CFHeader.Flags & spdy.ControlFlagUnidirectional) != 0x00, + replyCond: sync.NewCond(new(sync.Mutex)), + dataChan: make(chan []byte), + headerChan: make(chan http.Header), + closeChan: make(chan bool), + priority: frame.Priority, + } + if frame.CFHeader.Flags&spdy.ControlFlagFin != 0x00 { + stream.closeRemoteChannels() + } + + s.addStream(stream) +} + +// checkStreamFrame checks to see if a stream frame is allowed. +// If the stream is invalid, then a reset frame with protocol error +// will be returned. +func (s *Connection) checkStreamFrame(frame *spdy.SynStreamFrame) bool { + s.receiveIdLock.Lock() + defer s.receiveIdLock.Unlock() + if s.goneAway { + return false + } + validationErr := s.validateStreamId(frame.StreamId) + if validationErr != nil { + go func() { + resetErr := s.sendResetFrame(spdy.ProtocolError, frame.StreamId) + if resetErr != nil { + debugMessage("reset error: %s", resetErr) + } + }() + return false + } + return true +} + +func (s *Connection) handleStreamFrame(frame *spdy.SynStreamFrame, newHandler StreamHandler) error { + stream, ok := s.getStream(frame.StreamId) + if !ok { + return fmt.Errorf("Missing stream: %d", frame.StreamId) + } + + newHandler(stream) + + return nil +} + +func (s *Connection) handleReplyFrame(frame *spdy.SynReplyFrame) error { + debugMessage("(%p) Reply frame received for %d", s, frame.StreamId) + stream, streamOk := s.getStream(frame.StreamId) + if !streamOk { + debugMessage("Reply frame gone away for %d", frame.StreamId) + // Stream has already gone away + return nil + } + if stream.replied { + // Stream has already received reply + return nil + } + stream.replied = true + + // TODO Check for error + if (frame.CFHeader.Flags & spdy.ControlFlagFin) != 0x00 { + s.remoteStreamFinish(stream) + } + + close(stream.startChan) + + return nil +} + +func (s *Connection) handleResetFrame(frame *spdy.RstStreamFrame) error { + stream, streamOk := s.getStream(frame.StreamId) + if !streamOk { + // Stream has already been removed + return nil + } + s.removeStream(stream) + stream.closeRemoteChannels() + + if !stream.replied { + stream.replied = true + stream.startChan <- ErrReset + close(stream.startChan) + } + + stream.finishLock.Lock() + stream.finished = true + stream.finishLock.Unlock() + + return nil +} + +func (s *Connection) handleHeaderFrame(frame *spdy.HeadersFrame) error { + stream, streamOk := s.getStream(frame.StreamId) + if !streamOk { + // Stream has already gone away + return nil + } + if !stream.replied { + // No reply received...Protocol error? + return nil + } + + // TODO limit headers while not blocking (use buffered chan or goroutine?) + select { + case <-stream.closeChan: + return nil + case stream.headerChan <- frame.Headers: + } + + if (frame.CFHeader.Flags & spdy.ControlFlagFin) != 0x00 { + s.remoteStreamFinish(stream) + } + + return nil +} + +func (s *Connection) handleDataFrame(frame *spdy.DataFrame) error { + debugMessage("(%p) Data frame received for %d", s, frame.StreamId) + stream, streamOk := s.getStream(frame.StreamId) + if !streamOk { + debugMessage("(%p) Data frame gone away for %d", s, frame.StreamId) + // Stream has already gone away + return nil + } + if !stream.replied { + debugMessage("(%p) Data frame not replied %d", s, frame.StreamId) + // No reply received...Protocol error? + return nil + } + + debugMessage("(%p) (%d) Data frame handling", stream, stream.streamId) + if len(frame.Data) > 0 { + stream.dataLock.RLock() + select { + case <-stream.closeChan: + debugMessage("(%p) (%d) Data frame not sent (stream shut down)", stream, stream.streamId) + case stream.dataChan <- frame.Data: + debugMessage("(%p) (%d) Data frame sent", stream, stream.streamId) + } + stream.dataLock.RUnlock() + } + if (frame.Flags & spdy.DataFlagFin) != 0x00 { + s.remoteStreamFinish(stream) + } + return nil +} + +func (s *Connection) handlePingFrame(frame *spdy.PingFrame) error { + s.pingLock.Lock() + pingId := s.pingId + pingChan, pingOk := s.pingChans[frame.Id] + s.pingLock.Unlock() + + if pingId&0x01 != frame.Id&0x01 { + return s.framer.WriteFrame(frame) + } + if pingOk { + close(pingChan) + } + return nil +} + +func (s *Connection) handleGoAwayFrame(frame *spdy.GoAwayFrame) error { + debugMessage("(%p) Go away received", s) + s.receiveIdLock.Lock() + if s.goneAway { + s.receiveIdLock.Unlock() + return nil + } + s.goneAway = true + s.receiveIdLock.Unlock() + + if s.lastStreamChan != nil { + stream, _ := s.getStream(frame.LastGoodStreamId) + go func() { + s.lastStreamChan <- stream + }() + } + + // Do not block frame handler waiting for closure + go s.shutdown(s.goAwayTimeout) + + return nil +} + +func (s *Connection) remoteStreamFinish(stream *Stream) { + stream.closeRemoteChannels() + + stream.finishLock.Lock() + if stream.finished { + // Stream is fully closed, cleanup + s.removeStream(stream) + } + stream.finishLock.Unlock() +} + +// CreateStream creates a new spdy stream using the parameters for +// creating the stream frame. The stream frame will be sent upon +// calling this function, however this function does not wait for +// the reply frame. If waiting for the reply is desired, use +// the stream Wait or WaitTimeout function on the stream returned +// by this function. +func (s *Connection) CreateStream(headers http.Header, parent *Stream, fin bool) (*Stream, error) { + // MUST synchronize stream creation (all the way to writing the frame) + // as stream IDs **MUST** increase monotonically. + s.nextIdLock.Lock() + defer s.nextIdLock.Unlock() + + streamId := s.getNextStreamId() + if streamId == 0 { + return nil, fmt.Errorf("Unable to get new stream id") + } + + stream := &Stream{ + streamId: streamId, + parent: parent, + conn: s, + startChan: make(chan error), + headers: headers, + dataChan: make(chan []byte), + headerChan: make(chan http.Header), + closeChan: make(chan bool), + } + + debugMessage("(%p) (%p) Create stream", s, stream) + + s.addStream(stream) + + return stream, s.sendStream(stream, fin) +} + +func (s *Connection) shutdown(closeTimeout time.Duration) { + // TODO Ensure this isn't called multiple times + s.shutdownLock.Lock() + if s.hasShutdown { + s.shutdownLock.Unlock() + return + } + s.hasShutdown = true + s.shutdownLock.Unlock() + + var timeout <-chan time.Time + if closeTimeout > time.Duration(0) { + timer := time.NewTimer(closeTimeout) + defer timer.Stop() + timeout = timer.C + } + streamsClosed := make(chan bool) + + go func() { + s.streamCond.L.Lock() + for len(s.streams) > 0 { + debugMessage("Streams opened: %d, %#v", len(s.streams), s.streams) + s.streamCond.Wait() + } + s.streamCond.L.Unlock() + close(streamsClosed) + }() + + var err error + select { + case <-streamsClosed: + // No active streams, close should be safe + err = s.conn.Close() + case <-timeout: + // Force ungraceful close + err = s.conn.Close() + // Wait for cleanup to clear active streams + <-streamsClosed + } + + if err != nil { + // default to 1 second + duration := time.Second + // if a closeTimeout was given, use that, clipped to 1s-10m + if closeTimeout > time.Second { + duration = closeTimeout + } + if duration > 10*time.Minute { + duration = 10 * time.Minute + } + timer := time.NewTimer(duration) + defer timer.Stop() + select { + case s.shutdownChan <- err: + // error was handled + case <-timer.C: + debugMessage("Unhandled close error after %s: %s", duration, err) + } + } + close(s.shutdownChan) +} + +// Closes spdy connection by sending GoAway frame and initiating shutdown +func (s *Connection) Close() error { + s.receiveIdLock.Lock() + if s.goneAway { + s.receiveIdLock.Unlock() + return nil + } + s.goneAway = true + s.receiveIdLock.Unlock() + + var lastStreamId spdy.StreamId + if s.receivedStreamId > 2 { + lastStreamId = s.receivedStreamId - 2 + } + + goAwayFrame := &spdy.GoAwayFrame{ + LastGoodStreamId: lastStreamId, + Status: spdy.GoAwayOK, + } + + err := s.framer.WriteFrame(goAwayFrame) + go s.shutdown(s.closeTimeout) + if err != nil { + return err + } + + return nil +} + +// CloseWait closes the connection and waits for shutdown +// to finish. Note the underlying network Connection +// is not closed until the end of shutdown. +func (s *Connection) CloseWait() error { + closeErr := s.Close() + if closeErr != nil { + return closeErr + } + shutdownErr, ok := <-s.shutdownChan + if ok { + return shutdownErr + } + return nil +} + +// Wait waits for the connection to finish shutdown or for +// the wait timeout duration to expire. This needs to be +// called either after Close has been called or the GOAWAYFRAME +// has been received. If the wait timeout is 0, this function +// will block until shutdown finishes. If wait is never called +// and a shutdown error occurs, that error will be logged as an +// unhandled error. +func (s *Connection) Wait(waitTimeout time.Duration) error { + var timeout <-chan time.Time + if waitTimeout > time.Duration(0) { + timer := time.NewTimer(waitTimeout) + defer timer.Stop() + timeout = timer.C + } + + select { + case err, ok := <-s.shutdownChan: + if ok { + return err + } + case <-timeout: + return ErrTimeout + } + return nil +} + +// NotifyClose registers a channel to be called when the remote +// peer inidicates connection closure. The last stream to be +// received by the remote will be sent on the channel. The notify +// timeout will determine the duration between go away received +// and the connection being closed. +func (s *Connection) NotifyClose(c chan<- *Stream, timeout time.Duration) { + s.goAwayTimeout = timeout + s.lastStreamChan = c +} + +// SetCloseTimeout sets the amount of time close will wait for +// streams to finish before terminating the underlying network +// connection. Setting the timeout to 0 will cause close to +// wait forever, which is the default. +func (s *Connection) SetCloseTimeout(timeout time.Duration) { + s.closeTimeout = timeout +} + +// SetIdleTimeout sets the amount of time the connection may sit idle before +// it is forcefully terminated. +func (s *Connection) SetIdleTimeout(timeout time.Duration) { + s.framer.setIdleTimeout(timeout) +} + +func (s *Connection) sendHeaders(headers http.Header, stream *Stream, fin bool) error { + var flags spdy.ControlFlags + if fin { + flags = spdy.ControlFlagFin + } + + headerFrame := &spdy.HeadersFrame{ + StreamId: stream.streamId, + Headers: headers, + CFHeader: spdy.ControlFrameHeader{Flags: flags}, + } + + return s.framer.WriteFrame(headerFrame) +} + +func (s *Connection) sendReply(headers http.Header, stream *Stream, fin bool) error { + var flags spdy.ControlFlags + if fin { + flags = spdy.ControlFlagFin + } + + replyFrame := &spdy.SynReplyFrame{ + StreamId: stream.streamId, + Headers: headers, + CFHeader: spdy.ControlFrameHeader{Flags: flags}, + } + + return s.framer.WriteFrame(replyFrame) +} + +func (s *Connection) sendResetFrame(status spdy.RstStreamStatus, streamId spdy.StreamId) error { + resetFrame := &spdy.RstStreamFrame{ + StreamId: streamId, + Status: status, + } + + return s.framer.WriteFrame(resetFrame) +} + +func (s *Connection) sendReset(status spdy.RstStreamStatus, stream *Stream) error { + return s.sendResetFrame(status, stream.streamId) +} + +func (s *Connection) sendStream(stream *Stream, fin bool) error { + var flags spdy.ControlFlags + if fin { + flags = spdy.ControlFlagFin + stream.finished = true + } + + var parentId spdy.StreamId + if stream.parent != nil { + parentId = stream.parent.streamId + } + + streamFrame := &spdy.SynStreamFrame{ + StreamId: spdy.StreamId(stream.streamId), + AssociatedToStreamId: spdy.StreamId(parentId), + Headers: stream.headers, + CFHeader: spdy.ControlFrameHeader{Flags: flags}, + } + + return s.framer.WriteFrame(streamFrame) +} + +// getNextStreamId returns the next sequential id +// every call should produce a unique value or an error +func (s *Connection) getNextStreamId() spdy.StreamId { + sid := s.nextStreamId + if sid > 0x7fffffff { + return 0 + } + s.nextStreamId = s.nextStreamId + 2 + return sid +} + +// PeekNextStreamId returns the next sequential id and keeps the next id untouched +func (s *Connection) PeekNextStreamId() spdy.StreamId { + sid := s.nextStreamId + return sid +} + +func (s *Connection) validateStreamId(rid spdy.StreamId) error { + if rid > 0x7fffffff || rid < s.receivedStreamId { + return ErrInvalidStreamId + } + s.receivedStreamId = rid + 2 + return nil +} + +func (s *Connection) addStream(stream *Stream) { + s.streamCond.L.Lock() + s.streams[stream.streamId] = stream + debugMessage("(%p) (%p) Stream added, broadcasting: %d", s, stream, stream.streamId) + s.streamCond.Broadcast() + s.streamCond.L.Unlock() +} + +func (s *Connection) removeStream(stream *Stream) { + s.streamCond.L.Lock() + delete(s.streams, stream.streamId) + debugMessage("(%p) (%p) Stream removed, broadcasting: %d", s, stream, stream.streamId) + s.streamCond.Broadcast() + s.streamCond.L.Unlock() +} + +func (s *Connection) getStream(streamId spdy.StreamId) (stream *Stream, ok bool) { + s.streamLock.RLock() + stream, ok = s.streams[streamId] + s.streamLock.RUnlock() + return +} + +// FindStream looks up the given stream id and either waits for the +// stream to be found or returns nil if the stream id is no longer +// valid. +func (s *Connection) FindStream(streamId uint32) *Stream { + var stream *Stream + var ok bool + s.streamCond.L.Lock() + stream, ok = s.streams[spdy.StreamId(streamId)] + debugMessage("(%p) Found stream %d? %t", s, spdy.StreamId(streamId), ok) + for !ok && streamId >= uint32(s.receivedStreamId) { + s.streamCond.Wait() + stream, ok = s.streams[spdy.StreamId(streamId)] + } + s.streamCond.L.Unlock() + return stream +} + +func (s *Connection) CloseChan() <-chan bool { + return s.closeChan +} diff --git a/vendor/github.com/moby/spdystream/handlers.go b/vendor/github.com/moby/spdystream/handlers.go new file mode 100644 index 0000000000..d68f61f812 --- /dev/null +++ b/vendor/github.com/moby/spdystream/handlers.go @@ -0,0 +1,52 @@ +/* + Copyright 2014-2021 Docker Inc. + + 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 spdystream + +import ( + "io" + "net/http" +) + +// MirrorStreamHandler mirrors all streams. +func MirrorStreamHandler(stream *Stream) { + replyErr := stream.SendReply(http.Header{}, false) + if replyErr != nil { + return + } + + go func() { + io.Copy(stream, stream) + stream.Close() + }() + go func() { + for { + header, receiveErr := stream.ReceiveHeader() + if receiveErr != nil { + return + } + sendErr := stream.SendHeader(header, false) + if sendErr != nil { + return + } + } + }() +} + +// NoopStreamHandler does nothing when stream connects. +func NoOpStreamHandler(stream *Stream) { + stream.SendReply(http.Header{}, false) +} diff --git a/vendor/github.com/moby/spdystream/priority.go b/vendor/github.com/moby/spdystream/priority.go new file mode 100644 index 0000000000..d8eb3516ca --- /dev/null +++ b/vendor/github.com/moby/spdystream/priority.go @@ -0,0 +1,114 @@ +/* + Copyright 2014-2021 Docker Inc. + + 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 spdystream + +import ( + "container/heap" + "sync" + + "github.com/moby/spdystream/spdy" +) + +type prioritizedFrame struct { + frame spdy.Frame + priority uint8 + insertId uint64 +} + +type frameQueue []*prioritizedFrame + +func (fq frameQueue) Len() int { + return len(fq) +} + +func (fq frameQueue) Less(i, j int) bool { + if fq[i].priority == fq[j].priority { + return fq[i].insertId < fq[j].insertId + } + return fq[i].priority < fq[j].priority +} + +func (fq frameQueue) Swap(i, j int) { + fq[i], fq[j] = fq[j], fq[i] +} + +func (fq *frameQueue) Push(x interface{}) { + *fq = append(*fq, x.(*prioritizedFrame)) +} + +func (fq *frameQueue) Pop() interface{} { + old := *fq + n := len(old) + *fq = old[0 : n-1] + return old[n-1] +} + +type PriorityFrameQueue struct { + queue *frameQueue + c *sync.Cond + size int + nextInsertId uint64 + drain bool +} + +func NewPriorityFrameQueue(size int) *PriorityFrameQueue { + queue := make(frameQueue, 0, size) + heap.Init(&queue) + + return &PriorityFrameQueue{ + queue: &queue, + size: size, + c: sync.NewCond(&sync.Mutex{}), + } +} + +func (q *PriorityFrameQueue) Push(frame spdy.Frame, priority uint8) { + q.c.L.Lock() + defer q.c.L.Unlock() + for q.queue.Len() >= q.size { + q.c.Wait() + } + pFrame := &prioritizedFrame{ + frame: frame, + priority: priority, + insertId: q.nextInsertId, + } + q.nextInsertId = q.nextInsertId + 1 + heap.Push(q.queue, pFrame) + q.c.Signal() +} + +func (q *PriorityFrameQueue) Pop() spdy.Frame { + q.c.L.Lock() + defer q.c.L.Unlock() + for q.queue.Len() == 0 { + if q.drain { + return nil + } + q.c.Wait() + } + frame := heap.Pop(q.queue).(*prioritizedFrame).frame + q.c.Signal() + return frame +} + +func (q *PriorityFrameQueue) Drain() { + q.c.L.Lock() + defer q.c.L.Unlock() + q.drain = true + q.c.Broadcast() +} diff --git a/vendor/github.com/moby/spdystream/spdy/dictionary.go b/vendor/github.com/moby/spdystream/spdy/dictionary.go new file mode 100644 index 0000000000..392232f174 --- /dev/null +++ b/vendor/github.com/moby/spdystream/spdy/dictionary.go @@ -0,0 +1,203 @@ +/* + Copyright 2014-2021 Docker Inc. + + 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. +*/ + +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package spdy + +// headerDictionary is the dictionary sent to the zlib compressor/decompressor. +var headerDictionary = []byte{ + 0x00, 0x00, 0x00, 0x07, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x00, 0x00, 0x00, 0x04, 0x68, + 0x65, 0x61, 0x64, 0x00, 0x00, 0x00, 0x04, 0x70, + 0x6f, 0x73, 0x74, 0x00, 0x00, 0x00, 0x03, 0x70, + 0x75, 0x74, 0x00, 0x00, 0x00, 0x06, 0x64, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x00, 0x00, 0x00, 0x05, + 0x74, 0x72, 0x61, 0x63, 0x65, 0x00, 0x00, 0x00, + 0x06, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x00, + 0x00, 0x00, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x70, + 0x74, 0x2d, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, + 0x74, 0x00, 0x00, 0x00, 0x0f, 0x61, 0x63, 0x63, + 0x65, 0x70, 0x74, 0x2d, 0x65, 0x6e, 0x63, 0x6f, + 0x64, 0x69, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x0f, + 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x6c, + 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x00, + 0x00, 0x00, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x70, + 0x74, 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, + 0x00, 0x00, 0x00, 0x03, 0x61, 0x67, 0x65, 0x00, + 0x00, 0x00, 0x05, 0x61, 0x6c, 0x6c, 0x6f, 0x77, + 0x00, 0x00, 0x00, 0x0d, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x00, 0x00, 0x00, 0x0d, 0x63, 0x61, 0x63, + 0x68, 0x65, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x00, 0x00, 0x00, 0x0a, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x00, 0x00, 0x00, 0x0c, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x2d, 0x62, 0x61, 0x73, 0x65, + 0x00, 0x00, 0x00, 0x10, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x2d, 0x65, 0x6e, 0x63, 0x6f, + 0x64, 0x69, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x10, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, + 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, + 0x00, 0x00, 0x00, 0x0e, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x2d, 0x6c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x00, 0x00, 0x00, 0x10, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, + 0x00, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x2d, 0x6d, 0x64, 0x35, 0x00, 0x00, 0x00, + 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x00, 0x00, + 0x00, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x00, 0x00, + 0x00, 0x04, 0x64, 0x61, 0x74, 0x65, 0x00, 0x00, + 0x00, 0x04, 0x65, 0x74, 0x61, 0x67, 0x00, 0x00, + 0x00, 0x06, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, + 0x00, 0x00, 0x00, 0x07, 0x65, 0x78, 0x70, 0x69, + 0x72, 0x65, 0x73, 0x00, 0x00, 0x00, 0x04, 0x66, + 0x72, 0x6f, 0x6d, 0x00, 0x00, 0x00, 0x04, 0x68, + 0x6f, 0x73, 0x74, 0x00, 0x00, 0x00, 0x08, 0x69, + 0x66, 0x2d, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x00, + 0x00, 0x00, 0x11, 0x69, 0x66, 0x2d, 0x6d, 0x6f, + 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2d, 0x73, + 0x69, 0x6e, 0x63, 0x65, 0x00, 0x00, 0x00, 0x0d, + 0x69, 0x66, 0x2d, 0x6e, 0x6f, 0x6e, 0x65, 0x2d, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x00, 0x00, 0x00, + 0x08, 0x69, 0x66, 0x2d, 0x72, 0x61, 0x6e, 0x67, + 0x65, 0x00, 0x00, 0x00, 0x13, 0x69, 0x66, 0x2d, + 0x75, 0x6e, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, + 0x65, 0x64, 0x2d, 0x73, 0x69, 0x6e, 0x63, 0x65, + 0x00, 0x00, 0x00, 0x0d, 0x6c, 0x61, 0x73, 0x74, + 0x2d, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, + 0x64, 0x00, 0x00, 0x00, 0x08, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, + 0x0c, 0x6d, 0x61, 0x78, 0x2d, 0x66, 0x6f, 0x72, + 0x77, 0x61, 0x72, 0x64, 0x73, 0x00, 0x00, 0x00, + 0x06, 0x70, 0x72, 0x61, 0x67, 0x6d, 0x61, 0x00, + 0x00, 0x00, 0x12, 0x70, 0x72, 0x6f, 0x78, 0x79, + 0x2d, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, + 0x13, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2d, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, + 0x72, 0x61, 0x6e, 0x67, 0x65, 0x00, 0x00, 0x00, + 0x07, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x72, + 0x00, 0x00, 0x00, 0x0b, 0x72, 0x65, 0x74, 0x72, + 0x79, 0x2d, 0x61, 0x66, 0x74, 0x65, 0x72, 0x00, + 0x00, 0x00, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x00, 0x00, 0x00, 0x02, 0x74, 0x65, 0x00, + 0x00, 0x00, 0x07, 0x74, 0x72, 0x61, 0x69, 0x6c, + 0x65, 0x72, 0x00, 0x00, 0x00, 0x11, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x2d, 0x65, + 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x00, + 0x00, 0x00, 0x07, 0x75, 0x70, 0x67, 0x72, 0x61, + 0x64, 0x65, 0x00, 0x00, 0x00, 0x0a, 0x75, 0x73, + 0x65, 0x72, 0x2d, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x00, 0x00, 0x00, 0x04, 0x76, 0x61, 0x72, 0x79, + 0x00, 0x00, 0x00, 0x03, 0x76, 0x69, 0x61, 0x00, + 0x00, 0x00, 0x07, 0x77, 0x61, 0x72, 0x6e, 0x69, + 0x6e, 0x67, 0x00, 0x00, 0x00, 0x10, 0x77, 0x77, + 0x77, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, + 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x00, 0x00, + 0x00, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x00, 0x00, 0x00, 0x03, 0x67, 0x65, 0x74, 0x00, + 0x00, 0x00, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x00, 0x00, 0x00, 0x06, 0x32, 0x30, 0x30, + 0x20, 0x4f, 0x4b, 0x00, 0x00, 0x00, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x00, + 0x00, 0x08, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, + 0x2e, 0x31, 0x00, 0x00, 0x00, 0x03, 0x75, 0x72, + 0x6c, 0x00, 0x00, 0x00, 0x06, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x00, 0x00, 0x00, 0x0a, 0x73, + 0x65, 0x74, 0x2d, 0x63, 0x6f, 0x6f, 0x6b, 0x69, + 0x65, 0x00, 0x00, 0x00, 0x0a, 0x6b, 0x65, 0x65, + 0x70, 0x2d, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x00, + 0x00, 0x00, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, + 0x6e, 0x31, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, + 0x30, 0x31, 0x32, 0x30, 0x32, 0x32, 0x30, 0x35, + 0x32, 0x30, 0x36, 0x33, 0x30, 0x30, 0x33, 0x30, + 0x32, 0x33, 0x30, 0x33, 0x33, 0x30, 0x34, 0x33, + 0x30, 0x35, 0x33, 0x30, 0x36, 0x33, 0x30, 0x37, + 0x34, 0x30, 0x32, 0x34, 0x30, 0x35, 0x34, 0x30, + 0x36, 0x34, 0x30, 0x37, 0x34, 0x30, 0x38, 0x34, + 0x30, 0x39, 0x34, 0x31, 0x30, 0x34, 0x31, 0x31, + 0x34, 0x31, 0x32, 0x34, 0x31, 0x33, 0x34, 0x31, + 0x34, 0x34, 0x31, 0x35, 0x34, 0x31, 0x36, 0x34, + 0x31, 0x37, 0x35, 0x30, 0x32, 0x35, 0x30, 0x34, + 0x35, 0x30, 0x35, 0x32, 0x30, 0x33, 0x20, 0x4e, + 0x6f, 0x6e, 0x2d, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x32, 0x30, 0x34, 0x20, + 0x4e, 0x6f, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x33, 0x30, 0x31, 0x20, 0x4d, 0x6f, + 0x76, 0x65, 0x64, 0x20, 0x50, 0x65, 0x72, 0x6d, + 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x34, + 0x30, 0x30, 0x20, 0x42, 0x61, 0x64, 0x20, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x34, 0x30, + 0x31, 0x20, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x34, 0x30, + 0x33, 0x20, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, + 0x64, 0x65, 0x6e, 0x34, 0x30, 0x34, 0x20, 0x4e, + 0x6f, 0x74, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, + 0x35, 0x30, 0x30, 0x20, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x20, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x35, 0x30, 0x31, 0x20, 0x4e, 0x6f, 0x74, + 0x20, 0x49, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x65, 0x64, 0x35, 0x30, 0x33, 0x20, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, + 0x55, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x4a, 0x61, 0x6e, 0x20, 0x46, + 0x65, 0x62, 0x20, 0x4d, 0x61, 0x72, 0x20, 0x41, + 0x70, 0x72, 0x20, 0x4d, 0x61, 0x79, 0x20, 0x4a, + 0x75, 0x6e, 0x20, 0x4a, 0x75, 0x6c, 0x20, 0x41, + 0x75, 0x67, 0x20, 0x53, 0x65, 0x70, 0x74, 0x20, + 0x4f, 0x63, 0x74, 0x20, 0x4e, 0x6f, 0x76, 0x20, + 0x44, 0x65, 0x63, 0x20, 0x30, 0x30, 0x3a, 0x30, + 0x30, 0x3a, 0x30, 0x30, 0x20, 0x4d, 0x6f, 0x6e, + 0x2c, 0x20, 0x54, 0x75, 0x65, 0x2c, 0x20, 0x57, + 0x65, 0x64, 0x2c, 0x20, 0x54, 0x68, 0x75, 0x2c, + 0x20, 0x46, 0x72, 0x69, 0x2c, 0x20, 0x53, 0x61, + 0x74, 0x2c, 0x20, 0x53, 0x75, 0x6e, 0x2c, 0x20, + 0x47, 0x4d, 0x54, 0x63, 0x68, 0x75, 0x6e, 0x6b, + 0x65, 0x64, 0x2c, 0x74, 0x65, 0x78, 0x74, 0x2f, + 0x68, 0x74, 0x6d, 0x6c, 0x2c, 0x69, 0x6d, 0x61, + 0x67, 0x65, 0x2f, 0x70, 0x6e, 0x67, 0x2c, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x6a, 0x70, 0x67, + 0x2c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x67, + 0x69, 0x66, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, + 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, + 0x68, 0x74, 0x6d, 0x6c, 0x2b, 0x78, 0x6d, 0x6c, + 0x2c, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x70, 0x6c, + 0x61, 0x69, 0x6e, 0x2c, 0x74, 0x65, 0x78, 0x74, + 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x2c, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x6d, 0x61, 0x78, 0x2d, 0x61, 0x67, 0x65, + 0x3d, 0x67, 0x7a, 0x69, 0x70, 0x2c, 0x64, 0x65, + 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x73, 0x64, + 0x63, 0x68, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, + 0x74, 0x3d, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x63, + 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x69, + 0x73, 0x6f, 0x2d, 0x38, 0x38, 0x35, 0x39, 0x2d, + 0x31, 0x2c, 0x75, 0x74, 0x66, 0x2d, 0x2c, 0x2a, + 0x2c, 0x65, 0x6e, 0x71, 0x3d, 0x30, 0x2e, +} diff --git a/vendor/github.com/moby/spdystream/spdy/read.go b/vendor/github.com/moby/spdystream/spdy/read.go new file mode 100644 index 0000000000..75ea045b8e --- /dev/null +++ b/vendor/github.com/moby/spdystream/spdy/read.go @@ -0,0 +1,364 @@ +/* + Copyright 2014-2021 Docker Inc. + + 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. +*/ + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package spdy + +import ( + "compress/zlib" + "encoding/binary" + "io" + "net/http" + "strings" +) + +func (frame *SynStreamFrame) read(h ControlFrameHeader, f *Framer) error { + return f.readSynStreamFrame(h, frame) +} + +func (frame *SynReplyFrame) read(h ControlFrameHeader, f *Framer) error { + return f.readSynReplyFrame(h, frame) +} + +func (frame *RstStreamFrame) read(h ControlFrameHeader, f *Framer) error { + frame.CFHeader = h + if err := binary.Read(f.r, binary.BigEndian, &frame.StreamId); err != nil { + return err + } + if err := binary.Read(f.r, binary.BigEndian, &frame.Status); err != nil { + return err + } + if frame.Status == 0 { + return &Error{InvalidControlFrame, frame.StreamId} + } + if frame.StreamId == 0 { + return &Error{ZeroStreamId, 0} + } + return nil +} + +func (frame *SettingsFrame) read(h ControlFrameHeader, f *Framer) error { + frame.CFHeader = h + var numSettings uint32 + if err := binary.Read(f.r, binary.BigEndian, &numSettings); err != nil { + return err + } + frame.FlagIdValues = make([]SettingsFlagIdValue, numSettings) + for i := uint32(0); i < numSettings; i++ { + if err := binary.Read(f.r, binary.BigEndian, &frame.FlagIdValues[i].Id); err != nil { + return err + } + frame.FlagIdValues[i].Flag = SettingsFlag((frame.FlagIdValues[i].Id & 0xff000000) >> 24) + frame.FlagIdValues[i].Id &= 0xffffff + if err := binary.Read(f.r, binary.BigEndian, &frame.FlagIdValues[i].Value); err != nil { + return err + } + } + return nil +} + +func (frame *PingFrame) read(h ControlFrameHeader, f *Framer) error { + frame.CFHeader = h + if err := binary.Read(f.r, binary.BigEndian, &frame.Id); err != nil { + return err + } + if frame.Id == 0 { + return &Error{ZeroStreamId, 0} + } + if frame.CFHeader.Flags != 0 { + return &Error{InvalidControlFrame, StreamId(frame.Id)} + } + return nil +} + +func (frame *GoAwayFrame) read(h ControlFrameHeader, f *Framer) error { + frame.CFHeader = h + if err := binary.Read(f.r, binary.BigEndian, &frame.LastGoodStreamId); err != nil { + return err + } + if frame.CFHeader.Flags != 0 { + return &Error{InvalidControlFrame, frame.LastGoodStreamId} + } + if frame.CFHeader.length != 8 { + return &Error{InvalidControlFrame, frame.LastGoodStreamId} + } + if err := binary.Read(f.r, binary.BigEndian, &frame.Status); err != nil { + return err + } + return nil +} + +func (frame *HeadersFrame) read(h ControlFrameHeader, f *Framer) error { + return f.readHeadersFrame(h, frame) +} + +func (frame *WindowUpdateFrame) read(h ControlFrameHeader, f *Framer) error { + frame.CFHeader = h + if err := binary.Read(f.r, binary.BigEndian, &frame.StreamId); err != nil { + return err + } + if frame.CFHeader.Flags != 0 { + return &Error{InvalidControlFrame, frame.StreamId} + } + if frame.CFHeader.length != 8 { + return &Error{InvalidControlFrame, frame.StreamId} + } + if err := binary.Read(f.r, binary.BigEndian, &frame.DeltaWindowSize); err != nil { + return err + } + return nil +} + +func newControlFrame(frameType ControlFrameType) (controlFrame, error) { + ctor, ok := cframeCtor[frameType] + if !ok { + return nil, &Error{Err: InvalidControlFrame} + } + return ctor(), nil +} + +var cframeCtor = map[ControlFrameType]func() controlFrame{ + TypeSynStream: func() controlFrame { return new(SynStreamFrame) }, + TypeSynReply: func() controlFrame { return new(SynReplyFrame) }, + TypeRstStream: func() controlFrame { return new(RstStreamFrame) }, + TypeSettings: func() controlFrame { return new(SettingsFrame) }, + TypePing: func() controlFrame { return new(PingFrame) }, + TypeGoAway: func() controlFrame { return new(GoAwayFrame) }, + TypeHeaders: func() controlFrame { return new(HeadersFrame) }, + TypeWindowUpdate: func() controlFrame { return new(WindowUpdateFrame) }, +} + +func (f *Framer) uncorkHeaderDecompressor(payloadSize int64) error { + if f.headerDecompressor != nil { + f.headerReader.N = payloadSize + return nil + } + f.headerReader = io.LimitedReader{R: f.r, N: payloadSize} + decompressor, err := zlib.NewReaderDict(&f.headerReader, []byte(headerDictionary)) + if err != nil { + return err + } + f.headerDecompressor = decompressor + return nil +} + +// ReadFrame reads SPDY encoded data and returns a decompressed Frame. +func (f *Framer) ReadFrame() (Frame, error) { + var firstWord uint32 + if err := binary.Read(f.r, binary.BigEndian, &firstWord); err != nil { + return nil, err + } + if firstWord&0x80000000 != 0 { + frameType := ControlFrameType(firstWord & 0xffff) + version := uint16(firstWord >> 16 & 0x7fff) + return f.parseControlFrame(version, frameType) + } + return f.parseDataFrame(StreamId(firstWord & 0x7fffffff)) +} + +func (f *Framer) parseControlFrame(version uint16, frameType ControlFrameType) (Frame, error) { + var length uint32 + if err := binary.Read(f.r, binary.BigEndian, &length); err != nil { + return nil, err + } + flags := ControlFlags((length & 0xff000000) >> 24) + length &= 0xffffff + header := ControlFrameHeader{version, frameType, flags, length} + cframe, err := newControlFrame(frameType) + if err != nil { + return nil, err + } + if err = cframe.read(header, f); err != nil { + return nil, err + } + return cframe, nil +} + +func parseHeaderValueBlock(r io.Reader, streamId StreamId) (http.Header, error) { + var numHeaders uint32 + if err := binary.Read(r, binary.BigEndian, &numHeaders); err != nil { + return nil, err + } + var e error + h := make(http.Header, int(numHeaders)) + for i := 0; i < int(numHeaders); i++ { + var length uint32 + if err := binary.Read(r, binary.BigEndian, &length); err != nil { + return nil, err + } + nameBytes := make([]byte, length) + if _, err := io.ReadFull(r, nameBytes); err != nil { + return nil, err + } + name := string(nameBytes) + if name != strings.ToLower(name) { + e = &Error{UnlowercasedHeaderName, streamId} + name = strings.ToLower(name) + } + if h[name] != nil { + e = &Error{DuplicateHeaders, streamId} + } + if err := binary.Read(r, binary.BigEndian, &length); err != nil { + return nil, err + } + value := make([]byte, length) + if _, err := io.ReadFull(r, value); err != nil { + return nil, err + } + valueList := strings.Split(string(value), headerValueSeparator) + for _, v := range valueList { + h.Add(name, v) + } + } + if e != nil { + return h, e + } + return h, nil +} + +func (f *Framer) readSynStreamFrame(h ControlFrameHeader, frame *SynStreamFrame) error { + frame.CFHeader = h + var err error + if err = binary.Read(f.r, binary.BigEndian, &frame.StreamId); err != nil { + return err + } + if err = binary.Read(f.r, binary.BigEndian, &frame.AssociatedToStreamId); err != nil { + return err + } + if err = binary.Read(f.r, binary.BigEndian, &frame.Priority); err != nil { + return err + } + frame.Priority >>= 5 + if err = binary.Read(f.r, binary.BigEndian, &frame.Slot); err != nil { + return err + } + reader := f.r + if !f.headerCompressionDisabled { + err := f.uncorkHeaderDecompressor(int64(h.length - 10)) + if err != nil { + return err + } + reader = f.headerDecompressor + } + frame.Headers, err = parseHeaderValueBlock(reader, frame.StreamId) + if !f.headerCompressionDisabled && (err == io.EOF && f.headerReader.N == 0 || f.headerReader.N != 0) { + err = &Error{WrongCompressedPayloadSize, 0} + } + if err != nil { + return err + } + for h := range frame.Headers { + if invalidReqHeaders[h] { + return &Error{InvalidHeaderPresent, frame.StreamId} + } + } + if frame.StreamId == 0 { + return &Error{ZeroStreamId, 0} + } + return nil +} + +func (f *Framer) readSynReplyFrame(h ControlFrameHeader, frame *SynReplyFrame) error { + frame.CFHeader = h + var err error + if err = binary.Read(f.r, binary.BigEndian, &frame.StreamId); err != nil { + return err + } + reader := f.r + if !f.headerCompressionDisabled { + err := f.uncorkHeaderDecompressor(int64(h.length - 4)) + if err != nil { + return err + } + reader = f.headerDecompressor + } + frame.Headers, err = parseHeaderValueBlock(reader, frame.StreamId) + if !f.headerCompressionDisabled && (err == io.EOF && f.headerReader.N == 0 || f.headerReader.N != 0) { + err = &Error{WrongCompressedPayloadSize, 0} + } + if err != nil { + return err + } + for h := range frame.Headers { + if invalidRespHeaders[h] { + return &Error{InvalidHeaderPresent, frame.StreamId} + } + } + if frame.StreamId == 0 { + return &Error{ZeroStreamId, 0} + } + return nil +} + +func (f *Framer) readHeadersFrame(h ControlFrameHeader, frame *HeadersFrame) error { + frame.CFHeader = h + var err error + if err = binary.Read(f.r, binary.BigEndian, &frame.StreamId); err != nil { + return err + } + reader := f.r + if !f.headerCompressionDisabled { + err := f.uncorkHeaderDecompressor(int64(h.length - 4)) + if err != nil { + return err + } + reader = f.headerDecompressor + } + frame.Headers, err = parseHeaderValueBlock(reader, frame.StreamId) + if !f.headerCompressionDisabled && (err == io.EOF && f.headerReader.N == 0 || f.headerReader.N != 0) { + err = &Error{WrongCompressedPayloadSize, 0} + } + if err != nil { + return err + } + var invalidHeaders map[string]bool + if frame.StreamId%2 == 0 { + invalidHeaders = invalidReqHeaders + } else { + invalidHeaders = invalidRespHeaders + } + for h := range frame.Headers { + if invalidHeaders[h] { + return &Error{InvalidHeaderPresent, frame.StreamId} + } + } + if frame.StreamId == 0 { + return &Error{ZeroStreamId, 0} + } + return nil +} + +func (f *Framer) parseDataFrame(streamId StreamId) (*DataFrame, error) { + var length uint32 + if err := binary.Read(f.r, binary.BigEndian, &length); err != nil { + return nil, err + } + var frame DataFrame + frame.StreamId = streamId + frame.Flags = DataFlags(length >> 24) + length &= 0xffffff + frame.Data = make([]byte, length) + if _, err := io.ReadFull(f.r, frame.Data); err != nil { + return nil, err + } + if frame.StreamId == 0 { + return nil, &Error{ZeroStreamId, 0} + } + return &frame, nil +} diff --git a/vendor/github.com/moby/spdystream/spdy/types.go b/vendor/github.com/moby/spdystream/spdy/types.go new file mode 100644 index 0000000000..a254a43ab9 --- /dev/null +++ b/vendor/github.com/moby/spdystream/spdy/types.go @@ -0,0 +1,291 @@ +/* + Copyright 2014-2021 Docker Inc. + + 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. +*/ + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package spdy implements the SPDY protocol (currently SPDY/3), described in +// http://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3. +package spdy + +import ( + "bytes" + "compress/zlib" + "io" + "net/http" +) + +// Version is the protocol version number that this package implements. +const Version = 3 + +// ControlFrameType stores the type field in a control frame header. +type ControlFrameType uint16 + +const ( + TypeSynStream ControlFrameType = 0x0001 + TypeSynReply ControlFrameType = 0x0002 + TypeRstStream ControlFrameType = 0x0003 + TypeSettings ControlFrameType = 0x0004 + TypePing ControlFrameType = 0x0006 + TypeGoAway ControlFrameType = 0x0007 + TypeHeaders ControlFrameType = 0x0008 + TypeWindowUpdate ControlFrameType = 0x0009 +) + +// ControlFlags are the flags that can be set on a control frame. +type ControlFlags uint8 + +const ( + ControlFlagFin ControlFlags = 0x01 + ControlFlagUnidirectional ControlFlags = 0x02 + ControlFlagSettingsClearSettings ControlFlags = 0x01 +) + +// DataFlags are the flags that can be set on a data frame. +type DataFlags uint8 + +const ( + DataFlagFin DataFlags = 0x01 +) + +// MaxDataLength is the maximum number of bytes that can be stored in one frame. +const MaxDataLength = 1<<24 - 1 + +// headerValueSepator separates multiple header values. +const headerValueSeparator = "\x00" + +// Frame is a single SPDY frame in its unpacked in-memory representation. Use +// Framer to read and write it. +type Frame interface { + write(f *Framer) error +} + +// ControlFrameHeader contains all the fields in a control frame header, +// in its unpacked in-memory representation. +type ControlFrameHeader struct { + // Note, high bit is the "Control" bit. + version uint16 // spdy version number + frameType ControlFrameType + Flags ControlFlags + length uint32 // length of data field +} + +type controlFrame interface { + Frame + read(h ControlFrameHeader, f *Framer) error +} + +// StreamId represents a 31-bit value identifying the stream. +type StreamId uint32 + +// SynStreamFrame is the unpacked, in-memory representation of a SYN_STREAM +// frame. +type SynStreamFrame struct { + CFHeader ControlFrameHeader + StreamId StreamId + AssociatedToStreamId StreamId // stream id for a stream which this stream is associated to + Priority uint8 // priority of this frame (3-bit) + Slot uint8 // index in the server's credential vector of the client certificate + Headers http.Header +} + +// SynReplyFrame is the unpacked, in-memory representation of a SYN_REPLY frame. +type SynReplyFrame struct { + CFHeader ControlFrameHeader + StreamId StreamId + Headers http.Header +} + +// RstStreamStatus represents the status that led to a RST_STREAM. +type RstStreamStatus uint32 + +const ( + ProtocolError RstStreamStatus = iota + 1 + InvalidStream + RefusedStream + UnsupportedVersion + Cancel + InternalError + FlowControlError + StreamInUse + StreamAlreadyClosed + InvalidCredentials + FrameTooLarge +) + +// RstStreamFrame is the unpacked, in-memory representation of a RST_STREAM +// frame. +type RstStreamFrame struct { + CFHeader ControlFrameHeader + StreamId StreamId + Status RstStreamStatus +} + +// SettingsFlag represents a flag in a SETTINGS frame. +type SettingsFlag uint8 + +const ( + FlagSettingsPersistValue SettingsFlag = 0x1 + FlagSettingsPersisted SettingsFlag = 0x2 +) + +// SettingsFlag represents the id of an id/value pair in a SETTINGS frame. +type SettingsId uint32 + +const ( + SettingsUploadBandwidth SettingsId = iota + 1 + SettingsDownloadBandwidth + SettingsRoundTripTime + SettingsMaxConcurrentStreams + SettingsCurrentCwnd + SettingsDownloadRetransRate + SettingsInitialWindowSize + SettingsClientCretificateVectorSize +) + +// SettingsFlagIdValue is the unpacked, in-memory representation of the +// combined flag/id/value for a setting in a SETTINGS frame. +type SettingsFlagIdValue struct { + Flag SettingsFlag + Id SettingsId + Value uint32 +} + +// SettingsFrame is the unpacked, in-memory representation of a SPDY +// SETTINGS frame. +type SettingsFrame struct { + CFHeader ControlFrameHeader + FlagIdValues []SettingsFlagIdValue +} + +// PingFrame is the unpacked, in-memory representation of a PING frame. +type PingFrame struct { + CFHeader ControlFrameHeader + Id uint32 // unique id for this ping, from server is even, from client is odd. +} + +// GoAwayStatus represents the status in a GoAwayFrame. +type GoAwayStatus uint32 + +const ( + GoAwayOK GoAwayStatus = iota + GoAwayProtocolError + GoAwayInternalError +) + +// GoAwayFrame is the unpacked, in-memory representation of a GOAWAY frame. +type GoAwayFrame struct { + CFHeader ControlFrameHeader + LastGoodStreamId StreamId // last stream id which was accepted by sender + Status GoAwayStatus +} + +// HeadersFrame is the unpacked, in-memory representation of a HEADERS frame. +type HeadersFrame struct { + CFHeader ControlFrameHeader + StreamId StreamId + Headers http.Header +} + +// WindowUpdateFrame is the unpacked, in-memory representation of a +// WINDOW_UPDATE frame. +type WindowUpdateFrame struct { + CFHeader ControlFrameHeader + StreamId StreamId + DeltaWindowSize uint32 // additional number of bytes to existing window size +} + +// TODO: Implement credential frame and related methods. + +// DataFrame is the unpacked, in-memory representation of a DATA frame. +type DataFrame struct { + // Note, high bit is the "Control" bit. Should be 0 for data frames. + StreamId StreamId + Flags DataFlags + Data []byte // payload data of this frame +} + +// A SPDY specific error. +type ErrorCode string + +const ( + UnlowercasedHeaderName ErrorCode = "header was not lowercased" + DuplicateHeaders ErrorCode = "multiple headers with same name" + WrongCompressedPayloadSize ErrorCode = "compressed payload size was incorrect" + UnknownFrameType ErrorCode = "unknown frame type" + InvalidControlFrame ErrorCode = "invalid control frame" + InvalidDataFrame ErrorCode = "invalid data frame" + InvalidHeaderPresent ErrorCode = "frame contained invalid header" + ZeroStreamId ErrorCode = "stream id zero is disallowed" +) + +// Error contains both the type of error and additional values. StreamId is 0 +// if Error is not associated with a stream. +type Error struct { + Err ErrorCode + StreamId StreamId +} + +func (e *Error) Error() string { + return string(e.Err) +} + +var invalidReqHeaders = map[string]bool{ + "Connection": true, + "Host": true, + "Keep-Alive": true, + "Proxy-Connection": true, + "Transfer-Encoding": true, +} + +var invalidRespHeaders = map[string]bool{ + "Connection": true, + "Keep-Alive": true, + "Proxy-Connection": true, + "Transfer-Encoding": true, +} + +// Framer handles serializing/deserializing SPDY frames, including compressing/ +// decompressing payloads. +type Framer struct { + headerCompressionDisabled bool + w io.Writer + headerBuf *bytes.Buffer + headerCompressor *zlib.Writer + r io.Reader + headerReader io.LimitedReader + headerDecompressor io.ReadCloser +} + +// NewFramer allocates a new Framer for a given SPDY connection, represented by +// a io.Writer and io.Reader. Note that Framer will read and write individual fields +// from/to the Reader and Writer, so the caller should pass in an appropriately +// buffered implementation to optimize performance. +func NewFramer(w io.Writer, r io.Reader) (*Framer, error) { + compressBuf := new(bytes.Buffer) + compressor, err := zlib.NewWriterLevelDict(compressBuf, zlib.BestCompression, []byte(headerDictionary)) + if err != nil { + return nil, err + } + framer := &Framer{ + w: w, + headerBuf: compressBuf, + headerCompressor: compressor, + r: r, + } + return framer, nil +} diff --git a/vendor/github.com/moby/spdystream/spdy/write.go b/vendor/github.com/moby/spdystream/spdy/write.go new file mode 100644 index 0000000000..ab6d91f3b8 --- /dev/null +++ b/vendor/github.com/moby/spdystream/spdy/write.go @@ -0,0 +1,334 @@ +/* + Copyright 2014-2021 Docker Inc. + + 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. +*/ + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package spdy + +import ( + "encoding/binary" + "io" + "net/http" + "strings" +) + +func (frame *SynStreamFrame) write(f *Framer) error { + return f.writeSynStreamFrame(frame) +} + +func (frame *SynReplyFrame) write(f *Framer) error { + return f.writeSynReplyFrame(frame) +} + +func (frame *RstStreamFrame) write(f *Framer) (err error) { + if frame.StreamId == 0 { + return &Error{ZeroStreamId, 0} + } + frame.CFHeader.version = Version + frame.CFHeader.frameType = TypeRstStream + frame.CFHeader.Flags = 0 + frame.CFHeader.length = 8 + + // Serialize frame to Writer. + if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil { + return + } + if err = binary.Write(f.w, binary.BigEndian, frame.StreamId); err != nil { + return + } + if frame.Status == 0 { + return &Error{InvalidControlFrame, frame.StreamId} + } + if err = binary.Write(f.w, binary.BigEndian, frame.Status); err != nil { + return + } + return +} + +func (frame *SettingsFrame) write(f *Framer) (err error) { + frame.CFHeader.version = Version + frame.CFHeader.frameType = TypeSettings + frame.CFHeader.length = uint32(len(frame.FlagIdValues)*8 + 4) + + // Serialize frame to Writer. + if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil { + return + } + if err = binary.Write(f.w, binary.BigEndian, uint32(len(frame.FlagIdValues))); err != nil { + return + } + for _, flagIdValue := range frame.FlagIdValues { + flagId := uint32(flagIdValue.Flag)<<24 | uint32(flagIdValue.Id) + if err = binary.Write(f.w, binary.BigEndian, flagId); err != nil { + return + } + if err = binary.Write(f.w, binary.BigEndian, flagIdValue.Value); err != nil { + return + } + } + return +} + +func (frame *PingFrame) write(f *Framer) (err error) { + if frame.Id == 0 { + return &Error{ZeroStreamId, 0} + } + frame.CFHeader.version = Version + frame.CFHeader.frameType = TypePing + frame.CFHeader.Flags = 0 + frame.CFHeader.length = 4 + + // Serialize frame to Writer. + if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil { + return + } + if err = binary.Write(f.w, binary.BigEndian, frame.Id); err != nil { + return + } + return +} + +func (frame *GoAwayFrame) write(f *Framer) (err error) { + frame.CFHeader.version = Version + frame.CFHeader.frameType = TypeGoAway + frame.CFHeader.Flags = 0 + frame.CFHeader.length = 8 + + // Serialize frame to Writer. + if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil { + return + } + if err = binary.Write(f.w, binary.BigEndian, frame.LastGoodStreamId); err != nil { + return + } + if err = binary.Write(f.w, binary.BigEndian, frame.Status); err != nil { + return + } + return nil +} + +func (frame *HeadersFrame) write(f *Framer) error { + return f.writeHeadersFrame(frame) +} + +func (frame *WindowUpdateFrame) write(f *Framer) (err error) { + frame.CFHeader.version = Version + frame.CFHeader.frameType = TypeWindowUpdate + frame.CFHeader.Flags = 0 + frame.CFHeader.length = 8 + + // Serialize frame to Writer. + if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil { + return + } + if err = binary.Write(f.w, binary.BigEndian, frame.StreamId); err != nil { + return + } + if err = binary.Write(f.w, binary.BigEndian, frame.DeltaWindowSize); err != nil { + return + } + return nil +} + +func (frame *DataFrame) write(f *Framer) error { + return f.writeDataFrame(frame) +} + +// WriteFrame writes a frame. +func (f *Framer) WriteFrame(frame Frame) error { + return frame.write(f) +} + +func writeControlFrameHeader(w io.Writer, h ControlFrameHeader) error { + if err := binary.Write(w, binary.BigEndian, 0x8000|h.version); err != nil { + return err + } + if err := binary.Write(w, binary.BigEndian, h.frameType); err != nil { + return err + } + flagsAndLength := uint32(h.Flags)<<24 | h.length + if err := binary.Write(w, binary.BigEndian, flagsAndLength); err != nil { + return err + } + return nil +} + +func writeHeaderValueBlock(w io.Writer, h http.Header) (n int, err error) { + n = 0 + if err = binary.Write(w, binary.BigEndian, uint32(len(h))); err != nil { + return + } + n += 2 + for name, values := range h { + if err = binary.Write(w, binary.BigEndian, uint32(len(name))); err != nil { + return + } + n += 2 + name = strings.ToLower(name) + if _, err = io.WriteString(w, name); err != nil { + return + } + n += len(name) + v := strings.Join(values, headerValueSeparator) + if err = binary.Write(w, binary.BigEndian, uint32(len(v))); err != nil { + return + } + n += 2 + if _, err = io.WriteString(w, v); err != nil { + return + } + n += len(v) + } + return +} + +func (f *Framer) writeSynStreamFrame(frame *SynStreamFrame) (err error) { + if frame.StreamId == 0 { + return &Error{ZeroStreamId, 0} + } + // Marshal the headers. + var writer io.Writer = f.headerBuf + if !f.headerCompressionDisabled { + writer = f.headerCompressor + } + if _, err = writeHeaderValueBlock(writer, frame.Headers); err != nil { + return + } + if !f.headerCompressionDisabled { + f.headerCompressor.Flush() + } + + // Set ControlFrameHeader. + frame.CFHeader.version = Version + frame.CFHeader.frameType = TypeSynStream + frame.CFHeader.length = uint32(len(f.headerBuf.Bytes()) + 10) + + // Serialize frame to Writer. + if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil { + return err + } + if err = binary.Write(f.w, binary.BigEndian, frame.StreamId); err != nil { + return err + } + if err = binary.Write(f.w, binary.BigEndian, frame.AssociatedToStreamId); err != nil { + return err + } + if err = binary.Write(f.w, binary.BigEndian, frame.Priority<<5); err != nil { + return err + } + if err = binary.Write(f.w, binary.BigEndian, frame.Slot); err != nil { + return err + } + if _, err = f.w.Write(f.headerBuf.Bytes()); err != nil { + return err + } + f.headerBuf.Reset() + return nil +} + +func (f *Framer) writeSynReplyFrame(frame *SynReplyFrame) (err error) { + if frame.StreamId == 0 { + return &Error{ZeroStreamId, 0} + } + // Marshal the headers. + var writer io.Writer = f.headerBuf + if !f.headerCompressionDisabled { + writer = f.headerCompressor + } + if _, err = writeHeaderValueBlock(writer, frame.Headers); err != nil { + return + } + if !f.headerCompressionDisabled { + f.headerCompressor.Flush() + } + + // Set ControlFrameHeader. + frame.CFHeader.version = Version + frame.CFHeader.frameType = TypeSynReply + frame.CFHeader.length = uint32(len(f.headerBuf.Bytes()) + 4) + + // Serialize frame to Writer. + if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil { + return + } + if err = binary.Write(f.w, binary.BigEndian, frame.StreamId); err != nil { + return + } + if _, err = f.w.Write(f.headerBuf.Bytes()); err != nil { + return + } + f.headerBuf.Reset() + return +} + +func (f *Framer) writeHeadersFrame(frame *HeadersFrame) (err error) { + if frame.StreamId == 0 { + return &Error{ZeroStreamId, 0} + } + // Marshal the headers. + var writer io.Writer = f.headerBuf + if !f.headerCompressionDisabled { + writer = f.headerCompressor + } + if _, err = writeHeaderValueBlock(writer, frame.Headers); err != nil { + return + } + if !f.headerCompressionDisabled { + f.headerCompressor.Flush() + } + + // Set ControlFrameHeader. + frame.CFHeader.version = Version + frame.CFHeader.frameType = TypeHeaders + frame.CFHeader.length = uint32(len(f.headerBuf.Bytes()) + 4) + + // Serialize frame to Writer. + if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil { + return + } + if err = binary.Write(f.w, binary.BigEndian, frame.StreamId); err != nil { + return + } + if _, err = f.w.Write(f.headerBuf.Bytes()); err != nil { + return + } + f.headerBuf.Reset() + return +} + +func (f *Framer) writeDataFrame(frame *DataFrame) (err error) { + if frame.StreamId == 0 { + return &Error{ZeroStreamId, 0} + } + if frame.StreamId&0x80000000 != 0 || len(frame.Data) > MaxDataLength { + return &Error{InvalidDataFrame, frame.StreamId} + } + + // Serialize frame to Writer. + if err = binary.Write(f.w, binary.BigEndian, frame.StreamId); err != nil { + return + } + flagsAndLength := uint32(frame.Flags)<<24 | uint32(len(frame.Data)) + if err = binary.Write(f.w, binary.BigEndian, flagsAndLength); err != nil { + return + } + if _, err = f.w.Write(frame.Data); err != nil { + return + } + return nil +} diff --git a/vendor/github.com/moby/spdystream/stream.go b/vendor/github.com/moby/spdystream/stream.go new file mode 100644 index 0000000000..171c1e9e33 --- /dev/null +++ b/vendor/github.com/moby/spdystream/stream.go @@ -0,0 +1,345 @@ +/* + Copyright 2014-2021 Docker Inc. + + 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 spdystream + +import ( + "errors" + "fmt" + "io" + "net" + "net/http" + "sync" + "time" + + "github.com/moby/spdystream/spdy" +) + +var ( + ErrUnreadPartialData = errors.New("unread partial data") +) + +type Stream struct { + streamId spdy.StreamId + parent *Stream + conn *Connection + startChan chan error + + dataLock sync.RWMutex + dataChan chan []byte + unread []byte + + priority uint8 + headers http.Header + headerChan chan http.Header + finishLock sync.Mutex + finished bool + replyCond *sync.Cond + replied bool + closeLock sync.Mutex + closeChan chan bool +} + +// WriteData writes data to stream, sending a dataframe per call +func (s *Stream) WriteData(data []byte, fin bool) error { + s.waitWriteReply() + var flags spdy.DataFlags + + if fin { + flags = spdy.DataFlagFin + s.finishLock.Lock() + if s.finished { + s.finishLock.Unlock() + return ErrWriteClosedStream + } + s.finished = true + s.finishLock.Unlock() + } + + dataFrame := &spdy.DataFrame{ + StreamId: s.streamId, + Flags: flags, + Data: data, + } + + debugMessage("(%p) (%d) Writing data frame", s, s.streamId) + return s.conn.framer.WriteFrame(dataFrame) +} + +// Write writes bytes to a stream, calling write data for each call. +func (s *Stream) Write(data []byte) (n int, err error) { + err = s.WriteData(data, false) + if err == nil { + n = len(data) + } + return +} + +// Read reads bytes from a stream, a single read will never get more +// than what is sent on a single data frame, but a multiple calls to +// read may get data from the same data frame. +func (s *Stream) Read(p []byte) (n int, err error) { + if s.unread == nil { + select { + case <-s.closeChan: + return 0, io.EOF + case read, ok := <-s.dataChan: + if !ok { + return 0, io.EOF + } + s.unread = read + } + } + n = copy(p, s.unread) + if n < len(s.unread) { + s.unread = s.unread[n:] + } else { + s.unread = nil + } + return +} + +// ReadData reads an entire data frame and returns the byte array +// from the data frame. If there is unread data from the result +// of a Read call, this function will return an ErrUnreadPartialData. +func (s *Stream) ReadData() ([]byte, error) { + debugMessage("(%p) Reading data from %d", s, s.streamId) + if s.unread != nil { + return nil, ErrUnreadPartialData + } + select { + case <-s.closeChan: + return nil, io.EOF + case read, ok := <-s.dataChan: + if !ok { + return nil, io.EOF + } + return read, nil + } +} + +func (s *Stream) waitWriteReply() { + if s.replyCond != nil { + s.replyCond.L.Lock() + for !s.replied { + s.replyCond.Wait() + } + s.replyCond.L.Unlock() + } +} + +// Wait waits for the stream to receive a reply. +func (s *Stream) Wait() error { + return s.WaitTimeout(time.Duration(0)) +} + +// WaitTimeout waits for the stream to receive a reply or for timeout. +// When the timeout is reached, ErrTimeout will be returned. +func (s *Stream) WaitTimeout(timeout time.Duration) error { + var timeoutChan <-chan time.Time + if timeout > time.Duration(0) { + timeoutChan = time.After(timeout) + } + + select { + case err := <-s.startChan: + if err != nil { + return err + } + break + case <-timeoutChan: + return ErrTimeout + } + return nil +} + +// Close closes the stream by sending an empty data frame with the +// finish flag set, indicating this side is finished with the stream. +func (s *Stream) Close() error { + select { + case <-s.closeChan: + // Stream is now fully closed + s.conn.removeStream(s) + default: + break + } + return s.WriteData([]byte{}, true) +} + +// Reset sends a reset frame, putting the stream into the fully closed state. +func (s *Stream) Reset() error { + s.conn.removeStream(s) + return s.resetStream() +} + +func (s *Stream) resetStream() error { + // Always call closeRemoteChannels, even if s.finished is already true. + // This makes it so that stream.Close() followed by stream.Reset() allows + // stream.Read() to unblock. + s.closeRemoteChannels() + + s.finishLock.Lock() + if s.finished { + s.finishLock.Unlock() + return nil + } + s.finished = true + s.finishLock.Unlock() + + resetFrame := &spdy.RstStreamFrame{ + StreamId: s.streamId, + Status: spdy.Cancel, + } + return s.conn.framer.WriteFrame(resetFrame) +} + +// CreateSubStream creates a stream using the current as the parent +func (s *Stream) CreateSubStream(headers http.Header, fin bool) (*Stream, error) { + return s.conn.CreateStream(headers, s, fin) +} + +// SetPriority sets the stream priority, does not affect the +// remote priority of this stream after Open has been called. +// Valid values are 0 through 7, 0 being the highest priority +// and 7 the lowest. +func (s *Stream) SetPriority(priority uint8) { + s.priority = priority +} + +// SendHeader sends a header frame across the stream +func (s *Stream) SendHeader(headers http.Header, fin bool) error { + return s.conn.sendHeaders(headers, s, fin) +} + +// SendReply sends a reply on a stream, only valid to be called once +// when handling a new stream +func (s *Stream) SendReply(headers http.Header, fin bool) error { + if s.replyCond == nil { + return errors.New("cannot reply on initiated stream") + } + s.replyCond.L.Lock() + defer s.replyCond.L.Unlock() + if s.replied { + return nil + } + + err := s.conn.sendReply(headers, s, fin) + if err != nil { + return err + } + + s.replied = true + s.replyCond.Broadcast() + return nil +} + +// Refuse sends a reset frame with the status refuse, only +// valid to be called once when handling a new stream. This +// may be used to indicate that a stream is not allowed +// when http status codes are not being used. +func (s *Stream) Refuse() error { + if s.replied { + return nil + } + s.replied = true + return s.conn.sendReset(spdy.RefusedStream, s) +} + +// Cancel sends a reset frame with the status canceled. This +// can be used at any time by the creator of the Stream to +// indicate the stream is no longer needed. +func (s *Stream) Cancel() error { + return s.conn.sendReset(spdy.Cancel, s) +} + +// ReceiveHeader receives a header sent on the other side +// of the stream. This function will block until a header +// is received or stream is closed. +func (s *Stream) ReceiveHeader() (http.Header, error) { + select { + case <-s.closeChan: + break + case header, ok := <-s.headerChan: + if !ok { + return nil, fmt.Errorf("header chan closed") + } + return header, nil + } + return nil, fmt.Errorf("stream closed") +} + +// Parent returns the parent stream +func (s *Stream) Parent() *Stream { + return s.parent +} + +// Headers returns the headers used to create the stream +func (s *Stream) Headers() http.Header { + return s.headers +} + +// String returns the string version of stream using the +// streamId to uniquely identify the stream +func (s *Stream) String() string { + return fmt.Sprintf("stream:%d", s.streamId) +} + +// Identifier returns a 32 bit identifier for the stream +func (s *Stream) Identifier() uint32 { + return uint32(s.streamId) +} + +// IsFinished returns whether the stream has finished +// sending data +func (s *Stream) IsFinished() bool { + s.finishLock.Lock() + defer s.finishLock.Unlock() + return s.finished +} + +// Implement net.Conn interface + +func (s *Stream) LocalAddr() net.Addr { + return s.conn.conn.LocalAddr() +} + +func (s *Stream) RemoteAddr() net.Addr { + return s.conn.conn.RemoteAddr() +} + +// TODO set per stream values instead of connection-wide + +func (s *Stream) SetDeadline(t time.Time) error { + return s.conn.conn.SetDeadline(t) +} + +func (s *Stream) SetReadDeadline(t time.Time) error { + return s.conn.conn.SetReadDeadline(t) +} + +func (s *Stream) SetWriteDeadline(t time.Time) error { + return s.conn.conn.SetWriteDeadline(t) +} + +func (s *Stream) closeRemoteChannels() { + s.closeLock.Lock() + defer s.closeLock.Unlock() + select { + case <-s.closeChan: + default: + close(s.closeChan) + } +} diff --git a/vendor/github.com/moby/spdystream/utils.go b/vendor/github.com/moby/spdystream/utils.go new file mode 100644 index 0000000000..e9f7fffd60 --- /dev/null +++ b/vendor/github.com/moby/spdystream/utils.go @@ -0,0 +1,32 @@ +/* + Copyright 2014-2021 Docker Inc. + + 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 spdystream + +import ( + "log" + "os" +) + +var ( + DEBUG = os.Getenv("DEBUG") +) + +func debugMessage(fmt string, args ...interface{}) { + if DEBUG != "" { + log.Printf(fmt, args...) + } +} diff --git a/vendor/github.com/mxk/go-flowrate/LICENSE b/vendor/github.com/mxk/go-flowrate/LICENSE new file mode 100644 index 0000000000..e9f9f628ba --- /dev/null +++ b/vendor/github.com/mxk/go-flowrate/LICENSE @@ -0,0 +1,29 @@ +Copyright (c) 2014 The Go-FlowRate Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the + distribution. + + * Neither the name of the go-flowrate project nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/mxk/go-flowrate/flowrate/flowrate.go b/vendor/github.com/mxk/go-flowrate/flowrate/flowrate.go new file mode 100644 index 0000000000..1b727721e1 --- /dev/null +++ b/vendor/github.com/mxk/go-flowrate/flowrate/flowrate.go @@ -0,0 +1,267 @@ +// +// Written by Maxim Khitrov (November 2012) +// + +// Package flowrate provides the tools for monitoring and limiting the flow rate +// of an arbitrary data stream. +package flowrate + +import ( + "math" + "sync" + "time" +) + +// Monitor monitors and limits the transfer rate of a data stream. +type Monitor struct { + mu sync.Mutex // Mutex guarding access to all internal fields + active bool // Flag indicating an active transfer + start time.Duration // Transfer start time (clock() value) + bytes int64 // Total number of bytes transferred + samples int64 // Total number of samples taken + + rSample float64 // Most recent transfer rate sample (bytes per second) + rEMA float64 // Exponential moving average of rSample + rPeak float64 // Peak transfer rate (max of all rSamples) + rWindow float64 // rEMA window (seconds) + + sBytes int64 // Number of bytes transferred since sLast + sLast time.Duration // Most recent sample time (stop time when inactive) + sRate time.Duration // Sampling rate + + tBytes int64 // Number of bytes expected in the current transfer + tLast time.Duration // Time of the most recent transfer of at least 1 byte +} + +// New creates a new flow control monitor. Instantaneous transfer rate is +// measured and updated for each sampleRate interval. windowSize determines the +// weight of each sample in the exponential moving average (EMA) calculation. +// The exact formulas are: +// +// sampleTime = currentTime - prevSampleTime +// sampleRate = byteCount / sampleTime +// weight = 1 - exp(-sampleTime/windowSize) +// newRate = weight*sampleRate + (1-weight)*oldRate +// +// The default values for sampleRate and windowSize (if <= 0) are 100ms and 1s, +// respectively. +func New(sampleRate, windowSize time.Duration) *Monitor { + if sampleRate = clockRound(sampleRate); sampleRate <= 0 { + sampleRate = 5 * clockRate + } + if windowSize <= 0 { + windowSize = 1 * time.Second + } + now := clock() + return &Monitor{ + active: true, + start: now, + rWindow: windowSize.Seconds(), + sLast: now, + sRate: sampleRate, + tLast: now, + } +} + +// Update records the transfer of n bytes and returns n. It should be called +// after each Read/Write operation, even if n is 0. +func (m *Monitor) Update(n int) int { + m.mu.Lock() + m.update(n) + m.mu.Unlock() + return n +} + +// IO is a convenience method intended to wrap io.Reader and io.Writer method +// execution. It calls m.Update(n) and then returns (n, err) unmodified. +func (m *Monitor) IO(n int, err error) (int, error) { + return m.Update(n), err +} + +// Done marks the transfer as finished and prevents any further updates or +// limiting. Instantaneous and current transfer rates drop to 0. Update, IO, and +// Limit methods become NOOPs. It returns the total number of bytes transferred. +func (m *Monitor) Done() int64 { + m.mu.Lock() + if now := m.update(0); m.sBytes > 0 { + m.reset(now) + } + m.active = false + m.tLast = 0 + n := m.bytes + m.mu.Unlock() + return n +} + +// timeRemLimit is the maximum Status.TimeRem value. +const timeRemLimit = 999*time.Hour + 59*time.Minute + 59*time.Second + +// Status represents the current Monitor status. All transfer rates are in bytes +// per second rounded to the nearest byte. +type Status struct { + Active bool // Flag indicating an active transfer + Start time.Time // Transfer start time + Duration time.Duration // Time period covered by the statistics + Idle time.Duration // Time since the last transfer of at least 1 byte + Bytes int64 // Total number of bytes transferred + Samples int64 // Total number of samples taken + InstRate int64 // Instantaneous transfer rate + CurRate int64 // Current transfer rate (EMA of InstRate) + AvgRate int64 // Average transfer rate (Bytes / Duration) + PeakRate int64 // Maximum instantaneous transfer rate + BytesRem int64 // Number of bytes remaining in the transfer + TimeRem time.Duration // Estimated time to completion + Progress Percent // Overall transfer progress +} + +// Status returns current transfer status information. The returned value +// becomes static after a call to Done. +func (m *Monitor) Status() Status { + m.mu.Lock() + now := m.update(0) + s := Status{ + Active: m.active, + Start: clockToTime(m.start), + Duration: m.sLast - m.start, + Idle: now - m.tLast, + Bytes: m.bytes, + Samples: m.samples, + PeakRate: round(m.rPeak), + BytesRem: m.tBytes - m.bytes, + Progress: percentOf(float64(m.bytes), float64(m.tBytes)), + } + if s.BytesRem < 0 { + s.BytesRem = 0 + } + if s.Duration > 0 { + rAvg := float64(s.Bytes) / s.Duration.Seconds() + s.AvgRate = round(rAvg) + if s.Active { + s.InstRate = round(m.rSample) + s.CurRate = round(m.rEMA) + if s.BytesRem > 0 { + if tRate := 0.8*m.rEMA + 0.2*rAvg; tRate > 0 { + ns := float64(s.BytesRem) / tRate * 1e9 + if ns > float64(timeRemLimit) { + ns = float64(timeRemLimit) + } + s.TimeRem = clockRound(time.Duration(ns)) + } + } + } + } + m.mu.Unlock() + return s +} + +// Limit restricts the instantaneous (per-sample) data flow to rate bytes per +// second. It returns the maximum number of bytes (0 <= n <= want) that may be +// transferred immediately without exceeding the limit. If block == true, the +// call blocks until n > 0. want is returned unmodified if want < 1, rate < 1, +// or the transfer is inactive (after a call to Done). +// +// At least one byte is always allowed to be transferred in any given sampling +// period. Thus, if the sampling rate is 100ms, the lowest achievable flow rate +// is 10 bytes per second. +// +// For usage examples, see the implementation of Reader and Writer in io.go. +func (m *Monitor) Limit(want int, rate int64, block bool) (n int) { + if want < 1 || rate < 1 { + return want + } + m.mu.Lock() + + // Determine the maximum number of bytes that can be sent in one sample + limit := round(float64(rate) * m.sRate.Seconds()) + if limit <= 0 { + limit = 1 + } + + // If block == true, wait until m.sBytes < limit + if now := m.update(0); block { + for m.sBytes >= limit && m.active { + now = m.waitNextSample(now) + } + } + + // Make limit <= want (unlimited if the transfer is no longer active) + if limit -= m.sBytes; limit > int64(want) || !m.active { + limit = int64(want) + } + m.mu.Unlock() + + if limit < 0 { + limit = 0 + } + return int(limit) +} + +// SetTransferSize specifies the total size of the data transfer, which allows +// the Monitor to calculate the overall progress and time to completion. +func (m *Monitor) SetTransferSize(bytes int64) { + if bytes < 0 { + bytes = 0 + } + m.mu.Lock() + m.tBytes = bytes + m.mu.Unlock() +} + +// update accumulates the transferred byte count for the current sample until +// clock() - m.sLast >= m.sRate. The monitor status is updated once the current +// sample is done. +func (m *Monitor) update(n int) (now time.Duration) { + if !m.active { + return + } + if now = clock(); n > 0 { + m.tLast = now + } + m.sBytes += int64(n) + if sTime := now - m.sLast; sTime >= m.sRate { + t := sTime.Seconds() + if m.rSample = float64(m.sBytes) / t; m.rSample > m.rPeak { + m.rPeak = m.rSample + } + + // Exponential moving average using a method similar to *nix load + // average calculation. Longer sampling periods carry greater weight. + if m.samples > 0 { + w := math.Exp(-t / m.rWindow) + m.rEMA = m.rSample + w*(m.rEMA-m.rSample) + } else { + m.rEMA = m.rSample + } + m.reset(now) + } + return +} + +// reset clears the current sample state in preparation for the next sample. +func (m *Monitor) reset(sampleTime time.Duration) { + m.bytes += m.sBytes + m.samples++ + m.sBytes = 0 + m.sLast = sampleTime +} + +// waitNextSample sleeps for the remainder of the current sample. The lock is +// released and reacquired during the actual sleep period, so it's possible for +// the transfer to be inactive when this method returns. +func (m *Monitor) waitNextSample(now time.Duration) time.Duration { + const minWait = 5 * time.Millisecond + current := m.sLast + + // sleep until the last sample time changes (ideally, just one iteration) + for m.sLast == current && m.active { + d := current + m.sRate - now + m.mu.Unlock() + if d < minWait { + d = minWait + } + time.Sleep(d) + m.mu.Lock() + now = m.update(0) + } + return now +} diff --git a/vendor/github.com/mxk/go-flowrate/flowrate/io.go b/vendor/github.com/mxk/go-flowrate/flowrate/io.go new file mode 100644 index 0000000000..fbe0909725 --- /dev/null +++ b/vendor/github.com/mxk/go-flowrate/flowrate/io.go @@ -0,0 +1,133 @@ +// +// Written by Maxim Khitrov (November 2012) +// + +package flowrate + +import ( + "errors" + "io" +) + +// ErrLimit is returned by the Writer when a non-blocking write is short due to +// the transfer rate limit. +var ErrLimit = errors.New("flowrate: flow rate limit exceeded") + +// Limiter is implemented by the Reader and Writer to provide a consistent +// interface for monitoring and controlling data transfer. +type Limiter interface { + Done() int64 + Status() Status + SetTransferSize(bytes int64) + SetLimit(new int64) (old int64) + SetBlocking(new bool) (old bool) +} + +// Reader implements io.ReadCloser with a restriction on the rate of data +// transfer. +type Reader struct { + io.Reader // Data source + *Monitor // Flow control monitor + + limit int64 // Rate limit in bytes per second (unlimited when <= 0) + block bool // What to do when no new bytes can be read due to the limit +} + +// NewReader restricts all Read operations on r to limit bytes per second. +func NewReader(r io.Reader, limit int64) *Reader { + return &Reader{r, New(0, 0), limit, true} +} + +// Read reads up to len(p) bytes into p without exceeding the current transfer +// rate limit. It returns (0, nil) immediately if r is non-blocking and no new +// bytes can be read at this time. +func (r *Reader) Read(p []byte) (n int, err error) { + p = p[:r.Limit(len(p), r.limit, r.block)] + if len(p) > 0 { + n, err = r.IO(r.Reader.Read(p)) + } + return +} + +// SetLimit changes the transfer rate limit to new bytes per second and returns +// the previous setting. +func (r *Reader) SetLimit(new int64) (old int64) { + old, r.limit = r.limit, new + return +} + +// SetBlocking changes the blocking behavior and returns the previous setting. A +// Read call on a non-blocking reader returns immediately if no additional bytes +// may be read at this time due to the rate limit. +func (r *Reader) SetBlocking(new bool) (old bool) { + old, r.block = r.block, new + return +} + +// Close closes the underlying reader if it implements the io.Closer interface. +func (r *Reader) Close() error { + defer r.Done() + if c, ok := r.Reader.(io.Closer); ok { + return c.Close() + } + return nil +} + +// Writer implements io.WriteCloser with a restriction on the rate of data +// transfer. +type Writer struct { + io.Writer // Data destination + *Monitor // Flow control monitor + + limit int64 // Rate limit in bytes per second (unlimited when <= 0) + block bool // What to do when no new bytes can be written due to the limit +} + +// NewWriter restricts all Write operations on w to limit bytes per second. The +// transfer rate and the default blocking behavior (true) can be changed +// directly on the returned *Writer. +func NewWriter(w io.Writer, limit int64) *Writer { + return &Writer{w, New(0, 0), limit, true} +} + +// Write writes len(p) bytes from p to the underlying data stream without +// exceeding the current transfer rate limit. It returns (n, ErrLimit) if w is +// non-blocking and no additional bytes can be written at this time. +func (w *Writer) Write(p []byte) (n int, err error) { + var c int + for len(p) > 0 && err == nil { + s := p[:w.Limit(len(p), w.limit, w.block)] + if len(s) > 0 { + c, err = w.IO(w.Writer.Write(s)) + } else { + return n, ErrLimit + } + p = p[c:] + n += c + } + return +} + +// SetLimit changes the transfer rate limit to new bytes per second and returns +// the previous setting. +func (w *Writer) SetLimit(new int64) (old int64) { + old, w.limit = w.limit, new + return +} + +// SetBlocking changes the blocking behavior and returns the previous setting. A +// Write call on a non-blocking writer returns as soon as no additional bytes +// may be written at this time due to the rate limit. +func (w *Writer) SetBlocking(new bool) (old bool) { + old, w.block = w.block, new + return +} + +// Close closes the underlying writer if it implements the io.Closer interface. +func (w *Writer) Close() error { + defer w.Done() + if c, ok := w.Writer.(io.Closer); ok { + return c.Close() + } + return nil +} diff --git a/vendor/github.com/mxk/go-flowrate/flowrate/util.go b/vendor/github.com/mxk/go-flowrate/flowrate/util.go new file mode 100644 index 0000000000..4caac583fc --- /dev/null +++ b/vendor/github.com/mxk/go-flowrate/flowrate/util.go @@ -0,0 +1,67 @@ +// +// Written by Maxim Khitrov (November 2012) +// + +package flowrate + +import ( + "math" + "strconv" + "time" +) + +// clockRate is the resolution and precision of clock(). +const clockRate = 20 * time.Millisecond + +// czero is the process start time rounded down to the nearest clockRate +// increment. +var czero = time.Duration(time.Now().UnixNano()) / clockRate * clockRate + +// clock returns a low resolution timestamp relative to the process start time. +func clock() time.Duration { + return time.Duration(time.Now().UnixNano())/clockRate*clockRate - czero +} + +// clockToTime converts a clock() timestamp to an absolute time.Time value. +func clockToTime(c time.Duration) time.Time { + return time.Unix(0, int64(czero+c)) +} + +// clockRound returns d rounded to the nearest clockRate increment. +func clockRound(d time.Duration) time.Duration { + return (d + clockRate>>1) / clockRate * clockRate +} + +// round returns x rounded to the nearest int64 (non-negative values only). +func round(x float64) int64 { + if _, frac := math.Modf(x); frac >= 0.5 { + return int64(math.Ceil(x)) + } + return int64(math.Floor(x)) +} + +// Percent represents a percentage in increments of 1/1000th of a percent. +type Percent uint32 + +// percentOf calculates what percent of the total is x. +func percentOf(x, total float64) Percent { + if x < 0 || total <= 0 { + return 0 + } else if p := round(x / total * 1e5); p <= math.MaxUint32 { + return Percent(p) + } + return Percent(math.MaxUint32) +} + +func (p Percent) Float() float64 { + return float64(p) * 1e-3 +} + +func (p Percent) String() string { + var buf [12]byte + b := strconv.AppendUint(buf[:0], uint64(p)/1000, 10) + n := len(b) + b = strconv.AppendUint(b, 1000+uint64(p)%1000, 10) + b[n] = '.' + return string(append(b, '%')) +} diff --git a/vendor/golang.org/x/net/html/atom/atom.go b/vendor/golang.org/x/net/html/atom/atom.go new file mode 100644 index 0000000000..cd0a8ac154 --- /dev/null +++ b/vendor/golang.org/x/net/html/atom/atom.go @@ -0,0 +1,78 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package atom provides integer codes (also known as atoms) for a fixed set of +// frequently occurring HTML strings: tag names and attribute keys such as "p" +// and "id". +// +// Sharing an atom's name between all elements with the same tag can result in +// fewer string allocations when tokenizing and parsing HTML. Integer +// comparisons are also generally faster than string comparisons. +// +// The value of an atom's particular code is not guaranteed to stay the same +// between versions of this package. Neither is any ordering guaranteed: +// whether atom.H1 < atom.H2 may also change. The codes are not guaranteed to +// be dense. The only guarantees are that e.g. looking up "div" will yield +// atom.Div, calling atom.Div.String will return "div", and atom.Div != 0. +package atom // import "golang.org/x/net/html/atom" + +// Atom is an integer code for a string. The zero value maps to "". +type Atom uint32 + +// String returns the atom's name. +func (a Atom) String() string { + start := uint32(a >> 8) + n := uint32(a & 0xff) + if start+n > uint32(len(atomText)) { + return "" + } + return atomText[start : start+n] +} + +func (a Atom) string() string { + return atomText[a>>8 : a>>8+a&0xff] +} + +// fnv computes the FNV hash with an arbitrary starting value h. +func fnv(h uint32, s []byte) uint32 { + for i := range s { + h ^= uint32(s[i]) + h *= 16777619 + } + return h +} + +func match(s string, t []byte) bool { + for i, c := range t { + if s[i] != c { + return false + } + } + return true +} + +// Lookup returns the atom whose name is s. It returns zero if there is no +// such atom. The lookup is case sensitive. +func Lookup(s []byte) Atom { + if len(s) == 0 || len(s) > maxAtomLen { + return 0 + } + h := fnv(hash0, s) + if a := table[h&uint32(len(table)-1)]; int(a&0xff) == len(s) && match(a.string(), s) { + return a + } + if a := table[(h>>16)&uint32(len(table)-1)]; int(a&0xff) == len(s) && match(a.string(), s) { + return a + } + return 0 +} + +// String returns a string whose contents are equal to s. In that sense, it is +// equivalent to string(s) but may be more efficient. +func String(s []byte) string { + if a := Lookup(s); a != 0 { + return a.String() + } + return string(s) +} diff --git a/vendor/golang.org/x/net/html/atom/table.go b/vendor/golang.org/x/net/html/atom/table.go new file mode 100644 index 0000000000..b460e6f722 --- /dev/null +++ b/vendor/golang.org/x/net/html/atom/table.go @@ -0,0 +1,785 @@ +// Code generated by go generate gen.go; DO NOT EDIT. + +//go:generate go run gen.go + +package atom + +const ( + A Atom = 0x1 + Abbr Atom = 0x4 + Accept Atom = 0x1a06 + AcceptCharset Atom = 0x1a0e + Accesskey Atom = 0x2c09 + Acronym Atom = 0xaa07 + Action Atom = 0x26506 + Address Atom = 0x6f107 + Align Atom = 0xb105 + Allowfullscreen Atom = 0x3280f + Allowpaymentrequest Atom = 0xc113 + Allowusermedia Atom = 0xdd0e + Alt Atom = 0xf303 + Annotation Atom = 0x1c90a + AnnotationXml Atom = 0x1c90e + Applet Atom = 0x30806 + Area Atom = 0x35004 + Article Atom = 0x3f607 + As Atom = 0x3c02 + Aside Atom = 0x10705 + Async Atom = 0xff05 + Audio Atom = 0x11505 + Autocomplete Atom = 0x26b0c + Autofocus Atom = 0x12109 + Autoplay Atom = 0x13c08 + B Atom = 0x101 + Base Atom = 0x3b04 + Basefont Atom = 0x3b08 + Bdi Atom = 0xba03 + Bdo Atom = 0x14b03 + Bgsound Atom = 0x15e07 + Big Atom = 0x17003 + Blink Atom = 0x17305 + Blockquote Atom = 0x1870a + Body Atom = 0x2804 + Br Atom = 0x202 + Button Atom = 0x19106 + Canvas Atom = 0x10306 + Caption Atom = 0x22407 + Center Atom = 0x21306 + Challenge Atom = 0x28e09 + Charset Atom = 0x2107 + Checked Atom = 0x5b507 + Cite Atom = 0x19c04 + Class Atom = 0x55805 + Code Atom = 0x5ee04 + Col Atom = 0x1ab03 + Colgroup Atom = 0x1ab08 + Color Atom = 0x1bf05 + Cols Atom = 0x1c404 + Colspan Atom = 0x1c407 + Command Atom = 0x1d707 + Content Atom = 0x57b07 + Contenteditable Atom = 0x57b0f + Contextmenu Atom = 0x37a0b + Controls Atom = 0x1de08 + Coords Atom = 0x1f006 + Crossorigin Atom = 0x1fa0b + Data Atom = 0x49904 + Datalist Atom = 0x49908 + Datetime Atom = 0x2ab08 + Dd Atom = 0x2bf02 + Default Atom = 0x10a07 + Defer Atom = 0x5f005 + Del Atom = 0x44c03 + Desc Atom = 0x55504 + Details Atom = 0x7207 + Dfn Atom = 0x8703 + Dialog Atom = 0xbb06 + Dir Atom = 0x9303 + Dirname Atom = 0x9307 + Disabled Atom = 0x16408 + Div Atom = 0x16b03 + Dl Atom = 0x5d602 + Download Atom = 0x45d08 + Draggable Atom = 0x17a09 + Dropzone Atom = 0x3ff08 + Dt Atom = 0x64002 + Em Atom = 0x6e02 + Embed Atom = 0x6e05 + Enctype Atom = 0x28007 + Face Atom = 0x21104 + Fieldset Atom = 0x21908 + Figcaption Atom = 0x2210a + Figure Atom = 0x23b06 + Font Atom = 0x3f04 + Footer Atom = 0xf606 + For Atom = 0x24703 + ForeignObject Atom = 0x2470d + Foreignobject Atom = 0x2540d + Form Atom = 0x26104 + Formaction Atom = 0x2610a + Formenctype Atom = 0x27c0b + Formmethod Atom = 0x2970a + Formnovalidate Atom = 0x2a10e + Formtarget Atom = 0x2b30a + Frame Atom = 0x8b05 + Frameset Atom = 0x8b08 + H1 Atom = 0x15c02 + H2 Atom = 0x56102 + H3 Atom = 0x2cd02 + H4 Atom = 0x2fc02 + H5 Atom = 0x33f02 + H6 Atom = 0x34902 + Head Atom = 0x32004 + Header Atom = 0x32006 + Headers Atom = 0x32007 + Height Atom = 0x5206 + Hgroup Atom = 0x64206 + Hidden Atom = 0x2bd06 + High Atom = 0x2ca04 + Hr Atom = 0x15702 + Href Atom = 0x2cf04 + Hreflang Atom = 0x2cf08 + Html Atom = 0x5604 + HttpEquiv Atom = 0x2d70a + I Atom = 0x601 + Icon Atom = 0x57a04 + Id Atom = 0x10902 + Iframe Atom = 0x2eb06 + Image Atom = 0x2f105 + Img Atom = 0x2f603 + Input Atom = 0x44505 + Inputmode Atom = 0x44509 + Ins Atom = 0x20303 + Integrity Atom = 0x23209 + Is Atom = 0x16502 + Isindex Atom = 0x2fe07 + Ismap Atom = 0x30505 + Itemid Atom = 0x38506 + Itemprop Atom = 0x19d08 + Itemref Atom = 0x3c707 + Itemscope Atom = 0x66f09 + Itemtype Atom = 0x30e08 + Kbd Atom = 0xb903 + Keygen Atom = 0x3206 + Keytype Atom = 0xd607 + Kind Atom = 0x17704 + Label Atom = 0x5905 + Lang Atom = 0x2d304 + Legend Atom = 0x18106 + Li Atom = 0xb202 + Link Atom = 0x17404 + List Atom = 0x49d04 + Listing Atom = 0x49d07 + Loop Atom = 0x5d04 + Low Atom = 0xc303 + Main Atom = 0x1004 + Malignmark Atom = 0xb00a + Manifest Atom = 0x6d508 + Map Atom = 0x30703 + Mark Atom = 0xb604 + Marquee Atom = 0x31607 + Math Atom = 0x31d04 + Max Atom = 0x33703 + Maxlength Atom = 0x33709 + Media Atom = 0xe605 + Mediagroup Atom = 0xe60a + Menu Atom = 0x38104 + Menuitem Atom = 0x38108 + Meta Atom = 0x4ac04 + Meter Atom = 0x9805 + Method Atom = 0x29b06 + Mglyph Atom = 0x2f706 + Mi Atom = 0x34102 + Min Atom = 0x34103 + Minlength Atom = 0x34109 + Mn Atom = 0x2a402 + Mo Atom = 0xa402 + Ms Atom = 0x67202 + Mtext Atom = 0x34b05 + Multiple Atom = 0x35908 + Muted Atom = 0x36105 + Name Atom = 0x9604 + Nav Atom = 0x1303 + Nobr Atom = 0x3704 + Noembed Atom = 0x6c07 + Noframes Atom = 0x8908 + Nomodule Atom = 0xa208 + Nonce Atom = 0x1a605 + Noscript Atom = 0x2c208 + Novalidate Atom = 0x2a50a + Object Atom = 0x25b06 + Ol Atom = 0x13702 + Onabort Atom = 0x19507 + Onafterprint Atom = 0x2290c + Onautocomplete Atom = 0x2690e + Onautocompleteerror Atom = 0x26913 + Onauxclick Atom = 0x6140a + Onbeforeprint Atom = 0x69c0d + Onbeforeunload Atom = 0x6e50e + Onblur Atom = 0x1ea06 + Oncancel Atom = 0x11908 + Oncanplay Atom = 0x14d09 + Oncanplaythrough Atom = 0x14d10 + Onchange Atom = 0x41508 + Onclick Atom = 0x2e407 + Onclose Atom = 0x36607 + Oncontextmenu Atom = 0x3780d + Oncopy Atom = 0x38b06 + Oncuechange Atom = 0x3910b + Oncut Atom = 0x39c05 + Ondblclick Atom = 0x3a10a + Ondrag Atom = 0x3ab06 + Ondragend Atom = 0x3ab09 + Ondragenter Atom = 0x3b40b + Ondragexit Atom = 0x3bf0a + Ondragleave Atom = 0x3d90b + Ondragover Atom = 0x3e40a + Ondragstart Atom = 0x3ee0b + Ondrop Atom = 0x3fd06 + Ondurationchange Atom = 0x40d10 + Onemptied Atom = 0x40409 + Onended Atom = 0x41d07 + Onerror Atom = 0x42407 + Onfocus Atom = 0x42b07 + Onhashchange Atom = 0x4370c + Oninput Atom = 0x44307 + Oninvalid Atom = 0x44f09 + Onkeydown Atom = 0x45809 + Onkeypress Atom = 0x4650a + Onkeyup Atom = 0x47407 + Onlanguagechange Atom = 0x48110 + Onload Atom = 0x49106 + Onloadeddata Atom = 0x4910c + Onloadedmetadata Atom = 0x4a410 + Onloadend Atom = 0x4ba09 + Onloadstart Atom = 0x4c30b + Onmessage Atom = 0x4ce09 + Onmessageerror Atom = 0x4ce0e + Onmousedown Atom = 0x4dc0b + Onmouseenter Atom = 0x4e70c + Onmouseleave Atom = 0x4f30c + Onmousemove Atom = 0x4ff0b + Onmouseout Atom = 0x50a0a + Onmouseover Atom = 0x5170b + Onmouseup Atom = 0x52209 + Onmousewheel Atom = 0x5300c + Onoffline Atom = 0x53c09 + Ononline Atom = 0x54508 + Onpagehide Atom = 0x54d0a + Onpageshow Atom = 0x5630a + Onpaste Atom = 0x56f07 + Onpause Atom = 0x58a07 + Onplay Atom = 0x59406 + Onplaying Atom = 0x59409 + Onpopstate Atom = 0x59d0a + Onprogress Atom = 0x5a70a + Onratechange Atom = 0x5bc0c + Onrejectionhandled Atom = 0x5c812 + Onreset Atom = 0x5da07 + Onresize Atom = 0x5e108 + Onscroll Atom = 0x5f508 + Onsecuritypolicyviolation Atom = 0x5fd19 + Onseeked Atom = 0x61e08 + Onseeking Atom = 0x62609 + Onselect Atom = 0x62f08 + Onshow Atom = 0x63906 + Onsort Atom = 0x64d06 + Onstalled Atom = 0x65709 + Onstorage Atom = 0x66009 + Onsubmit Atom = 0x66908 + Onsuspend Atom = 0x67909 + Ontimeupdate Atom = 0x400c + Ontoggle Atom = 0x68208 + Onunhandledrejection Atom = 0x68a14 + Onunload Atom = 0x6a908 + Onvolumechange Atom = 0x6b10e + Onwaiting Atom = 0x6bf09 + Onwheel Atom = 0x6c807 + Open Atom = 0x1a304 + Optgroup Atom = 0x5f08 + Optimum Atom = 0x6cf07 + Option Atom = 0x6e106 + Output Atom = 0x51106 + P Atom = 0xc01 + Param Atom = 0xc05 + Pattern Atom = 0x6607 + Picture Atom = 0x7b07 + Ping Atom = 0xef04 + Placeholder Atom = 0x1310b + Plaintext Atom = 0x1b209 + Playsinline Atom = 0x1400b + Poster Atom = 0x64706 + Pre Atom = 0x46a03 + Preload Atom = 0x47a07 + Progress Atom = 0x5a908 + Prompt Atom = 0x52a06 + Public Atom = 0x57606 + Q Atom = 0xcf01 + Radiogroup Atom = 0x30a + Rb Atom = 0x3a02 + Readonly Atom = 0x35108 + Referrerpolicy Atom = 0x3cb0e + Rel Atom = 0x47b03 + Required Atom = 0x23f08 + Reversed Atom = 0x8008 + Rows Atom = 0x9c04 + Rowspan Atom = 0x9c07 + Rp Atom = 0x22f02 + Rt Atom = 0x19a02 + Rtc Atom = 0x19a03 + Ruby Atom = 0xfb04 + S Atom = 0x2501 + Samp Atom = 0x7804 + Sandbox Atom = 0x12907 + Scope Atom = 0x67305 + Scoped Atom = 0x67306 + Script Atom = 0x2c406 + Seamless Atom = 0x36b08 + Search Atom = 0x55c06 + Section Atom = 0x1e507 + Select Atom = 0x63106 + Selected Atom = 0x63108 + Shape Atom = 0x1f505 + Size Atom = 0x5e504 + Sizes Atom = 0x5e505 + Slot Atom = 0x20504 + Small Atom = 0x32605 + Sortable Atom = 0x64f08 + Sorted Atom = 0x37206 + Source Atom = 0x43106 + Spacer Atom = 0x46e06 + Span Atom = 0x9f04 + Spellcheck Atom = 0x5b00a + Src Atom = 0x5e903 + Srcdoc Atom = 0x5e906 + Srclang Atom = 0x6f707 + Srcset Atom = 0x6fe06 + Start Atom = 0x3f405 + Step Atom = 0x57304 + Strike Atom = 0xd206 + Strong Atom = 0x6db06 + Style Atom = 0x70405 + Sub Atom = 0x66b03 + Summary Atom = 0x70907 + Sup Atom = 0x71003 + Svg Atom = 0x71303 + System Atom = 0x71606 + Tabindex Atom = 0x4b208 + Table Atom = 0x58505 + Target Atom = 0x2b706 + Tbody Atom = 0x2705 + Td Atom = 0x9202 + Template Atom = 0x71908 + Textarea Atom = 0x34c08 + Tfoot Atom = 0xf505 + Th Atom = 0x15602 + Thead Atom = 0x31f05 + Time Atom = 0x4204 + Title Atom = 0x11005 + Tr Atom = 0xcc02 + Track Atom = 0x1ba05 + Translate Atom = 0x20809 + Tt Atom = 0x6802 + Type Atom = 0xd904 + Typemustmatch Atom = 0x2830d + U Atom = 0xb01 + Ul Atom = 0xa702 + Updateviacache Atom = 0x460e + Usemap Atom = 0x58e06 + Value Atom = 0x1505 + Var Atom = 0x16d03 + Video Atom = 0x2e005 + Wbr Atom = 0x56c03 + Width Atom = 0x63e05 + Workertype Atom = 0x7210a + Wrap Atom = 0x72b04 + Xmp Atom = 0x12f03 +) + +const hash0 = 0x84f70e16 + +const maxAtomLen = 25 + +var table = [1 << 9]Atom{ + 0x1: 0x3ff08, // dropzone + 0x2: 0x3b08, // basefont + 0x3: 0x23209, // integrity + 0x4: 0x43106, // source + 0x5: 0x2c09, // accesskey + 0x6: 0x1a06, // accept + 0x7: 0x6c807, // onwheel + 0xb: 0x47407, // onkeyup + 0xc: 0x32007, // headers + 0xd: 0x67306, // scoped + 0xe: 0x67909, // onsuspend + 0xf: 0x8908, // noframes + 0x10: 0x1fa0b, // crossorigin + 0x11: 0x2e407, // onclick + 0x12: 0x3f405, // start + 0x13: 0x37a0b, // contextmenu + 0x14: 0x5e903, // src + 0x15: 0x1c404, // cols + 0x16: 0xbb06, // dialog + 0x17: 0x47a07, // preload + 0x18: 0x3c707, // itemref + 0x1b: 0x2f105, // image + 0x1d: 0x4ba09, // onloadend + 0x1e: 0x45d08, // download + 0x1f: 0x46a03, // pre + 0x23: 0x2970a, // formmethod + 0x24: 0x71303, // svg + 0x25: 0xcf01, // q + 0x26: 0x64002, // dt + 0x27: 0x1de08, // controls + 0x2a: 0x2804, // body + 0x2b: 0xd206, // strike + 0x2c: 0x3910b, // oncuechange + 0x2d: 0x4c30b, // onloadstart + 0x2e: 0x2fe07, // isindex + 0x2f: 0xb202, // li + 0x30: 0x1400b, // playsinline + 0x31: 0x34102, // mi + 0x32: 0x30806, // applet + 0x33: 0x4ce09, // onmessage + 0x35: 0x13702, // ol + 0x36: 0x1a304, // open + 0x39: 0x14d09, // oncanplay + 0x3a: 0x6bf09, // onwaiting + 0x3b: 0x11908, // oncancel + 0x3c: 0x6a908, // onunload + 0x3e: 0x53c09, // onoffline + 0x3f: 0x1a0e, // accept-charset + 0x40: 0x32004, // head + 0x42: 0x3ab09, // ondragend + 0x43: 0x1310b, // placeholder + 0x44: 0x2b30a, // formtarget + 0x45: 0x2540d, // foreignobject + 0x47: 0x400c, // ontimeupdate + 0x48: 0xdd0e, // allowusermedia + 0x4a: 0x69c0d, // onbeforeprint + 0x4b: 0x5604, // html + 0x4c: 0x9f04, // span + 0x4d: 0x64206, // hgroup + 0x4e: 0x16408, // disabled + 0x4f: 0x4204, // time + 0x51: 0x42b07, // onfocus + 0x53: 0xb00a, // malignmark + 0x55: 0x4650a, // onkeypress + 0x56: 0x55805, // class + 0x57: 0x1ab08, // colgroup + 0x58: 0x33709, // maxlength + 0x59: 0x5a908, // progress + 0x5b: 0x70405, // style + 0x5c: 0x2a10e, // formnovalidate + 0x5e: 0x38b06, // oncopy + 0x60: 0x26104, // form + 0x61: 0xf606, // footer + 0x64: 0x30a, // radiogroup + 0x66: 0xfb04, // ruby + 0x67: 0x4ff0b, // onmousemove + 0x68: 0x19d08, // itemprop + 0x69: 0x2d70a, // http-equiv + 0x6a: 0x15602, // th + 0x6c: 0x6e02, // em + 0x6d: 0x38108, // menuitem + 0x6e: 0x63106, // select + 0x6f: 0x48110, // onlanguagechange + 0x70: 0x31f05, // thead + 0x71: 0x15c02, // h1 + 0x72: 0x5e906, // srcdoc + 0x75: 0x9604, // name + 0x76: 0x19106, // button + 0x77: 0x55504, // desc + 0x78: 0x17704, // kind + 0x79: 0x1bf05, // color + 0x7c: 0x58e06, // usemap + 0x7d: 0x30e08, // itemtype + 0x7f: 0x6d508, // manifest + 0x81: 0x5300c, // onmousewheel + 0x82: 0x4dc0b, // onmousedown + 0x84: 0xc05, // param + 0x85: 0x2e005, // video + 0x86: 0x4910c, // onloadeddata + 0x87: 0x6f107, // address + 0x8c: 0xef04, // ping + 0x8d: 0x24703, // for + 0x8f: 0x62f08, // onselect + 0x90: 0x30703, // map + 0x92: 0xc01, // p + 0x93: 0x8008, // reversed + 0x94: 0x54d0a, // onpagehide + 0x95: 0x3206, // keygen + 0x96: 0x34109, // minlength + 0x97: 0x3e40a, // ondragover + 0x98: 0x42407, // onerror + 0x9a: 0x2107, // charset + 0x9b: 0x29b06, // method + 0x9c: 0x101, // b + 0x9d: 0x68208, // ontoggle + 0x9e: 0x2bd06, // hidden + 0xa0: 0x3f607, // article + 0xa2: 0x63906, // onshow + 0xa3: 0x64d06, // onsort + 0xa5: 0x57b0f, // contenteditable + 0xa6: 0x66908, // onsubmit + 0xa8: 0x44f09, // oninvalid + 0xaa: 0x202, // br + 0xab: 0x10902, // id + 0xac: 0x5d04, // loop + 0xad: 0x5630a, // onpageshow + 0xb0: 0x2cf04, // href + 0xb2: 0x2210a, // figcaption + 0xb3: 0x2690e, // onautocomplete + 0xb4: 0x49106, // onload + 0xb6: 0x9c04, // rows + 0xb7: 0x1a605, // nonce + 0xb8: 0x68a14, // onunhandledrejection + 0xbb: 0x21306, // center + 0xbc: 0x59406, // onplay + 0xbd: 0x33f02, // h5 + 0xbe: 0x49d07, // listing + 0xbf: 0x57606, // public + 0xc2: 0x23b06, // figure + 0xc3: 0x57a04, // icon + 0xc4: 0x1ab03, // col + 0xc5: 0x47b03, // rel + 0xc6: 0xe605, // media + 0xc7: 0x12109, // autofocus + 0xc8: 0x19a02, // rt + 0xca: 0x2d304, // lang + 0xcc: 0x49908, // datalist + 0xce: 0x2eb06, // iframe + 0xcf: 0x36105, // muted + 0xd0: 0x6140a, // onauxclick + 0xd2: 0x3c02, // as + 0xd6: 0x3fd06, // ondrop + 0xd7: 0x1c90a, // annotation + 0xd8: 0x21908, // fieldset + 0xdb: 0x2cf08, // hreflang + 0xdc: 0x4e70c, // onmouseenter + 0xdd: 0x2a402, // mn + 0xde: 0xe60a, // mediagroup + 0xdf: 0x9805, // meter + 0xe0: 0x56c03, // wbr + 0xe2: 0x63e05, // width + 0xe3: 0x2290c, // onafterprint + 0xe4: 0x30505, // ismap + 0xe5: 0x1505, // value + 0xe7: 0x1303, // nav + 0xe8: 0x54508, // ononline + 0xe9: 0xb604, // mark + 0xea: 0xc303, // low + 0xeb: 0x3ee0b, // ondragstart + 0xef: 0x12f03, // xmp + 0xf0: 0x22407, // caption + 0xf1: 0xd904, // type + 0xf2: 0x70907, // summary + 0xf3: 0x6802, // tt + 0xf4: 0x20809, // translate + 0xf5: 0x1870a, // blockquote + 0xf8: 0x15702, // hr + 0xfa: 0x2705, // tbody + 0xfc: 0x7b07, // picture + 0xfd: 0x5206, // height + 0xfe: 0x19c04, // cite + 0xff: 0x2501, // s + 0x101: 0xff05, // async + 0x102: 0x56f07, // onpaste + 0x103: 0x19507, // onabort + 0x104: 0x2b706, // target + 0x105: 0x14b03, // bdo + 0x106: 0x1f006, // coords + 0x107: 0x5e108, // onresize + 0x108: 0x71908, // template + 0x10a: 0x3a02, // rb + 0x10b: 0x2a50a, // novalidate + 0x10c: 0x460e, // updateviacache + 0x10d: 0x71003, // sup + 0x10e: 0x6c07, // noembed + 0x10f: 0x16b03, // div + 0x110: 0x6f707, // srclang + 0x111: 0x17a09, // draggable + 0x112: 0x67305, // scope + 0x113: 0x5905, // label + 0x114: 0x22f02, // rp + 0x115: 0x23f08, // required + 0x116: 0x3780d, // oncontextmenu + 0x117: 0x5e504, // size + 0x118: 0x5b00a, // spellcheck + 0x119: 0x3f04, // font + 0x11a: 0x9c07, // rowspan + 0x11b: 0x10a07, // default + 0x11d: 0x44307, // oninput + 0x11e: 0x38506, // itemid + 0x11f: 0x5ee04, // code + 0x120: 0xaa07, // acronym + 0x121: 0x3b04, // base + 0x125: 0x2470d, // foreignObject + 0x126: 0x2ca04, // high + 0x127: 0x3cb0e, // referrerpolicy + 0x128: 0x33703, // max + 0x129: 0x59d0a, // onpopstate + 0x12a: 0x2fc02, // h4 + 0x12b: 0x4ac04, // meta + 0x12c: 0x17305, // blink + 0x12e: 0x5f508, // onscroll + 0x12f: 0x59409, // onplaying + 0x130: 0xc113, // allowpaymentrequest + 0x131: 0x19a03, // rtc + 0x132: 0x72b04, // wrap + 0x134: 0x8b08, // frameset + 0x135: 0x32605, // small + 0x137: 0x32006, // header + 0x138: 0x40409, // onemptied + 0x139: 0x34902, // h6 + 0x13a: 0x35908, // multiple + 0x13c: 0x52a06, // prompt + 0x13f: 0x28e09, // challenge + 0x141: 0x4370c, // onhashchange + 0x142: 0x57b07, // content + 0x143: 0x1c90e, // annotation-xml + 0x144: 0x36607, // onclose + 0x145: 0x14d10, // oncanplaythrough + 0x148: 0x5170b, // onmouseover + 0x149: 0x64f08, // sortable + 0x14a: 0xa402, // mo + 0x14b: 0x2cd02, // h3 + 0x14c: 0x2c406, // script + 0x14d: 0x41d07, // onended + 0x14f: 0x64706, // poster + 0x150: 0x7210a, // workertype + 0x153: 0x1f505, // shape + 0x154: 0x4, // abbr + 0x155: 0x1, // a + 0x156: 0x2bf02, // dd + 0x157: 0x71606, // system + 0x158: 0x4ce0e, // onmessageerror + 0x159: 0x36b08, // seamless + 0x15a: 0x2610a, // formaction + 0x15b: 0x6e106, // option + 0x15c: 0x31d04, // math + 0x15d: 0x62609, // onseeking + 0x15e: 0x39c05, // oncut + 0x15f: 0x44c03, // del + 0x160: 0x11005, // title + 0x161: 0x11505, // audio + 0x162: 0x63108, // selected + 0x165: 0x3b40b, // ondragenter + 0x166: 0x46e06, // spacer + 0x167: 0x4a410, // onloadedmetadata + 0x168: 0x44505, // input + 0x16a: 0x58505, // table + 0x16b: 0x41508, // onchange + 0x16e: 0x5f005, // defer + 0x171: 0x50a0a, // onmouseout + 0x172: 0x20504, // slot + 0x175: 0x3704, // nobr + 0x177: 0x1d707, // command + 0x17a: 0x7207, // details + 0x17b: 0x38104, // menu + 0x17c: 0xb903, // kbd + 0x17d: 0x57304, // step + 0x17e: 0x20303, // ins + 0x17f: 0x13c08, // autoplay + 0x182: 0x34103, // min + 0x183: 0x17404, // link + 0x185: 0x40d10, // ondurationchange + 0x186: 0x9202, // td + 0x187: 0x8b05, // frame + 0x18a: 0x2ab08, // datetime + 0x18b: 0x44509, // inputmode + 0x18c: 0x35108, // readonly + 0x18d: 0x21104, // face + 0x18f: 0x5e505, // sizes + 0x191: 0x4b208, // tabindex + 0x192: 0x6db06, // strong + 0x193: 0xba03, // bdi + 0x194: 0x6fe06, // srcset + 0x196: 0x67202, // ms + 0x197: 0x5b507, // checked + 0x198: 0xb105, // align + 0x199: 0x1e507, // section + 0x19b: 0x6e05, // embed + 0x19d: 0x15e07, // bgsound + 0x1a2: 0x49d04, // list + 0x1a3: 0x61e08, // onseeked + 0x1a4: 0x66009, // onstorage + 0x1a5: 0x2f603, // img + 0x1a6: 0xf505, // tfoot + 0x1a9: 0x26913, // onautocompleteerror + 0x1aa: 0x5fd19, // onsecuritypolicyviolation + 0x1ad: 0x9303, // dir + 0x1ae: 0x9307, // dirname + 0x1b0: 0x5a70a, // onprogress + 0x1b2: 0x65709, // onstalled + 0x1b5: 0x66f09, // itemscope + 0x1b6: 0x49904, // data + 0x1b7: 0x3d90b, // ondragleave + 0x1b8: 0x56102, // h2 + 0x1b9: 0x2f706, // mglyph + 0x1ba: 0x16502, // is + 0x1bb: 0x6e50e, // onbeforeunload + 0x1bc: 0x2830d, // typemustmatch + 0x1bd: 0x3ab06, // ondrag + 0x1be: 0x5da07, // onreset + 0x1c0: 0x51106, // output + 0x1c1: 0x12907, // sandbox + 0x1c2: 0x1b209, // plaintext + 0x1c4: 0x34c08, // textarea + 0x1c7: 0xd607, // keytype + 0x1c8: 0x34b05, // mtext + 0x1c9: 0x6b10e, // onvolumechange + 0x1ca: 0x1ea06, // onblur + 0x1cb: 0x58a07, // onpause + 0x1cd: 0x5bc0c, // onratechange + 0x1ce: 0x10705, // aside + 0x1cf: 0x6cf07, // optimum + 0x1d1: 0x45809, // onkeydown + 0x1d2: 0x1c407, // colspan + 0x1d3: 0x1004, // main + 0x1d4: 0x66b03, // sub + 0x1d5: 0x25b06, // object + 0x1d6: 0x55c06, // search + 0x1d7: 0x37206, // sorted + 0x1d8: 0x17003, // big + 0x1d9: 0xb01, // u + 0x1db: 0x26b0c, // autocomplete + 0x1dc: 0xcc02, // tr + 0x1dd: 0xf303, // alt + 0x1df: 0x7804, // samp + 0x1e0: 0x5c812, // onrejectionhandled + 0x1e1: 0x4f30c, // onmouseleave + 0x1e2: 0x28007, // enctype + 0x1e3: 0xa208, // nomodule + 0x1e5: 0x3280f, // allowfullscreen + 0x1e6: 0x5f08, // optgroup + 0x1e8: 0x27c0b, // formenctype + 0x1e9: 0x18106, // legend + 0x1ea: 0x10306, // canvas + 0x1eb: 0x6607, // pattern + 0x1ec: 0x2c208, // noscript + 0x1ed: 0x601, // i + 0x1ee: 0x5d602, // dl + 0x1ef: 0xa702, // ul + 0x1f2: 0x52209, // onmouseup + 0x1f4: 0x1ba05, // track + 0x1f7: 0x3a10a, // ondblclick + 0x1f8: 0x3bf0a, // ondragexit + 0x1fa: 0x8703, // dfn + 0x1fc: 0x26506, // action + 0x1fd: 0x35004, // area + 0x1fe: 0x31607, // marquee + 0x1ff: 0x16d03, // var +} + +const atomText = "abbradiogrouparamainavalueaccept-charsetbodyaccesskeygenobrb" + + "asefontimeupdateviacacheightmlabelooptgroupatternoembedetail" + + "sampictureversedfnoframesetdirnameterowspanomoduleacronymali" + + "gnmarkbdialogallowpaymentrequestrikeytypeallowusermediagroup" + + "ingaltfooterubyasyncanvasidefaultitleaudioncancelautofocusan" + + "dboxmplaceholderautoplaysinlinebdoncanplaythrough1bgsoundisa" + + "bledivarbigblinkindraggablegendblockquotebuttonabortcitempro" + + "penoncecolgrouplaintextrackcolorcolspannotation-xmlcommandco" + + "ntrolsectionblurcoordshapecrossoriginslotranslatefacenterfie" + + "ldsetfigcaptionafterprintegrityfigurequiredforeignObjectfore" + + "ignobjectformactionautocompleteerrorformenctypemustmatchalle" + + "ngeformmethodformnovalidatetimeformtargethiddenoscripthigh3h" + + "reflanghttp-equivideonclickiframeimageimglyph4isindexismappl" + + "etitemtypemarqueematheadersmallowfullscreenmaxlength5minleng" + + "th6mtextareadonlymultiplemutedoncloseamlessortedoncontextmen" + + "uitemidoncopyoncuechangeoncutondblclickondragendondragentero" + + "ndragexitemreferrerpolicyondragleaveondragoverondragstarticl" + + "eondropzonemptiedondurationchangeonendedonerroronfocusourceo" + + "nhashchangeoninputmodeloninvalidonkeydownloadonkeypresspacer" + + "onkeyupreloadonlanguagechangeonloadeddatalistingonloadedmeta" + + "databindexonloadendonloadstartonmessageerroronmousedownonmou" + + "seenteronmouseleaveonmousemoveonmouseoutputonmouseoveronmous" + + "eupromptonmousewheelonofflineononlineonpagehidesclassearch2o" + + "npageshowbronpastepublicontenteditableonpausemaponplayingonp" + + "opstateonprogresspellcheckedonratechangeonrejectionhandledon" + + "resetonresizesrcdocodeferonscrollonsecuritypolicyviolationau" + + "xclickonseekedonseekingonselectedonshowidthgrouposteronsorta" + + "bleonstalledonstorageonsubmitemscopedonsuspendontoggleonunha" + + "ndledrejectionbeforeprintonunloadonvolumechangeonwaitingonwh" + + "eeloptimumanifestrongoptionbeforeunloaddressrclangsrcsetstyl" + + "esummarysupsvgsystemplateworkertypewrap" diff --git a/vendor/golang.org/x/net/html/const.go b/vendor/golang.org/x/net/html/const.go new file mode 100644 index 0000000000..ff7acf2d5b --- /dev/null +++ b/vendor/golang.org/x/net/html/const.go @@ -0,0 +1,111 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package html + +// Section 12.2.4.2 of the HTML5 specification says "The following elements +// have varying levels of special parsing rules". +// https://html.spec.whatwg.org/multipage/syntax.html#the-stack-of-open-elements +var isSpecialElementMap = map[string]bool{ + "address": true, + "applet": true, + "area": true, + "article": true, + "aside": true, + "base": true, + "basefont": true, + "bgsound": true, + "blockquote": true, + "body": true, + "br": true, + "button": true, + "caption": true, + "center": true, + "col": true, + "colgroup": true, + "dd": true, + "details": true, + "dir": true, + "div": true, + "dl": true, + "dt": true, + "embed": true, + "fieldset": true, + "figcaption": true, + "figure": true, + "footer": true, + "form": true, + "frame": true, + "frameset": true, + "h1": true, + "h2": true, + "h3": true, + "h4": true, + "h5": true, + "h6": true, + "head": true, + "header": true, + "hgroup": true, + "hr": true, + "html": true, + "iframe": true, + "img": true, + "input": true, + "keygen": true, // "keygen" has been removed from the spec, but are kept here for backwards compatibility. + "li": true, + "link": true, + "listing": true, + "main": true, + "marquee": true, + "menu": true, + "meta": true, + "nav": true, + "noembed": true, + "noframes": true, + "noscript": true, + "object": true, + "ol": true, + "p": true, + "param": true, + "plaintext": true, + "pre": true, + "script": true, + "section": true, + "select": true, + "source": true, + "style": true, + "summary": true, + "table": true, + "tbody": true, + "td": true, + "template": true, + "textarea": true, + "tfoot": true, + "th": true, + "thead": true, + "title": true, + "tr": true, + "track": true, + "ul": true, + "wbr": true, + "xmp": true, +} + +func isSpecialElement(element *Node) bool { + switch element.Namespace { + case "", "html": + return isSpecialElementMap[element.Data] + case "math": + switch element.Data { + case "mi", "mo", "mn", "ms", "mtext", "annotation-xml": + return true + } + case "svg": + switch element.Data { + case "foreignObject", "desc", "title": + return true + } + } + return false +} diff --git a/vendor/golang.org/x/net/html/doc.go b/vendor/golang.org/x/net/html/doc.go new file mode 100644 index 0000000000..885c4c5936 --- /dev/null +++ b/vendor/golang.org/x/net/html/doc.go @@ -0,0 +1,122 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package html implements an HTML5-compliant tokenizer and parser. + +Tokenization is done by creating a Tokenizer for an io.Reader r. It is the +caller's responsibility to ensure that r provides UTF-8 encoded HTML. + + z := html.NewTokenizer(r) + +Given a Tokenizer z, the HTML is tokenized by repeatedly calling z.Next(), +which parses the next token and returns its type, or an error: + + for { + tt := z.Next() + if tt == html.ErrorToken { + // ... + return ... + } + // Process the current token. + } + +There are two APIs for retrieving the current token. The high-level API is to +call Token; the low-level API is to call Text or TagName / TagAttr. Both APIs +allow optionally calling Raw after Next but before Token, Text, TagName, or +TagAttr. In EBNF notation, the valid call sequence per token is: + + Next {Raw} [ Token | Text | TagName {TagAttr} ] + +Token returns an independent data structure that completely describes a token. +Entities (such as "<") are unescaped, tag names and attribute keys are +lower-cased, and attributes are collected into a []Attribute. For example: + + for { + if z.Next() == html.ErrorToken { + // Returning io.EOF indicates success. + return z.Err() + } + emitToken(z.Token()) + } + +The low-level API performs fewer allocations and copies, but the contents of +the []byte values returned by Text, TagName and TagAttr may change on the next +call to Next. For example, to extract an HTML page's anchor text: + + depth := 0 + for { + tt := z.Next() + switch tt { + case html.ErrorToken: + return z.Err() + case html.TextToken: + if depth > 0 { + // emitBytes should copy the []byte it receives, + // if it doesn't process it immediately. + emitBytes(z.Text()) + } + case html.StartTagToken, html.EndTagToken: + tn, _ := z.TagName() + if len(tn) == 1 && tn[0] == 'a' { + if tt == html.StartTagToken { + depth++ + } else { + depth-- + } + } + } + } + +Parsing is done by calling Parse with an io.Reader, which returns the root of +the parse tree (the document element) as a *Node. It is the caller's +responsibility to ensure that the Reader provides UTF-8 encoded HTML. For +example, to process each anchor node in depth-first order: + + doc, err := html.Parse(r) + if err != nil { + // ... + } + for n := range doc.Descendants() { + if n.Type == html.ElementNode && n.Data == "a" { + // Do something with n... + } + } + +The relevant specifications include: +https://html.spec.whatwg.org/multipage/syntax.html and +https://html.spec.whatwg.org/multipage/syntax.html#tokenization + +# Security Considerations + +Care should be taken when parsing and interpreting HTML, whether full documents +or fragments, within the framework of the HTML specification, especially with +regard to untrusted inputs. + +This package provides both a tokenizer and a parser, which implement the +tokenization, and tokenization and tree construction stages of the WHATWG HTML +parsing specification respectively. While the tokenizer parses and normalizes +individual HTML tokens, only the parser constructs the DOM tree from the +tokenized HTML, as described in the tree construction stage of the +specification, dynamically modifying or extending the document's DOM tree. + +If your use case requires semantically well-formed HTML documents, as defined by +the WHATWG specification, the parser should be used rather than the tokenizer. + +In security contexts, if trust decisions are being made using the tokenized or +parsed content, the input must be re-serialized (for instance by using Render or +Token.String) in order for those trust decisions to hold, as the process of +tokenization or parsing may alter the content. +*/ +package html // import "golang.org/x/net/html" + +// The tokenization algorithm implemented by this package is not a line-by-line +// transliteration of the relatively verbose state-machine in the WHATWG +// specification. A more direct approach is used instead, where the program +// counter implies the state, such as whether it is tokenizing a tag or a text +// node. Specification compliance is verified by checking expected and actual +// outputs over a test suite rather than aiming for algorithmic fidelity. + +// TODO(nigeltao): Does a DOM API belong in this package or a separate one? +// TODO(nigeltao): How does parsing interact with a JavaScript engine? diff --git a/vendor/golang.org/x/net/html/doctype.go b/vendor/golang.org/x/net/html/doctype.go new file mode 100644 index 0000000000..bca3ae9a0c --- /dev/null +++ b/vendor/golang.org/x/net/html/doctype.go @@ -0,0 +1,156 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package html + +import ( + "strings" +) + +// parseDoctype parses the data from a DoctypeToken into a name, +// public identifier, and system identifier. It returns a Node whose Type +// is DoctypeNode, whose Data is the name, and which has attributes +// named "system" and "public" for the two identifiers if they were present. +// quirks is whether the document should be parsed in "quirks mode". +func parseDoctype(s string) (n *Node, quirks bool) { + n = &Node{Type: DoctypeNode} + + // Find the name. + space := strings.IndexAny(s, whitespace) + if space == -1 { + space = len(s) + } + n.Data = s[:space] + // The comparison to "html" is case-sensitive. + if n.Data != "html" { + quirks = true + } + n.Data = strings.ToLower(n.Data) + s = strings.TrimLeft(s[space:], whitespace) + + if len(s) < 6 { + // It can't start with "PUBLIC" or "SYSTEM". + // Ignore the rest of the string. + return n, quirks || s != "" + } + + key := strings.ToLower(s[:6]) + s = s[6:] + for key == "public" || key == "system" { + s = strings.TrimLeft(s, whitespace) + if s == "" { + break + } + quote := s[0] + if quote != '"' && quote != '\'' { + break + } + s = s[1:] + q := strings.IndexRune(s, rune(quote)) + var id string + if q == -1 { + id = s + s = "" + } else { + id = s[:q] + s = s[q+1:] + } + n.Attr = append(n.Attr, Attribute{Key: key, Val: id}) + if key == "public" { + key = "system" + } else { + key = "" + } + } + + if key != "" || s != "" { + quirks = true + } else if len(n.Attr) > 0 { + if n.Attr[0].Key == "public" { + public := strings.ToLower(n.Attr[0].Val) + switch public { + case "-//w3o//dtd w3 html strict 3.0//en//", "-/w3d/dtd html 4.0 transitional/en", "html": + quirks = true + default: + for _, q := range quirkyIDs { + if strings.HasPrefix(public, q) { + quirks = true + break + } + } + } + // The following two public IDs only cause quirks mode if there is no system ID. + if len(n.Attr) == 1 && (strings.HasPrefix(public, "-//w3c//dtd html 4.01 frameset//") || + strings.HasPrefix(public, "-//w3c//dtd html 4.01 transitional//")) { + quirks = true + } + } + if lastAttr := n.Attr[len(n.Attr)-1]; lastAttr.Key == "system" && + strings.EqualFold(lastAttr.Val, "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd") { + quirks = true + } + } + + return n, quirks +} + +// quirkyIDs is a list of public doctype identifiers that cause a document +// to be interpreted in quirks mode. The identifiers should be in lower case. +var quirkyIDs = []string{ + "+//silmaril//dtd html pro v0r11 19970101//", + "-//advasoft ltd//dtd html 3.0 aswedit + extensions//", + "-//as//dtd html 3.0 aswedit + extensions//", + "-//ietf//dtd html 2.0 level 1//", + "-//ietf//dtd html 2.0 level 2//", + "-//ietf//dtd html 2.0 strict level 1//", + "-//ietf//dtd html 2.0 strict level 2//", + "-//ietf//dtd html 2.0 strict//", + "-//ietf//dtd html 2.0//", + "-//ietf//dtd html 2.1e//", + "-//ietf//dtd html 3.0//", + "-//ietf//dtd html 3.2 final//", + "-//ietf//dtd html 3.2//", + "-//ietf//dtd html 3//", + "-//ietf//dtd html level 0//", + "-//ietf//dtd html level 1//", + "-//ietf//dtd html level 2//", + "-//ietf//dtd html level 3//", + "-//ietf//dtd html strict level 0//", + "-//ietf//dtd html strict level 1//", + "-//ietf//dtd html strict level 2//", + "-//ietf//dtd html strict level 3//", + "-//ietf//dtd html strict//", + "-//ietf//dtd html//", + "-//metrius//dtd metrius presentational//", + "-//microsoft//dtd internet explorer 2.0 html strict//", + "-//microsoft//dtd internet explorer 2.0 html//", + "-//microsoft//dtd internet explorer 2.0 tables//", + "-//microsoft//dtd internet explorer 3.0 html strict//", + "-//microsoft//dtd internet explorer 3.0 html//", + "-//microsoft//dtd internet explorer 3.0 tables//", + "-//netscape comm. corp.//dtd html//", + "-//netscape comm. corp.//dtd strict html//", + "-//o'reilly and associates//dtd html 2.0//", + "-//o'reilly and associates//dtd html extended 1.0//", + "-//o'reilly and associates//dtd html extended relaxed 1.0//", + "-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//", + "-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//", + "-//spyglass//dtd html 2.0 extended//", + "-//sq//dtd html 2.0 hotmetal + extensions//", + "-//sun microsystems corp.//dtd hotjava html//", + "-//sun microsystems corp.//dtd hotjava strict html//", + "-//w3c//dtd html 3 1995-03-24//", + "-//w3c//dtd html 3.2 draft//", + "-//w3c//dtd html 3.2 final//", + "-//w3c//dtd html 3.2//", + "-//w3c//dtd html 3.2s draft//", + "-//w3c//dtd html 4.0 frameset//", + "-//w3c//dtd html 4.0 transitional//", + "-//w3c//dtd html experimental 19960712//", + "-//w3c//dtd html experimental 970421//", + "-//w3c//dtd w3 html//", + "-//w3o//dtd w3 html 3.0//", + "-//webtechs//dtd mozilla html 2.0//", + "-//webtechs//dtd mozilla html//", +} diff --git a/vendor/golang.org/x/net/html/entity.go b/vendor/golang.org/x/net/html/entity.go new file mode 100644 index 0000000000..b628880a01 --- /dev/null +++ b/vendor/golang.org/x/net/html/entity.go @@ -0,0 +1,2253 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package html + +// All entities that do not end with ';' are 6 or fewer bytes long. +const longestEntityWithoutSemicolon = 6 + +// entity is a map from HTML entity names to their values. The semicolon matters: +// https://html.spec.whatwg.org/multipage/syntax.html#named-character-references +// lists both "amp" and "amp;" as two separate entries. +// +// Note that the HTML5 list is larger than the HTML4 list at +// http://www.w3.org/TR/html4/sgml/entities.html +var entity = map[string]rune{ + "AElig;": '\U000000C6', + "AMP;": '\U00000026', + "Aacute;": '\U000000C1', + "Abreve;": '\U00000102', + "Acirc;": '\U000000C2', + "Acy;": '\U00000410', + "Afr;": '\U0001D504', + "Agrave;": '\U000000C0', + "Alpha;": '\U00000391', + "Amacr;": '\U00000100', + "And;": '\U00002A53', + "Aogon;": '\U00000104', + "Aopf;": '\U0001D538', + "ApplyFunction;": '\U00002061', + "Aring;": '\U000000C5', + "Ascr;": '\U0001D49C', + "Assign;": '\U00002254', + "Atilde;": '\U000000C3', + "Auml;": '\U000000C4', + "Backslash;": '\U00002216', + "Barv;": '\U00002AE7', + "Barwed;": '\U00002306', + "Bcy;": '\U00000411', + "Because;": '\U00002235', + "Bernoullis;": '\U0000212C', + "Beta;": '\U00000392', + "Bfr;": '\U0001D505', + "Bopf;": '\U0001D539', + "Breve;": '\U000002D8', + "Bscr;": '\U0000212C', + "Bumpeq;": '\U0000224E', + "CHcy;": '\U00000427', + "COPY;": '\U000000A9', + "Cacute;": '\U00000106', + "Cap;": '\U000022D2', + "CapitalDifferentialD;": '\U00002145', + "Cayleys;": '\U0000212D', + "Ccaron;": '\U0000010C', + "Ccedil;": '\U000000C7', + "Ccirc;": '\U00000108', + "Cconint;": '\U00002230', + "Cdot;": '\U0000010A', + "Cedilla;": '\U000000B8', + "CenterDot;": '\U000000B7', + "Cfr;": '\U0000212D', + "Chi;": '\U000003A7', + "CircleDot;": '\U00002299', + "CircleMinus;": '\U00002296', + "CirclePlus;": '\U00002295', + "CircleTimes;": '\U00002297', + "ClockwiseContourIntegral;": '\U00002232', + "CloseCurlyDoubleQuote;": '\U0000201D', + "CloseCurlyQuote;": '\U00002019', + "Colon;": '\U00002237', + "Colone;": '\U00002A74', + "Congruent;": '\U00002261', + "Conint;": '\U0000222F', + "ContourIntegral;": '\U0000222E', + "Copf;": '\U00002102', + "Coproduct;": '\U00002210', + "CounterClockwiseContourIntegral;": '\U00002233', + "Cross;": '\U00002A2F', + "Cscr;": '\U0001D49E', + "Cup;": '\U000022D3', + "CupCap;": '\U0000224D', + "DD;": '\U00002145', + "DDotrahd;": '\U00002911', + "DJcy;": '\U00000402', + "DScy;": '\U00000405', + "DZcy;": '\U0000040F', + "Dagger;": '\U00002021', + "Darr;": '\U000021A1', + "Dashv;": '\U00002AE4', + "Dcaron;": '\U0000010E', + "Dcy;": '\U00000414', + "Del;": '\U00002207', + "Delta;": '\U00000394', + "Dfr;": '\U0001D507', + "DiacriticalAcute;": '\U000000B4', + "DiacriticalDot;": '\U000002D9', + "DiacriticalDoubleAcute;": '\U000002DD', + "DiacriticalGrave;": '\U00000060', + "DiacriticalTilde;": '\U000002DC', + "Diamond;": '\U000022C4', + "DifferentialD;": '\U00002146', + "Dopf;": '\U0001D53B', + "Dot;": '\U000000A8', + "DotDot;": '\U000020DC', + "DotEqual;": '\U00002250', + "DoubleContourIntegral;": '\U0000222F', + "DoubleDot;": '\U000000A8', + "DoubleDownArrow;": '\U000021D3', + "DoubleLeftArrow;": '\U000021D0', + "DoubleLeftRightArrow;": '\U000021D4', + "DoubleLeftTee;": '\U00002AE4', + "DoubleLongLeftArrow;": '\U000027F8', + "DoubleLongLeftRightArrow;": '\U000027FA', + "DoubleLongRightArrow;": '\U000027F9', + "DoubleRightArrow;": '\U000021D2', + "DoubleRightTee;": '\U000022A8', + "DoubleUpArrow;": '\U000021D1', + "DoubleUpDownArrow;": '\U000021D5', + "DoubleVerticalBar;": '\U00002225', + "DownArrow;": '\U00002193', + "DownArrowBar;": '\U00002913', + "DownArrowUpArrow;": '\U000021F5', + "DownBreve;": '\U00000311', + "DownLeftRightVector;": '\U00002950', + "DownLeftTeeVector;": '\U0000295E', + "DownLeftVector;": '\U000021BD', + "DownLeftVectorBar;": '\U00002956', + "DownRightTeeVector;": '\U0000295F', + "DownRightVector;": '\U000021C1', + "DownRightVectorBar;": '\U00002957', + "DownTee;": '\U000022A4', + "DownTeeArrow;": '\U000021A7', + "Downarrow;": '\U000021D3', + "Dscr;": '\U0001D49F', + "Dstrok;": '\U00000110', + "ENG;": '\U0000014A', + "ETH;": '\U000000D0', + "Eacute;": '\U000000C9', + "Ecaron;": '\U0000011A', + "Ecirc;": '\U000000CA', + "Ecy;": '\U0000042D', + "Edot;": '\U00000116', + "Efr;": '\U0001D508', + "Egrave;": '\U000000C8', + "Element;": '\U00002208', + "Emacr;": '\U00000112', + "EmptySmallSquare;": '\U000025FB', + "EmptyVerySmallSquare;": '\U000025AB', + "Eogon;": '\U00000118', + "Eopf;": '\U0001D53C', + "Epsilon;": '\U00000395', + "Equal;": '\U00002A75', + "EqualTilde;": '\U00002242', + "Equilibrium;": '\U000021CC', + "Escr;": '\U00002130', + "Esim;": '\U00002A73', + "Eta;": '\U00000397', + "Euml;": '\U000000CB', + "Exists;": '\U00002203', + "ExponentialE;": '\U00002147', + "Fcy;": '\U00000424', + "Ffr;": '\U0001D509', + "FilledSmallSquare;": '\U000025FC', + "FilledVerySmallSquare;": '\U000025AA', + "Fopf;": '\U0001D53D', + "ForAll;": '\U00002200', + "Fouriertrf;": '\U00002131', + "Fscr;": '\U00002131', + "GJcy;": '\U00000403', + "GT;": '\U0000003E', + "Gamma;": '\U00000393', + "Gammad;": '\U000003DC', + "Gbreve;": '\U0000011E', + "Gcedil;": '\U00000122', + "Gcirc;": '\U0000011C', + "Gcy;": '\U00000413', + "Gdot;": '\U00000120', + "Gfr;": '\U0001D50A', + "Gg;": '\U000022D9', + "Gopf;": '\U0001D53E', + "GreaterEqual;": '\U00002265', + "GreaterEqualLess;": '\U000022DB', + "GreaterFullEqual;": '\U00002267', + "GreaterGreater;": '\U00002AA2', + "GreaterLess;": '\U00002277', + "GreaterSlantEqual;": '\U00002A7E', + "GreaterTilde;": '\U00002273', + "Gscr;": '\U0001D4A2', + "Gt;": '\U0000226B', + "HARDcy;": '\U0000042A', + "Hacek;": '\U000002C7', + "Hat;": '\U0000005E', + "Hcirc;": '\U00000124', + "Hfr;": '\U0000210C', + "HilbertSpace;": '\U0000210B', + "Hopf;": '\U0000210D', + "HorizontalLine;": '\U00002500', + "Hscr;": '\U0000210B', + "Hstrok;": '\U00000126', + "HumpDownHump;": '\U0000224E', + "HumpEqual;": '\U0000224F', + "IEcy;": '\U00000415', + "IJlig;": '\U00000132', + "IOcy;": '\U00000401', + "Iacute;": '\U000000CD', + "Icirc;": '\U000000CE', + "Icy;": '\U00000418', + "Idot;": '\U00000130', + "Ifr;": '\U00002111', + "Igrave;": '\U000000CC', + "Im;": '\U00002111', + "Imacr;": '\U0000012A', + "ImaginaryI;": '\U00002148', + "Implies;": '\U000021D2', + "Int;": '\U0000222C', + "Integral;": '\U0000222B', + "Intersection;": '\U000022C2', + "InvisibleComma;": '\U00002063', + "InvisibleTimes;": '\U00002062', + "Iogon;": '\U0000012E', + "Iopf;": '\U0001D540', + "Iota;": '\U00000399', + "Iscr;": '\U00002110', + "Itilde;": '\U00000128', + "Iukcy;": '\U00000406', + "Iuml;": '\U000000CF', + "Jcirc;": '\U00000134', + "Jcy;": '\U00000419', + "Jfr;": '\U0001D50D', + "Jopf;": '\U0001D541', + "Jscr;": '\U0001D4A5', + "Jsercy;": '\U00000408', + "Jukcy;": '\U00000404', + "KHcy;": '\U00000425', + "KJcy;": '\U0000040C', + "Kappa;": '\U0000039A', + "Kcedil;": '\U00000136', + "Kcy;": '\U0000041A', + "Kfr;": '\U0001D50E', + "Kopf;": '\U0001D542', + "Kscr;": '\U0001D4A6', + "LJcy;": '\U00000409', + "LT;": '\U0000003C', + "Lacute;": '\U00000139', + "Lambda;": '\U0000039B', + "Lang;": '\U000027EA', + "Laplacetrf;": '\U00002112', + "Larr;": '\U0000219E', + "Lcaron;": '\U0000013D', + "Lcedil;": '\U0000013B', + "Lcy;": '\U0000041B', + "LeftAngleBracket;": '\U000027E8', + "LeftArrow;": '\U00002190', + "LeftArrowBar;": '\U000021E4', + "LeftArrowRightArrow;": '\U000021C6', + "LeftCeiling;": '\U00002308', + "LeftDoubleBracket;": '\U000027E6', + "LeftDownTeeVector;": '\U00002961', + "LeftDownVector;": '\U000021C3', + "LeftDownVectorBar;": '\U00002959', + "LeftFloor;": '\U0000230A', + "LeftRightArrow;": '\U00002194', + "LeftRightVector;": '\U0000294E', + "LeftTee;": '\U000022A3', + "LeftTeeArrow;": '\U000021A4', + "LeftTeeVector;": '\U0000295A', + "LeftTriangle;": '\U000022B2', + "LeftTriangleBar;": '\U000029CF', + "LeftTriangleEqual;": '\U000022B4', + "LeftUpDownVector;": '\U00002951', + "LeftUpTeeVector;": '\U00002960', + "LeftUpVector;": '\U000021BF', + "LeftUpVectorBar;": '\U00002958', + "LeftVector;": '\U000021BC', + "LeftVectorBar;": '\U00002952', + "Leftarrow;": '\U000021D0', + "Leftrightarrow;": '\U000021D4', + "LessEqualGreater;": '\U000022DA', + "LessFullEqual;": '\U00002266', + "LessGreater;": '\U00002276', + "LessLess;": '\U00002AA1', + "LessSlantEqual;": '\U00002A7D', + "LessTilde;": '\U00002272', + "Lfr;": '\U0001D50F', + "Ll;": '\U000022D8', + "Lleftarrow;": '\U000021DA', + "Lmidot;": '\U0000013F', + "LongLeftArrow;": '\U000027F5', + "LongLeftRightArrow;": '\U000027F7', + "LongRightArrow;": '\U000027F6', + "Longleftarrow;": '\U000027F8', + "Longleftrightarrow;": '\U000027FA', + "Longrightarrow;": '\U000027F9', + "Lopf;": '\U0001D543', + "LowerLeftArrow;": '\U00002199', + "LowerRightArrow;": '\U00002198', + "Lscr;": '\U00002112', + "Lsh;": '\U000021B0', + "Lstrok;": '\U00000141', + "Lt;": '\U0000226A', + "Map;": '\U00002905', + "Mcy;": '\U0000041C', + "MediumSpace;": '\U0000205F', + "Mellintrf;": '\U00002133', + "Mfr;": '\U0001D510', + "MinusPlus;": '\U00002213', + "Mopf;": '\U0001D544', + "Mscr;": '\U00002133', + "Mu;": '\U0000039C', + "NJcy;": '\U0000040A', + "Nacute;": '\U00000143', + "Ncaron;": '\U00000147', + "Ncedil;": '\U00000145', + "Ncy;": '\U0000041D', + "NegativeMediumSpace;": '\U0000200B', + "NegativeThickSpace;": '\U0000200B', + "NegativeThinSpace;": '\U0000200B', + "NegativeVeryThinSpace;": '\U0000200B', + "NestedGreaterGreater;": '\U0000226B', + "NestedLessLess;": '\U0000226A', + "NewLine;": '\U0000000A', + "Nfr;": '\U0001D511', + "NoBreak;": '\U00002060', + "NonBreakingSpace;": '\U000000A0', + "Nopf;": '\U00002115', + "Not;": '\U00002AEC', + "NotCongruent;": '\U00002262', + "NotCupCap;": '\U0000226D', + "NotDoubleVerticalBar;": '\U00002226', + "NotElement;": '\U00002209', + "NotEqual;": '\U00002260', + "NotExists;": '\U00002204', + "NotGreater;": '\U0000226F', + "NotGreaterEqual;": '\U00002271', + "NotGreaterLess;": '\U00002279', + "NotGreaterTilde;": '\U00002275', + "NotLeftTriangle;": '\U000022EA', + "NotLeftTriangleEqual;": '\U000022EC', + "NotLess;": '\U0000226E', + "NotLessEqual;": '\U00002270', + "NotLessGreater;": '\U00002278', + "NotLessTilde;": '\U00002274', + "NotPrecedes;": '\U00002280', + "NotPrecedesSlantEqual;": '\U000022E0', + "NotReverseElement;": '\U0000220C', + "NotRightTriangle;": '\U000022EB', + "NotRightTriangleEqual;": '\U000022ED', + "NotSquareSubsetEqual;": '\U000022E2', + "NotSquareSupersetEqual;": '\U000022E3', + "NotSubsetEqual;": '\U00002288', + "NotSucceeds;": '\U00002281', + "NotSucceedsSlantEqual;": '\U000022E1', + "NotSupersetEqual;": '\U00002289', + "NotTilde;": '\U00002241', + "NotTildeEqual;": '\U00002244', + "NotTildeFullEqual;": '\U00002247', + "NotTildeTilde;": '\U00002249', + "NotVerticalBar;": '\U00002224', + "Nscr;": '\U0001D4A9', + "Ntilde;": '\U000000D1', + "Nu;": '\U0000039D', + "OElig;": '\U00000152', + "Oacute;": '\U000000D3', + "Ocirc;": '\U000000D4', + "Ocy;": '\U0000041E', + "Odblac;": '\U00000150', + "Ofr;": '\U0001D512', + "Ograve;": '\U000000D2', + "Omacr;": '\U0000014C', + "Omega;": '\U000003A9', + "Omicron;": '\U0000039F', + "Oopf;": '\U0001D546', + "OpenCurlyDoubleQuote;": '\U0000201C', + "OpenCurlyQuote;": '\U00002018', + "Or;": '\U00002A54', + "Oscr;": '\U0001D4AA', + "Oslash;": '\U000000D8', + "Otilde;": '\U000000D5', + "Otimes;": '\U00002A37', + "Ouml;": '\U000000D6', + "OverBar;": '\U0000203E', + "OverBrace;": '\U000023DE', + "OverBracket;": '\U000023B4', + "OverParenthesis;": '\U000023DC', + "PartialD;": '\U00002202', + "Pcy;": '\U0000041F', + "Pfr;": '\U0001D513', + "Phi;": '\U000003A6', + "Pi;": '\U000003A0', + "PlusMinus;": '\U000000B1', + "Poincareplane;": '\U0000210C', + "Popf;": '\U00002119', + "Pr;": '\U00002ABB', + "Precedes;": '\U0000227A', + "PrecedesEqual;": '\U00002AAF', + "PrecedesSlantEqual;": '\U0000227C', + "PrecedesTilde;": '\U0000227E', + "Prime;": '\U00002033', + "Product;": '\U0000220F', + "Proportion;": '\U00002237', + "Proportional;": '\U0000221D', + "Pscr;": '\U0001D4AB', + "Psi;": '\U000003A8', + "QUOT;": '\U00000022', + "Qfr;": '\U0001D514', + "Qopf;": '\U0000211A', + "Qscr;": '\U0001D4AC', + "RBarr;": '\U00002910', + "REG;": '\U000000AE', + "Racute;": '\U00000154', + "Rang;": '\U000027EB', + "Rarr;": '\U000021A0', + "Rarrtl;": '\U00002916', + "Rcaron;": '\U00000158', + "Rcedil;": '\U00000156', + "Rcy;": '\U00000420', + "Re;": '\U0000211C', + "ReverseElement;": '\U0000220B', + "ReverseEquilibrium;": '\U000021CB', + "ReverseUpEquilibrium;": '\U0000296F', + "Rfr;": '\U0000211C', + "Rho;": '\U000003A1', + "RightAngleBracket;": '\U000027E9', + "RightArrow;": '\U00002192', + "RightArrowBar;": '\U000021E5', + "RightArrowLeftArrow;": '\U000021C4', + "RightCeiling;": '\U00002309', + "RightDoubleBracket;": '\U000027E7', + "RightDownTeeVector;": '\U0000295D', + "RightDownVector;": '\U000021C2', + "RightDownVectorBar;": '\U00002955', + "RightFloor;": '\U0000230B', + "RightTee;": '\U000022A2', + "RightTeeArrow;": '\U000021A6', + "RightTeeVector;": '\U0000295B', + "RightTriangle;": '\U000022B3', + "RightTriangleBar;": '\U000029D0', + "RightTriangleEqual;": '\U000022B5', + "RightUpDownVector;": '\U0000294F', + "RightUpTeeVector;": '\U0000295C', + "RightUpVector;": '\U000021BE', + "RightUpVectorBar;": '\U00002954', + "RightVector;": '\U000021C0', + "RightVectorBar;": '\U00002953', + "Rightarrow;": '\U000021D2', + "Ropf;": '\U0000211D', + "RoundImplies;": '\U00002970', + "Rrightarrow;": '\U000021DB', + "Rscr;": '\U0000211B', + "Rsh;": '\U000021B1', + "RuleDelayed;": '\U000029F4', + "SHCHcy;": '\U00000429', + "SHcy;": '\U00000428', + "SOFTcy;": '\U0000042C', + "Sacute;": '\U0000015A', + "Sc;": '\U00002ABC', + "Scaron;": '\U00000160', + "Scedil;": '\U0000015E', + "Scirc;": '\U0000015C', + "Scy;": '\U00000421', + "Sfr;": '\U0001D516', + "ShortDownArrow;": '\U00002193', + "ShortLeftArrow;": '\U00002190', + "ShortRightArrow;": '\U00002192', + "ShortUpArrow;": '\U00002191', + "Sigma;": '\U000003A3', + "SmallCircle;": '\U00002218', + "Sopf;": '\U0001D54A', + "Sqrt;": '\U0000221A', + "Square;": '\U000025A1', + "SquareIntersection;": '\U00002293', + "SquareSubset;": '\U0000228F', + "SquareSubsetEqual;": '\U00002291', + "SquareSuperset;": '\U00002290', + "SquareSupersetEqual;": '\U00002292', + "SquareUnion;": '\U00002294', + "Sscr;": '\U0001D4AE', + "Star;": '\U000022C6', + "Sub;": '\U000022D0', + "Subset;": '\U000022D0', + "SubsetEqual;": '\U00002286', + "Succeeds;": '\U0000227B', + "SucceedsEqual;": '\U00002AB0', + "SucceedsSlantEqual;": '\U0000227D', + "SucceedsTilde;": '\U0000227F', + "SuchThat;": '\U0000220B', + "Sum;": '\U00002211', + "Sup;": '\U000022D1', + "Superset;": '\U00002283', + "SupersetEqual;": '\U00002287', + "Supset;": '\U000022D1', + "THORN;": '\U000000DE', + "TRADE;": '\U00002122', + "TSHcy;": '\U0000040B', + "TScy;": '\U00000426', + "Tab;": '\U00000009', + "Tau;": '\U000003A4', + "Tcaron;": '\U00000164', + "Tcedil;": '\U00000162', + "Tcy;": '\U00000422', + "Tfr;": '\U0001D517', + "Therefore;": '\U00002234', + "Theta;": '\U00000398', + "ThinSpace;": '\U00002009', + "Tilde;": '\U0000223C', + "TildeEqual;": '\U00002243', + "TildeFullEqual;": '\U00002245', + "TildeTilde;": '\U00002248', + "Topf;": '\U0001D54B', + "TripleDot;": '\U000020DB', + "Tscr;": '\U0001D4AF', + "Tstrok;": '\U00000166', + "Uacute;": '\U000000DA', + "Uarr;": '\U0000219F', + "Uarrocir;": '\U00002949', + "Ubrcy;": '\U0000040E', + "Ubreve;": '\U0000016C', + "Ucirc;": '\U000000DB', + "Ucy;": '\U00000423', + "Udblac;": '\U00000170', + "Ufr;": '\U0001D518', + "Ugrave;": '\U000000D9', + "Umacr;": '\U0000016A', + "UnderBar;": '\U0000005F', + "UnderBrace;": '\U000023DF', + "UnderBracket;": '\U000023B5', + "UnderParenthesis;": '\U000023DD', + "Union;": '\U000022C3', + "UnionPlus;": '\U0000228E', + "Uogon;": '\U00000172', + "Uopf;": '\U0001D54C', + "UpArrow;": '\U00002191', + "UpArrowBar;": '\U00002912', + "UpArrowDownArrow;": '\U000021C5', + "UpDownArrow;": '\U00002195', + "UpEquilibrium;": '\U0000296E', + "UpTee;": '\U000022A5', + "UpTeeArrow;": '\U000021A5', + "Uparrow;": '\U000021D1', + "Updownarrow;": '\U000021D5', + "UpperLeftArrow;": '\U00002196', + "UpperRightArrow;": '\U00002197', + "Upsi;": '\U000003D2', + "Upsilon;": '\U000003A5', + "Uring;": '\U0000016E', + "Uscr;": '\U0001D4B0', + "Utilde;": '\U00000168', + "Uuml;": '\U000000DC', + "VDash;": '\U000022AB', + "Vbar;": '\U00002AEB', + "Vcy;": '\U00000412', + "Vdash;": '\U000022A9', + "Vdashl;": '\U00002AE6', + "Vee;": '\U000022C1', + "Verbar;": '\U00002016', + "Vert;": '\U00002016', + "VerticalBar;": '\U00002223', + "VerticalLine;": '\U0000007C', + "VerticalSeparator;": '\U00002758', + "VerticalTilde;": '\U00002240', + "VeryThinSpace;": '\U0000200A', + "Vfr;": '\U0001D519', + "Vopf;": '\U0001D54D', + "Vscr;": '\U0001D4B1', + "Vvdash;": '\U000022AA', + "Wcirc;": '\U00000174', + "Wedge;": '\U000022C0', + "Wfr;": '\U0001D51A', + "Wopf;": '\U0001D54E', + "Wscr;": '\U0001D4B2', + "Xfr;": '\U0001D51B', + "Xi;": '\U0000039E', + "Xopf;": '\U0001D54F', + "Xscr;": '\U0001D4B3', + "YAcy;": '\U0000042F', + "YIcy;": '\U00000407', + "YUcy;": '\U0000042E', + "Yacute;": '\U000000DD', + "Ycirc;": '\U00000176', + "Ycy;": '\U0000042B', + "Yfr;": '\U0001D51C', + "Yopf;": '\U0001D550', + "Yscr;": '\U0001D4B4', + "Yuml;": '\U00000178', + "ZHcy;": '\U00000416', + "Zacute;": '\U00000179', + "Zcaron;": '\U0000017D', + "Zcy;": '\U00000417', + "Zdot;": '\U0000017B', + "ZeroWidthSpace;": '\U0000200B', + "Zeta;": '\U00000396', + "Zfr;": '\U00002128', + "Zopf;": '\U00002124', + "Zscr;": '\U0001D4B5', + "aacute;": '\U000000E1', + "abreve;": '\U00000103', + "ac;": '\U0000223E', + "acd;": '\U0000223F', + "acirc;": '\U000000E2', + "acute;": '\U000000B4', + "acy;": '\U00000430', + "aelig;": '\U000000E6', + "af;": '\U00002061', + "afr;": '\U0001D51E', + "agrave;": '\U000000E0', + "alefsym;": '\U00002135', + "aleph;": '\U00002135', + "alpha;": '\U000003B1', + "amacr;": '\U00000101', + "amalg;": '\U00002A3F', + "amp;": '\U00000026', + "and;": '\U00002227', + "andand;": '\U00002A55', + "andd;": '\U00002A5C', + "andslope;": '\U00002A58', + "andv;": '\U00002A5A', + "ang;": '\U00002220', + "ange;": '\U000029A4', + "angle;": '\U00002220', + "angmsd;": '\U00002221', + "angmsdaa;": '\U000029A8', + "angmsdab;": '\U000029A9', + "angmsdac;": '\U000029AA', + "angmsdad;": '\U000029AB', + "angmsdae;": '\U000029AC', + "angmsdaf;": '\U000029AD', + "angmsdag;": '\U000029AE', + "angmsdah;": '\U000029AF', + "angrt;": '\U0000221F', + "angrtvb;": '\U000022BE', + "angrtvbd;": '\U0000299D', + "angsph;": '\U00002222', + "angst;": '\U000000C5', + "angzarr;": '\U0000237C', + "aogon;": '\U00000105', + "aopf;": '\U0001D552', + "ap;": '\U00002248', + "apE;": '\U00002A70', + "apacir;": '\U00002A6F', + "ape;": '\U0000224A', + "apid;": '\U0000224B', + "apos;": '\U00000027', + "approx;": '\U00002248', + "approxeq;": '\U0000224A', + "aring;": '\U000000E5', + "ascr;": '\U0001D4B6', + "ast;": '\U0000002A', + "asymp;": '\U00002248', + "asympeq;": '\U0000224D', + "atilde;": '\U000000E3', + "auml;": '\U000000E4', + "awconint;": '\U00002233', + "awint;": '\U00002A11', + "bNot;": '\U00002AED', + "backcong;": '\U0000224C', + "backepsilon;": '\U000003F6', + "backprime;": '\U00002035', + "backsim;": '\U0000223D', + "backsimeq;": '\U000022CD', + "barvee;": '\U000022BD', + "barwed;": '\U00002305', + "barwedge;": '\U00002305', + "bbrk;": '\U000023B5', + "bbrktbrk;": '\U000023B6', + "bcong;": '\U0000224C', + "bcy;": '\U00000431', + "bdquo;": '\U0000201E', + "becaus;": '\U00002235', + "because;": '\U00002235', + "bemptyv;": '\U000029B0', + "bepsi;": '\U000003F6', + "bernou;": '\U0000212C', + "beta;": '\U000003B2', + "beth;": '\U00002136', + "between;": '\U0000226C', + "bfr;": '\U0001D51F', + "bigcap;": '\U000022C2', + "bigcirc;": '\U000025EF', + "bigcup;": '\U000022C3', + "bigodot;": '\U00002A00', + "bigoplus;": '\U00002A01', + "bigotimes;": '\U00002A02', + "bigsqcup;": '\U00002A06', + "bigstar;": '\U00002605', + "bigtriangledown;": '\U000025BD', + "bigtriangleup;": '\U000025B3', + "biguplus;": '\U00002A04', + "bigvee;": '\U000022C1', + "bigwedge;": '\U000022C0', + "bkarow;": '\U0000290D', + "blacklozenge;": '\U000029EB', + "blacksquare;": '\U000025AA', + "blacktriangle;": '\U000025B4', + "blacktriangledown;": '\U000025BE', + "blacktriangleleft;": '\U000025C2', + "blacktriangleright;": '\U000025B8', + "blank;": '\U00002423', + "blk12;": '\U00002592', + "blk14;": '\U00002591', + "blk34;": '\U00002593', + "block;": '\U00002588', + "bnot;": '\U00002310', + "bopf;": '\U0001D553', + "bot;": '\U000022A5', + "bottom;": '\U000022A5', + "bowtie;": '\U000022C8', + "boxDL;": '\U00002557', + "boxDR;": '\U00002554', + "boxDl;": '\U00002556', + "boxDr;": '\U00002553', + "boxH;": '\U00002550', + "boxHD;": '\U00002566', + "boxHU;": '\U00002569', + "boxHd;": '\U00002564', + "boxHu;": '\U00002567', + "boxUL;": '\U0000255D', + "boxUR;": '\U0000255A', + "boxUl;": '\U0000255C', + "boxUr;": '\U00002559', + "boxV;": '\U00002551', + "boxVH;": '\U0000256C', + "boxVL;": '\U00002563', + "boxVR;": '\U00002560', + "boxVh;": '\U0000256B', + "boxVl;": '\U00002562', + "boxVr;": '\U0000255F', + "boxbox;": '\U000029C9', + "boxdL;": '\U00002555', + "boxdR;": '\U00002552', + "boxdl;": '\U00002510', + "boxdr;": '\U0000250C', + "boxh;": '\U00002500', + "boxhD;": '\U00002565', + "boxhU;": '\U00002568', + "boxhd;": '\U0000252C', + "boxhu;": '\U00002534', + "boxminus;": '\U0000229F', + "boxplus;": '\U0000229E', + "boxtimes;": '\U000022A0', + "boxuL;": '\U0000255B', + "boxuR;": '\U00002558', + "boxul;": '\U00002518', + "boxur;": '\U00002514', + "boxv;": '\U00002502', + "boxvH;": '\U0000256A', + "boxvL;": '\U00002561', + "boxvR;": '\U0000255E', + "boxvh;": '\U0000253C', + "boxvl;": '\U00002524', + "boxvr;": '\U0000251C', + "bprime;": '\U00002035', + "breve;": '\U000002D8', + "brvbar;": '\U000000A6', + "bscr;": '\U0001D4B7', + "bsemi;": '\U0000204F', + "bsim;": '\U0000223D', + "bsime;": '\U000022CD', + "bsol;": '\U0000005C', + "bsolb;": '\U000029C5', + "bsolhsub;": '\U000027C8', + "bull;": '\U00002022', + "bullet;": '\U00002022', + "bump;": '\U0000224E', + "bumpE;": '\U00002AAE', + "bumpe;": '\U0000224F', + "bumpeq;": '\U0000224F', + "cacute;": '\U00000107', + "cap;": '\U00002229', + "capand;": '\U00002A44', + "capbrcup;": '\U00002A49', + "capcap;": '\U00002A4B', + "capcup;": '\U00002A47', + "capdot;": '\U00002A40', + "caret;": '\U00002041', + "caron;": '\U000002C7', + "ccaps;": '\U00002A4D', + "ccaron;": '\U0000010D', + "ccedil;": '\U000000E7', + "ccirc;": '\U00000109', + "ccups;": '\U00002A4C', + "ccupssm;": '\U00002A50', + "cdot;": '\U0000010B', + "cedil;": '\U000000B8', + "cemptyv;": '\U000029B2', + "cent;": '\U000000A2', + "centerdot;": '\U000000B7', + "cfr;": '\U0001D520', + "chcy;": '\U00000447', + "check;": '\U00002713', + "checkmark;": '\U00002713', + "chi;": '\U000003C7', + "cir;": '\U000025CB', + "cirE;": '\U000029C3', + "circ;": '\U000002C6', + "circeq;": '\U00002257', + "circlearrowleft;": '\U000021BA', + "circlearrowright;": '\U000021BB', + "circledR;": '\U000000AE', + "circledS;": '\U000024C8', + "circledast;": '\U0000229B', + "circledcirc;": '\U0000229A', + "circleddash;": '\U0000229D', + "cire;": '\U00002257', + "cirfnint;": '\U00002A10', + "cirmid;": '\U00002AEF', + "cirscir;": '\U000029C2', + "clubs;": '\U00002663', + "clubsuit;": '\U00002663', + "colon;": '\U0000003A', + "colone;": '\U00002254', + "coloneq;": '\U00002254', + "comma;": '\U0000002C', + "commat;": '\U00000040', + "comp;": '\U00002201', + "compfn;": '\U00002218', + "complement;": '\U00002201', + "complexes;": '\U00002102', + "cong;": '\U00002245', + "congdot;": '\U00002A6D', + "conint;": '\U0000222E', + "copf;": '\U0001D554', + "coprod;": '\U00002210', + "copy;": '\U000000A9', + "copysr;": '\U00002117', + "crarr;": '\U000021B5', + "cross;": '\U00002717', + "cscr;": '\U0001D4B8', + "csub;": '\U00002ACF', + "csube;": '\U00002AD1', + "csup;": '\U00002AD0', + "csupe;": '\U00002AD2', + "ctdot;": '\U000022EF', + "cudarrl;": '\U00002938', + "cudarrr;": '\U00002935', + "cuepr;": '\U000022DE', + "cuesc;": '\U000022DF', + "cularr;": '\U000021B6', + "cularrp;": '\U0000293D', + "cup;": '\U0000222A', + "cupbrcap;": '\U00002A48', + "cupcap;": '\U00002A46', + "cupcup;": '\U00002A4A', + "cupdot;": '\U0000228D', + "cupor;": '\U00002A45', + "curarr;": '\U000021B7', + "curarrm;": '\U0000293C', + "curlyeqprec;": '\U000022DE', + "curlyeqsucc;": '\U000022DF', + "curlyvee;": '\U000022CE', + "curlywedge;": '\U000022CF', + "curren;": '\U000000A4', + "curvearrowleft;": '\U000021B6', + "curvearrowright;": '\U000021B7', + "cuvee;": '\U000022CE', + "cuwed;": '\U000022CF', + "cwconint;": '\U00002232', + "cwint;": '\U00002231', + "cylcty;": '\U0000232D', + "dArr;": '\U000021D3', + "dHar;": '\U00002965', + "dagger;": '\U00002020', + "daleth;": '\U00002138', + "darr;": '\U00002193', + "dash;": '\U00002010', + "dashv;": '\U000022A3', + "dbkarow;": '\U0000290F', + "dblac;": '\U000002DD', + "dcaron;": '\U0000010F', + "dcy;": '\U00000434', + "dd;": '\U00002146', + "ddagger;": '\U00002021', + "ddarr;": '\U000021CA', + "ddotseq;": '\U00002A77', + "deg;": '\U000000B0', + "delta;": '\U000003B4', + "demptyv;": '\U000029B1', + "dfisht;": '\U0000297F', + "dfr;": '\U0001D521', + "dharl;": '\U000021C3', + "dharr;": '\U000021C2', + "diam;": '\U000022C4', + "diamond;": '\U000022C4', + "diamondsuit;": '\U00002666', + "diams;": '\U00002666', + "die;": '\U000000A8', + "digamma;": '\U000003DD', + "disin;": '\U000022F2', + "div;": '\U000000F7', + "divide;": '\U000000F7', + "divideontimes;": '\U000022C7', + "divonx;": '\U000022C7', + "djcy;": '\U00000452', + "dlcorn;": '\U0000231E', + "dlcrop;": '\U0000230D', + "dollar;": '\U00000024', + "dopf;": '\U0001D555', + "dot;": '\U000002D9', + "doteq;": '\U00002250', + "doteqdot;": '\U00002251', + "dotminus;": '\U00002238', + "dotplus;": '\U00002214', + "dotsquare;": '\U000022A1', + "doublebarwedge;": '\U00002306', + "downarrow;": '\U00002193', + "downdownarrows;": '\U000021CA', + "downharpoonleft;": '\U000021C3', + "downharpoonright;": '\U000021C2', + "drbkarow;": '\U00002910', + "drcorn;": '\U0000231F', + "drcrop;": '\U0000230C', + "dscr;": '\U0001D4B9', + "dscy;": '\U00000455', + "dsol;": '\U000029F6', + "dstrok;": '\U00000111', + "dtdot;": '\U000022F1', + "dtri;": '\U000025BF', + "dtrif;": '\U000025BE', + "duarr;": '\U000021F5', + "duhar;": '\U0000296F', + "dwangle;": '\U000029A6', + "dzcy;": '\U0000045F', + "dzigrarr;": '\U000027FF', + "eDDot;": '\U00002A77', + "eDot;": '\U00002251', + "eacute;": '\U000000E9', + "easter;": '\U00002A6E', + "ecaron;": '\U0000011B', + "ecir;": '\U00002256', + "ecirc;": '\U000000EA', + "ecolon;": '\U00002255', + "ecy;": '\U0000044D', + "edot;": '\U00000117', + "ee;": '\U00002147', + "efDot;": '\U00002252', + "efr;": '\U0001D522', + "eg;": '\U00002A9A', + "egrave;": '\U000000E8', + "egs;": '\U00002A96', + "egsdot;": '\U00002A98', + "el;": '\U00002A99', + "elinters;": '\U000023E7', + "ell;": '\U00002113', + "els;": '\U00002A95', + "elsdot;": '\U00002A97', + "emacr;": '\U00000113', + "empty;": '\U00002205', + "emptyset;": '\U00002205', + "emptyv;": '\U00002205', + "emsp;": '\U00002003', + "emsp13;": '\U00002004', + "emsp14;": '\U00002005', + "eng;": '\U0000014B', + "ensp;": '\U00002002', + "eogon;": '\U00000119', + "eopf;": '\U0001D556', + "epar;": '\U000022D5', + "eparsl;": '\U000029E3', + "eplus;": '\U00002A71', + "epsi;": '\U000003B5', + "epsilon;": '\U000003B5', + "epsiv;": '\U000003F5', + "eqcirc;": '\U00002256', + "eqcolon;": '\U00002255', + "eqsim;": '\U00002242', + "eqslantgtr;": '\U00002A96', + "eqslantless;": '\U00002A95', + "equals;": '\U0000003D', + "equest;": '\U0000225F', + "equiv;": '\U00002261', + "equivDD;": '\U00002A78', + "eqvparsl;": '\U000029E5', + "erDot;": '\U00002253', + "erarr;": '\U00002971', + "escr;": '\U0000212F', + "esdot;": '\U00002250', + "esim;": '\U00002242', + "eta;": '\U000003B7', + "eth;": '\U000000F0', + "euml;": '\U000000EB', + "euro;": '\U000020AC', + "excl;": '\U00000021', + "exist;": '\U00002203', + "expectation;": '\U00002130', + "exponentiale;": '\U00002147', + "fallingdotseq;": '\U00002252', + "fcy;": '\U00000444', + "female;": '\U00002640', + "ffilig;": '\U0000FB03', + "fflig;": '\U0000FB00', + "ffllig;": '\U0000FB04', + "ffr;": '\U0001D523', + "filig;": '\U0000FB01', + "flat;": '\U0000266D', + "fllig;": '\U0000FB02', + "fltns;": '\U000025B1', + "fnof;": '\U00000192', + "fopf;": '\U0001D557', + "forall;": '\U00002200', + "fork;": '\U000022D4', + "forkv;": '\U00002AD9', + "fpartint;": '\U00002A0D', + "frac12;": '\U000000BD', + "frac13;": '\U00002153', + "frac14;": '\U000000BC', + "frac15;": '\U00002155', + "frac16;": '\U00002159', + "frac18;": '\U0000215B', + "frac23;": '\U00002154', + "frac25;": '\U00002156', + "frac34;": '\U000000BE', + "frac35;": '\U00002157', + "frac38;": '\U0000215C', + "frac45;": '\U00002158', + "frac56;": '\U0000215A', + "frac58;": '\U0000215D', + "frac78;": '\U0000215E', + "frasl;": '\U00002044', + "frown;": '\U00002322', + "fscr;": '\U0001D4BB', + "gE;": '\U00002267', + "gEl;": '\U00002A8C', + "gacute;": '\U000001F5', + "gamma;": '\U000003B3', + "gammad;": '\U000003DD', + "gap;": '\U00002A86', + "gbreve;": '\U0000011F', + "gcirc;": '\U0000011D', + "gcy;": '\U00000433', + "gdot;": '\U00000121', + "ge;": '\U00002265', + "gel;": '\U000022DB', + "geq;": '\U00002265', + "geqq;": '\U00002267', + "geqslant;": '\U00002A7E', + "ges;": '\U00002A7E', + "gescc;": '\U00002AA9', + "gesdot;": '\U00002A80', + "gesdoto;": '\U00002A82', + "gesdotol;": '\U00002A84', + "gesles;": '\U00002A94', + "gfr;": '\U0001D524', + "gg;": '\U0000226B', + "ggg;": '\U000022D9', + "gimel;": '\U00002137', + "gjcy;": '\U00000453', + "gl;": '\U00002277', + "glE;": '\U00002A92', + "gla;": '\U00002AA5', + "glj;": '\U00002AA4', + "gnE;": '\U00002269', + "gnap;": '\U00002A8A', + "gnapprox;": '\U00002A8A', + "gne;": '\U00002A88', + "gneq;": '\U00002A88', + "gneqq;": '\U00002269', + "gnsim;": '\U000022E7', + "gopf;": '\U0001D558', + "grave;": '\U00000060', + "gscr;": '\U0000210A', + "gsim;": '\U00002273', + "gsime;": '\U00002A8E', + "gsiml;": '\U00002A90', + "gt;": '\U0000003E', + "gtcc;": '\U00002AA7', + "gtcir;": '\U00002A7A', + "gtdot;": '\U000022D7', + "gtlPar;": '\U00002995', + "gtquest;": '\U00002A7C', + "gtrapprox;": '\U00002A86', + "gtrarr;": '\U00002978', + "gtrdot;": '\U000022D7', + "gtreqless;": '\U000022DB', + "gtreqqless;": '\U00002A8C', + "gtrless;": '\U00002277', + "gtrsim;": '\U00002273', + "hArr;": '\U000021D4', + "hairsp;": '\U0000200A', + "half;": '\U000000BD', + "hamilt;": '\U0000210B', + "hardcy;": '\U0000044A', + "harr;": '\U00002194', + "harrcir;": '\U00002948', + "harrw;": '\U000021AD', + "hbar;": '\U0000210F', + "hcirc;": '\U00000125', + "hearts;": '\U00002665', + "heartsuit;": '\U00002665', + "hellip;": '\U00002026', + "hercon;": '\U000022B9', + "hfr;": '\U0001D525', + "hksearow;": '\U00002925', + "hkswarow;": '\U00002926', + "hoarr;": '\U000021FF', + "homtht;": '\U0000223B', + "hookleftarrow;": '\U000021A9', + "hookrightarrow;": '\U000021AA', + "hopf;": '\U0001D559', + "horbar;": '\U00002015', + "hscr;": '\U0001D4BD', + "hslash;": '\U0000210F', + "hstrok;": '\U00000127', + "hybull;": '\U00002043', + "hyphen;": '\U00002010', + "iacute;": '\U000000ED', + "ic;": '\U00002063', + "icirc;": '\U000000EE', + "icy;": '\U00000438', + "iecy;": '\U00000435', + "iexcl;": '\U000000A1', + "iff;": '\U000021D4', + "ifr;": '\U0001D526', + "igrave;": '\U000000EC', + "ii;": '\U00002148', + "iiiint;": '\U00002A0C', + "iiint;": '\U0000222D', + "iinfin;": '\U000029DC', + "iiota;": '\U00002129', + "ijlig;": '\U00000133', + "imacr;": '\U0000012B', + "image;": '\U00002111', + "imagline;": '\U00002110', + "imagpart;": '\U00002111', + "imath;": '\U00000131', + "imof;": '\U000022B7', + "imped;": '\U000001B5', + "in;": '\U00002208', + "incare;": '\U00002105', + "infin;": '\U0000221E', + "infintie;": '\U000029DD', + "inodot;": '\U00000131', + "int;": '\U0000222B', + "intcal;": '\U000022BA', + "integers;": '\U00002124', + "intercal;": '\U000022BA', + "intlarhk;": '\U00002A17', + "intprod;": '\U00002A3C', + "iocy;": '\U00000451', + "iogon;": '\U0000012F', + "iopf;": '\U0001D55A', + "iota;": '\U000003B9', + "iprod;": '\U00002A3C', + "iquest;": '\U000000BF', + "iscr;": '\U0001D4BE', + "isin;": '\U00002208', + "isinE;": '\U000022F9', + "isindot;": '\U000022F5', + "isins;": '\U000022F4', + "isinsv;": '\U000022F3', + "isinv;": '\U00002208', + "it;": '\U00002062', + "itilde;": '\U00000129', + "iukcy;": '\U00000456', + "iuml;": '\U000000EF', + "jcirc;": '\U00000135', + "jcy;": '\U00000439', + "jfr;": '\U0001D527', + "jmath;": '\U00000237', + "jopf;": '\U0001D55B', + "jscr;": '\U0001D4BF', + "jsercy;": '\U00000458', + "jukcy;": '\U00000454', + "kappa;": '\U000003BA', + "kappav;": '\U000003F0', + "kcedil;": '\U00000137', + "kcy;": '\U0000043A', + "kfr;": '\U0001D528', + "kgreen;": '\U00000138', + "khcy;": '\U00000445', + "kjcy;": '\U0000045C', + "kopf;": '\U0001D55C', + "kscr;": '\U0001D4C0', + "lAarr;": '\U000021DA', + "lArr;": '\U000021D0', + "lAtail;": '\U0000291B', + "lBarr;": '\U0000290E', + "lE;": '\U00002266', + "lEg;": '\U00002A8B', + "lHar;": '\U00002962', + "lacute;": '\U0000013A', + "laemptyv;": '\U000029B4', + "lagran;": '\U00002112', + "lambda;": '\U000003BB', + "lang;": '\U000027E8', + "langd;": '\U00002991', + "langle;": '\U000027E8', + "lap;": '\U00002A85', + "laquo;": '\U000000AB', + "larr;": '\U00002190', + "larrb;": '\U000021E4', + "larrbfs;": '\U0000291F', + "larrfs;": '\U0000291D', + "larrhk;": '\U000021A9', + "larrlp;": '\U000021AB', + "larrpl;": '\U00002939', + "larrsim;": '\U00002973', + "larrtl;": '\U000021A2', + "lat;": '\U00002AAB', + "latail;": '\U00002919', + "late;": '\U00002AAD', + "lbarr;": '\U0000290C', + "lbbrk;": '\U00002772', + "lbrace;": '\U0000007B', + "lbrack;": '\U0000005B', + "lbrke;": '\U0000298B', + "lbrksld;": '\U0000298F', + "lbrkslu;": '\U0000298D', + "lcaron;": '\U0000013E', + "lcedil;": '\U0000013C', + "lceil;": '\U00002308', + "lcub;": '\U0000007B', + "lcy;": '\U0000043B', + "ldca;": '\U00002936', + "ldquo;": '\U0000201C', + "ldquor;": '\U0000201E', + "ldrdhar;": '\U00002967', + "ldrushar;": '\U0000294B', + "ldsh;": '\U000021B2', + "le;": '\U00002264', + "leftarrow;": '\U00002190', + "leftarrowtail;": '\U000021A2', + "leftharpoondown;": '\U000021BD', + "leftharpoonup;": '\U000021BC', + "leftleftarrows;": '\U000021C7', + "leftrightarrow;": '\U00002194', + "leftrightarrows;": '\U000021C6', + "leftrightharpoons;": '\U000021CB', + "leftrightsquigarrow;": '\U000021AD', + "leftthreetimes;": '\U000022CB', + "leg;": '\U000022DA', + "leq;": '\U00002264', + "leqq;": '\U00002266', + "leqslant;": '\U00002A7D', + "les;": '\U00002A7D', + "lescc;": '\U00002AA8', + "lesdot;": '\U00002A7F', + "lesdoto;": '\U00002A81', + "lesdotor;": '\U00002A83', + "lesges;": '\U00002A93', + "lessapprox;": '\U00002A85', + "lessdot;": '\U000022D6', + "lesseqgtr;": '\U000022DA', + "lesseqqgtr;": '\U00002A8B', + "lessgtr;": '\U00002276', + "lesssim;": '\U00002272', + "lfisht;": '\U0000297C', + "lfloor;": '\U0000230A', + "lfr;": '\U0001D529', + "lg;": '\U00002276', + "lgE;": '\U00002A91', + "lhard;": '\U000021BD', + "lharu;": '\U000021BC', + "lharul;": '\U0000296A', + "lhblk;": '\U00002584', + "ljcy;": '\U00000459', + "ll;": '\U0000226A', + "llarr;": '\U000021C7', + "llcorner;": '\U0000231E', + "llhard;": '\U0000296B', + "lltri;": '\U000025FA', + "lmidot;": '\U00000140', + "lmoust;": '\U000023B0', + "lmoustache;": '\U000023B0', + "lnE;": '\U00002268', + "lnap;": '\U00002A89', + "lnapprox;": '\U00002A89', + "lne;": '\U00002A87', + "lneq;": '\U00002A87', + "lneqq;": '\U00002268', + "lnsim;": '\U000022E6', + "loang;": '\U000027EC', + "loarr;": '\U000021FD', + "lobrk;": '\U000027E6', + "longleftarrow;": '\U000027F5', + "longleftrightarrow;": '\U000027F7', + "longmapsto;": '\U000027FC', + "longrightarrow;": '\U000027F6', + "looparrowleft;": '\U000021AB', + "looparrowright;": '\U000021AC', + "lopar;": '\U00002985', + "lopf;": '\U0001D55D', + "loplus;": '\U00002A2D', + "lotimes;": '\U00002A34', + "lowast;": '\U00002217', + "lowbar;": '\U0000005F', + "loz;": '\U000025CA', + "lozenge;": '\U000025CA', + "lozf;": '\U000029EB', + "lpar;": '\U00000028', + "lparlt;": '\U00002993', + "lrarr;": '\U000021C6', + "lrcorner;": '\U0000231F', + "lrhar;": '\U000021CB', + "lrhard;": '\U0000296D', + "lrm;": '\U0000200E', + "lrtri;": '\U000022BF', + "lsaquo;": '\U00002039', + "lscr;": '\U0001D4C1', + "lsh;": '\U000021B0', + "lsim;": '\U00002272', + "lsime;": '\U00002A8D', + "lsimg;": '\U00002A8F', + "lsqb;": '\U0000005B', + "lsquo;": '\U00002018', + "lsquor;": '\U0000201A', + "lstrok;": '\U00000142', + "lt;": '\U0000003C', + "ltcc;": '\U00002AA6', + "ltcir;": '\U00002A79', + "ltdot;": '\U000022D6', + "lthree;": '\U000022CB', + "ltimes;": '\U000022C9', + "ltlarr;": '\U00002976', + "ltquest;": '\U00002A7B', + "ltrPar;": '\U00002996', + "ltri;": '\U000025C3', + "ltrie;": '\U000022B4', + "ltrif;": '\U000025C2', + "lurdshar;": '\U0000294A', + "luruhar;": '\U00002966', + "mDDot;": '\U0000223A', + "macr;": '\U000000AF', + "male;": '\U00002642', + "malt;": '\U00002720', + "maltese;": '\U00002720', + "map;": '\U000021A6', + "mapsto;": '\U000021A6', + "mapstodown;": '\U000021A7', + "mapstoleft;": '\U000021A4', + "mapstoup;": '\U000021A5', + "marker;": '\U000025AE', + "mcomma;": '\U00002A29', + "mcy;": '\U0000043C', + "mdash;": '\U00002014', + "measuredangle;": '\U00002221', + "mfr;": '\U0001D52A', + "mho;": '\U00002127', + "micro;": '\U000000B5', + "mid;": '\U00002223', + "midast;": '\U0000002A', + "midcir;": '\U00002AF0', + "middot;": '\U000000B7', + "minus;": '\U00002212', + "minusb;": '\U0000229F', + "minusd;": '\U00002238', + "minusdu;": '\U00002A2A', + "mlcp;": '\U00002ADB', + "mldr;": '\U00002026', + "mnplus;": '\U00002213', + "models;": '\U000022A7', + "mopf;": '\U0001D55E', + "mp;": '\U00002213', + "mscr;": '\U0001D4C2', + "mstpos;": '\U0000223E', + "mu;": '\U000003BC', + "multimap;": '\U000022B8', + "mumap;": '\U000022B8', + "nLeftarrow;": '\U000021CD', + "nLeftrightarrow;": '\U000021CE', + "nRightarrow;": '\U000021CF', + "nVDash;": '\U000022AF', + "nVdash;": '\U000022AE', + "nabla;": '\U00002207', + "nacute;": '\U00000144', + "nap;": '\U00002249', + "napos;": '\U00000149', + "napprox;": '\U00002249', + "natur;": '\U0000266E', + "natural;": '\U0000266E', + "naturals;": '\U00002115', + "nbsp;": '\U000000A0', + "ncap;": '\U00002A43', + "ncaron;": '\U00000148', + "ncedil;": '\U00000146', + "ncong;": '\U00002247', + "ncup;": '\U00002A42', + "ncy;": '\U0000043D', + "ndash;": '\U00002013', + "ne;": '\U00002260', + "neArr;": '\U000021D7', + "nearhk;": '\U00002924', + "nearr;": '\U00002197', + "nearrow;": '\U00002197', + "nequiv;": '\U00002262', + "nesear;": '\U00002928', + "nexist;": '\U00002204', + "nexists;": '\U00002204', + "nfr;": '\U0001D52B', + "nge;": '\U00002271', + "ngeq;": '\U00002271', + "ngsim;": '\U00002275', + "ngt;": '\U0000226F', + "ngtr;": '\U0000226F', + "nhArr;": '\U000021CE', + "nharr;": '\U000021AE', + "nhpar;": '\U00002AF2', + "ni;": '\U0000220B', + "nis;": '\U000022FC', + "nisd;": '\U000022FA', + "niv;": '\U0000220B', + "njcy;": '\U0000045A', + "nlArr;": '\U000021CD', + "nlarr;": '\U0000219A', + "nldr;": '\U00002025', + "nle;": '\U00002270', + "nleftarrow;": '\U0000219A', + "nleftrightarrow;": '\U000021AE', + "nleq;": '\U00002270', + "nless;": '\U0000226E', + "nlsim;": '\U00002274', + "nlt;": '\U0000226E', + "nltri;": '\U000022EA', + "nltrie;": '\U000022EC', + "nmid;": '\U00002224', + "nopf;": '\U0001D55F', + "not;": '\U000000AC', + "notin;": '\U00002209', + "notinva;": '\U00002209', + "notinvb;": '\U000022F7', + "notinvc;": '\U000022F6', + "notni;": '\U0000220C', + "notniva;": '\U0000220C', + "notnivb;": '\U000022FE', + "notnivc;": '\U000022FD', + "npar;": '\U00002226', + "nparallel;": '\U00002226', + "npolint;": '\U00002A14', + "npr;": '\U00002280', + "nprcue;": '\U000022E0', + "nprec;": '\U00002280', + "nrArr;": '\U000021CF', + "nrarr;": '\U0000219B', + "nrightarrow;": '\U0000219B', + "nrtri;": '\U000022EB', + "nrtrie;": '\U000022ED', + "nsc;": '\U00002281', + "nsccue;": '\U000022E1', + "nscr;": '\U0001D4C3', + "nshortmid;": '\U00002224', + "nshortparallel;": '\U00002226', + "nsim;": '\U00002241', + "nsime;": '\U00002244', + "nsimeq;": '\U00002244', + "nsmid;": '\U00002224', + "nspar;": '\U00002226', + "nsqsube;": '\U000022E2', + "nsqsupe;": '\U000022E3', + "nsub;": '\U00002284', + "nsube;": '\U00002288', + "nsubseteq;": '\U00002288', + "nsucc;": '\U00002281', + "nsup;": '\U00002285', + "nsupe;": '\U00002289', + "nsupseteq;": '\U00002289', + "ntgl;": '\U00002279', + "ntilde;": '\U000000F1', + "ntlg;": '\U00002278', + "ntriangleleft;": '\U000022EA', + "ntrianglelefteq;": '\U000022EC', + "ntriangleright;": '\U000022EB', + "ntrianglerighteq;": '\U000022ED', + "nu;": '\U000003BD', + "num;": '\U00000023', + "numero;": '\U00002116', + "numsp;": '\U00002007', + "nvDash;": '\U000022AD', + "nvHarr;": '\U00002904', + "nvdash;": '\U000022AC', + "nvinfin;": '\U000029DE', + "nvlArr;": '\U00002902', + "nvrArr;": '\U00002903', + "nwArr;": '\U000021D6', + "nwarhk;": '\U00002923', + "nwarr;": '\U00002196', + "nwarrow;": '\U00002196', + "nwnear;": '\U00002927', + "oS;": '\U000024C8', + "oacute;": '\U000000F3', + "oast;": '\U0000229B', + "ocir;": '\U0000229A', + "ocirc;": '\U000000F4', + "ocy;": '\U0000043E', + "odash;": '\U0000229D', + "odblac;": '\U00000151', + "odiv;": '\U00002A38', + "odot;": '\U00002299', + "odsold;": '\U000029BC', + "oelig;": '\U00000153', + "ofcir;": '\U000029BF', + "ofr;": '\U0001D52C', + "ogon;": '\U000002DB', + "ograve;": '\U000000F2', + "ogt;": '\U000029C1', + "ohbar;": '\U000029B5', + "ohm;": '\U000003A9', + "oint;": '\U0000222E', + "olarr;": '\U000021BA', + "olcir;": '\U000029BE', + "olcross;": '\U000029BB', + "oline;": '\U0000203E', + "olt;": '\U000029C0', + "omacr;": '\U0000014D', + "omega;": '\U000003C9', + "omicron;": '\U000003BF', + "omid;": '\U000029B6', + "ominus;": '\U00002296', + "oopf;": '\U0001D560', + "opar;": '\U000029B7', + "operp;": '\U000029B9', + "oplus;": '\U00002295', + "or;": '\U00002228', + "orarr;": '\U000021BB', + "ord;": '\U00002A5D', + "order;": '\U00002134', + "orderof;": '\U00002134', + "ordf;": '\U000000AA', + "ordm;": '\U000000BA', + "origof;": '\U000022B6', + "oror;": '\U00002A56', + "orslope;": '\U00002A57', + "orv;": '\U00002A5B', + "oscr;": '\U00002134', + "oslash;": '\U000000F8', + "osol;": '\U00002298', + "otilde;": '\U000000F5', + "otimes;": '\U00002297', + "otimesas;": '\U00002A36', + "ouml;": '\U000000F6', + "ovbar;": '\U0000233D', + "par;": '\U00002225', + "para;": '\U000000B6', + "parallel;": '\U00002225', + "parsim;": '\U00002AF3', + "parsl;": '\U00002AFD', + "part;": '\U00002202', + "pcy;": '\U0000043F', + "percnt;": '\U00000025', + "period;": '\U0000002E', + "permil;": '\U00002030', + "perp;": '\U000022A5', + "pertenk;": '\U00002031', + "pfr;": '\U0001D52D', + "phi;": '\U000003C6', + "phiv;": '\U000003D5', + "phmmat;": '\U00002133', + "phone;": '\U0000260E', + "pi;": '\U000003C0', + "pitchfork;": '\U000022D4', + "piv;": '\U000003D6', + "planck;": '\U0000210F', + "planckh;": '\U0000210E', + "plankv;": '\U0000210F', + "plus;": '\U0000002B', + "plusacir;": '\U00002A23', + "plusb;": '\U0000229E', + "pluscir;": '\U00002A22', + "plusdo;": '\U00002214', + "plusdu;": '\U00002A25', + "pluse;": '\U00002A72', + "plusmn;": '\U000000B1', + "plussim;": '\U00002A26', + "plustwo;": '\U00002A27', + "pm;": '\U000000B1', + "pointint;": '\U00002A15', + "popf;": '\U0001D561', + "pound;": '\U000000A3', + "pr;": '\U0000227A', + "prE;": '\U00002AB3', + "prap;": '\U00002AB7', + "prcue;": '\U0000227C', + "pre;": '\U00002AAF', + "prec;": '\U0000227A', + "precapprox;": '\U00002AB7', + "preccurlyeq;": '\U0000227C', + "preceq;": '\U00002AAF', + "precnapprox;": '\U00002AB9', + "precneqq;": '\U00002AB5', + "precnsim;": '\U000022E8', + "precsim;": '\U0000227E', + "prime;": '\U00002032', + "primes;": '\U00002119', + "prnE;": '\U00002AB5', + "prnap;": '\U00002AB9', + "prnsim;": '\U000022E8', + "prod;": '\U0000220F', + "profalar;": '\U0000232E', + "profline;": '\U00002312', + "profsurf;": '\U00002313', + "prop;": '\U0000221D', + "propto;": '\U0000221D', + "prsim;": '\U0000227E', + "prurel;": '\U000022B0', + "pscr;": '\U0001D4C5', + "psi;": '\U000003C8', + "puncsp;": '\U00002008', + "qfr;": '\U0001D52E', + "qint;": '\U00002A0C', + "qopf;": '\U0001D562', + "qprime;": '\U00002057', + "qscr;": '\U0001D4C6', + "quaternions;": '\U0000210D', + "quatint;": '\U00002A16', + "quest;": '\U0000003F', + "questeq;": '\U0000225F', + "quot;": '\U00000022', + "rAarr;": '\U000021DB', + "rArr;": '\U000021D2', + "rAtail;": '\U0000291C', + "rBarr;": '\U0000290F', + "rHar;": '\U00002964', + "racute;": '\U00000155', + "radic;": '\U0000221A', + "raemptyv;": '\U000029B3', + "rang;": '\U000027E9', + "rangd;": '\U00002992', + "range;": '\U000029A5', + "rangle;": '\U000027E9', + "raquo;": '\U000000BB', + "rarr;": '\U00002192', + "rarrap;": '\U00002975', + "rarrb;": '\U000021E5', + "rarrbfs;": '\U00002920', + "rarrc;": '\U00002933', + "rarrfs;": '\U0000291E', + "rarrhk;": '\U000021AA', + "rarrlp;": '\U000021AC', + "rarrpl;": '\U00002945', + "rarrsim;": '\U00002974', + "rarrtl;": '\U000021A3', + "rarrw;": '\U0000219D', + "ratail;": '\U0000291A', + "ratio;": '\U00002236', + "rationals;": '\U0000211A', + "rbarr;": '\U0000290D', + "rbbrk;": '\U00002773', + "rbrace;": '\U0000007D', + "rbrack;": '\U0000005D', + "rbrke;": '\U0000298C', + "rbrksld;": '\U0000298E', + "rbrkslu;": '\U00002990', + "rcaron;": '\U00000159', + "rcedil;": '\U00000157', + "rceil;": '\U00002309', + "rcub;": '\U0000007D', + "rcy;": '\U00000440', + "rdca;": '\U00002937', + "rdldhar;": '\U00002969', + "rdquo;": '\U0000201D', + "rdquor;": '\U0000201D', + "rdsh;": '\U000021B3', + "real;": '\U0000211C', + "realine;": '\U0000211B', + "realpart;": '\U0000211C', + "reals;": '\U0000211D', + "rect;": '\U000025AD', + "reg;": '\U000000AE', + "rfisht;": '\U0000297D', + "rfloor;": '\U0000230B', + "rfr;": '\U0001D52F', + "rhard;": '\U000021C1', + "rharu;": '\U000021C0', + "rharul;": '\U0000296C', + "rho;": '\U000003C1', + "rhov;": '\U000003F1', + "rightarrow;": '\U00002192', + "rightarrowtail;": '\U000021A3', + "rightharpoondown;": '\U000021C1', + "rightharpoonup;": '\U000021C0', + "rightleftarrows;": '\U000021C4', + "rightleftharpoons;": '\U000021CC', + "rightrightarrows;": '\U000021C9', + "rightsquigarrow;": '\U0000219D', + "rightthreetimes;": '\U000022CC', + "ring;": '\U000002DA', + "risingdotseq;": '\U00002253', + "rlarr;": '\U000021C4', + "rlhar;": '\U000021CC', + "rlm;": '\U0000200F', + "rmoust;": '\U000023B1', + "rmoustache;": '\U000023B1', + "rnmid;": '\U00002AEE', + "roang;": '\U000027ED', + "roarr;": '\U000021FE', + "robrk;": '\U000027E7', + "ropar;": '\U00002986', + "ropf;": '\U0001D563', + "roplus;": '\U00002A2E', + "rotimes;": '\U00002A35', + "rpar;": '\U00000029', + "rpargt;": '\U00002994', + "rppolint;": '\U00002A12', + "rrarr;": '\U000021C9', + "rsaquo;": '\U0000203A', + "rscr;": '\U0001D4C7', + "rsh;": '\U000021B1', + "rsqb;": '\U0000005D', + "rsquo;": '\U00002019', + "rsquor;": '\U00002019', + "rthree;": '\U000022CC', + "rtimes;": '\U000022CA', + "rtri;": '\U000025B9', + "rtrie;": '\U000022B5', + "rtrif;": '\U000025B8', + "rtriltri;": '\U000029CE', + "ruluhar;": '\U00002968', + "rx;": '\U0000211E', + "sacute;": '\U0000015B', + "sbquo;": '\U0000201A', + "sc;": '\U0000227B', + "scE;": '\U00002AB4', + "scap;": '\U00002AB8', + "scaron;": '\U00000161', + "sccue;": '\U0000227D', + "sce;": '\U00002AB0', + "scedil;": '\U0000015F', + "scirc;": '\U0000015D', + "scnE;": '\U00002AB6', + "scnap;": '\U00002ABA', + "scnsim;": '\U000022E9', + "scpolint;": '\U00002A13', + "scsim;": '\U0000227F', + "scy;": '\U00000441', + "sdot;": '\U000022C5', + "sdotb;": '\U000022A1', + "sdote;": '\U00002A66', + "seArr;": '\U000021D8', + "searhk;": '\U00002925', + "searr;": '\U00002198', + "searrow;": '\U00002198', + "sect;": '\U000000A7', + "semi;": '\U0000003B', + "seswar;": '\U00002929', + "setminus;": '\U00002216', + "setmn;": '\U00002216', + "sext;": '\U00002736', + "sfr;": '\U0001D530', + "sfrown;": '\U00002322', + "sharp;": '\U0000266F', + "shchcy;": '\U00000449', + "shcy;": '\U00000448', + "shortmid;": '\U00002223', + "shortparallel;": '\U00002225', + "shy;": '\U000000AD', + "sigma;": '\U000003C3', + "sigmaf;": '\U000003C2', + "sigmav;": '\U000003C2', + "sim;": '\U0000223C', + "simdot;": '\U00002A6A', + "sime;": '\U00002243', + "simeq;": '\U00002243', + "simg;": '\U00002A9E', + "simgE;": '\U00002AA0', + "siml;": '\U00002A9D', + "simlE;": '\U00002A9F', + "simne;": '\U00002246', + "simplus;": '\U00002A24', + "simrarr;": '\U00002972', + "slarr;": '\U00002190', + "smallsetminus;": '\U00002216', + "smashp;": '\U00002A33', + "smeparsl;": '\U000029E4', + "smid;": '\U00002223', + "smile;": '\U00002323', + "smt;": '\U00002AAA', + "smte;": '\U00002AAC', + "softcy;": '\U0000044C', + "sol;": '\U0000002F', + "solb;": '\U000029C4', + "solbar;": '\U0000233F', + "sopf;": '\U0001D564', + "spades;": '\U00002660', + "spadesuit;": '\U00002660', + "spar;": '\U00002225', + "sqcap;": '\U00002293', + "sqcup;": '\U00002294', + "sqsub;": '\U0000228F', + "sqsube;": '\U00002291', + "sqsubset;": '\U0000228F', + "sqsubseteq;": '\U00002291', + "sqsup;": '\U00002290', + "sqsupe;": '\U00002292', + "sqsupset;": '\U00002290', + "sqsupseteq;": '\U00002292', + "squ;": '\U000025A1', + "square;": '\U000025A1', + "squarf;": '\U000025AA', + "squf;": '\U000025AA', + "srarr;": '\U00002192', + "sscr;": '\U0001D4C8', + "ssetmn;": '\U00002216', + "ssmile;": '\U00002323', + "sstarf;": '\U000022C6', + "star;": '\U00002606', + "starf;": '\U00002605', + "straightepsilon;": '\U000003F5', + "straightphi;": '\U000003D5', + "strns;": '\U000000AF', + "sub;": '\U00002282', + "subE;": '\U00002AC5', + "subdot;": '\U00002ABD', + "sube;": '\U00002286', + "subedot;": '\U00002AC3', + "submult;": '\U00002AC1', + "subnE;": '\U00002ACB', + "subne;": '\U0000228A', + "subplus;": '\U00002ABF', + "subrarr;": '\U00002979', + "subset;": '\U00002282', + "subseteq;": '\U00002286', + "subseteqq;": '\U00002AC5', + "subsetneq;": '\U0000228A', + "subsetneqq;": '\U00002ACB', + "subsim;": '\U00002AC7', + "subsub;": '\U00002AD5', + "subsup;": '\U00002AD3', + "succ;": '\U0000227B', + "succapprox;": '\U00002AB8', + "succcurlyeq;": '\U0000227D', + "succeq;": '\U00002AB0', + "succnapprox;": '\U00002ABA', + "succneqq;": '\U00002AB6', + "succnsim;": '\U000022E9', + "succsim;": '\U0000227F', + "sum;": '\U00002211', + "sung;": '\U0000266A', + "sup;": '\U00002283', + "sup1;": '\U000000B9', + "sup2;": '\U000000B2', + "sup3;": '\U000000B3', + "supE;": '\U00002AC6', + "supdot;": '\U00002ABE', + "supdsub;": '\U00002AD8', + "supe;": '\U00002287', + "supedot;": '\U00002AC4', + "suphsol;": '\U000027C9', + "suphsub;": '\U00002AD7', + "suplarr;": '\U0000297B', + "supmult;": '\U00002AC2', + "supnE;": '\U00002ACC', + "supne;": '\U0000228B', + "supplus;": '\U00002AC0', + "supset;": '\U00002283', + "supseteq;": '\U00002287', + "supseteqq;": '\U00002AC6', + "supsetneq;": '\U0000228B', + "supsetneqq;": '\U00002ACC', + "supsim;": '\U00002AC8', + "supsub;": '\U00002AD4', + "supsup;": '\U00002AD6', + "swArr;": '\U000021D9', + "swarhk;": '\U00002926', + "swarr;": '\U00002199', + "swarrow;": '\U00002199', + "swnwar;": '\U0000292A', + "szlig;": '\U000000DF', + "target;": '\U00002316', + "tau;": '\U000003C4', + "tbrk;": '\U000023B4', + "tcaron;": '\U00000165', + "tcedil;": '\U00000163', + "tcy;": '\U00000442', + "tdot;": '\U000020DB', + "telrec;": '\U00002315', + "tfr;": '\U0001D531', + "there4;": '\U00002234', + "therefore;": '\U00002234', + "theta;": '\U000003B8', + "thetasym;": '\U000003D1', + "thetav;": '\U000003D1', + "thickapprox;": '\U00002248', + "thicksim;": '\U0000223C', + "thinsp;": '\U00002009', + "thkap;": '\U00002248', + "thksim;": '\U0000223C', + "thorn;": '\U000000FE', + "tilde;": '\U000002DC', + "times;": '\U000000D7', + "timesb;": '\U000022A0', + "timesbar;": '\U00002A31', + "timesd;": '\U00002A30', + "tint;": '\U0000222D', + "toea;": '\U00002928', + "top;": '\U000022A4', + "topbot;": '\U00002336', + "topcir;": '\U00002AF1', + "topf;": '\U0001D565', + "topfork;": '\U00002ADA', + "tosa;": '\U00002929', + "tprime;": '\U00002034', + "trade;": '\U00002122', + "triangle;": '\U000025B5', + "triangledown;": '\U000025BF', + "triangleleft;": '\U000025C3', + "trianglelefteq;": '\U000022B4', + "triangleq;": '\U0000225C', + "triangleright;": '\U000025B9', + "trianglerighteq;": '\U000022B5', + "tridot;": '\U000025EC', + "trie;": '\U0000225C', + "triminus;": '\U00002A3A', + "triplus;": '\U00002A39', + "trisb;": '\U000029CD', + "tritime;": '\U00002A3B', + "trpezium;": '\U000023E2', + "tscr;": '\U0001D4C9', + "tscy;": '\U00000446', + "tshcy;": '\U0000045B', + "tstrok;": '\U00000167', + "twixt;": '\U0000226C', + "twoheadleftarrow;": '\U0000219E', + "twoheadrightarrow;": '\U000021A0', + "uArr;": '\U000021D1', + "uHar;": '\U00002963', + "uacute;": '\U000000FA', + "uarr;": '\U00002191', + "ubrcy;": '\U0000045E', + "ubreve;": '\U0000016D', + "ucirc;": '\U000000FB', + "ucy;": '\U00000443', + "udarr;": '\U000021C5', + "udblac;": '\U00000171', + "udhar;": '\U0000296E', + "ufisht;": '\U0000297E', + "ufr;": '\U0001D532', + "ugrave;": '\U000000F9', + "uharl;": '\U000021BF', + "uharr;": '\U000021BE', + "uhblk;": '\U00002580', + "ulcorn;": '\U0000231C', + "ulcorner;": '\U0000231C', + "ulcrop;": '\U0000230F', + "ultri;": '\U000025F8', + "umacr;": '\U0000016B', + "uml;": '\U000000A8', + "uogon;": '\U00000173', + "uopf;": '\U0001D566', + "uparrow;": '\U00002191', + "updownarrow;": '\U00002195', + "upharpoonleft;": '\U000021BF', + "upharpoonright;": '\U000021BE', + "uplus;": '\U0000228E', + "upsi;": '\U000003C5', + "upsih;": '\U000003D2', + "upsilon;": '\U000003C5', + "upuparrows;": '\U000021C8', + "urcorn;": '\U0000231D', + "urcorner;": '\U0000231D', + "urcrop;": '\U0000230E', + "uring;": '\U0000016F', + "urtri;": '\U000025F9', + "uscr;": '\U0001D4CA', + "utdot;": '\U000022F0', + "utilde;": '\U00000169', + "utri;": '\U000025B5', + "utrif;": '\U000025B4', + "uuarr;": '\U000021C8', + "uuml;": '\U000000FC', + "uwangle;": '\U000029A7', + "vArr;": '\U000021D5', + "vBar;": '\U00002AE8', + "vBarv;": '\U00002AE9', + "vDash;": '\U000022A8', + "vangrt;": '\U0000299C', + "varepsilon;": '\U000003F5', + "varkappa;": '\U000003F0', + "varnothing;": '\U00002205', + "varphi;": '\U000003D5', + "varpi;": '\U000003D6', + "varpropto;": '\U0000221D', + "varr;": '\U00002195', + "varrho;": '\U000003F1', + "varsigma;": '\U000003C2', + "vartheta;": '\U000003D1', + "vartriangleleft;": '\U000022B2', + "vartriangleright;": '\U000022B3', + "vcy;": '\U00000432', + "vdash;": '\U000022A2', + "vee;": '\U00002228', + "veebar;": '\U000022BB', + "veeeq;": '\U0000225A', + "vellip;": '\U000022EE', + "verbar;": '\U0000007C', + "vert;": '\U0000007C', + "vfr;": '\U0001D533', + "vltri;": '\U000022B2', + "vopf;": '\U0001D567', + "vprop;": '\U0000221D', + "vrtri;": '\U000022B3', + "vscr;": '\U0001D4CB', + "vzigzag;": '\U0000299A', + "wcirc;": '\U00000175', + "wedbar;": '\U00002A5F', + "wedge;": '\U00002227', + "wedgeq;": '\U00002259', + "weierp;": '\U00002118', + "wfr;": '\U0001D534', + "wopf;": '\U0001D568', + "wp;": '\U00002118', + "wr;": '\U00002240', + "wreath;": '\U00002240', + "wscr;": '\U0001D4CC', + "xcap;": '\U000022C2', + "xcirc;": '\U000025EF', + "xcup;": '\U000022C3', + "xdtri;": '\U000025BD', + "xfr;": '\U0001D535', + "xhArr;": '\U000027FA', + "xharr;": '\U000027F7', + "xi;": '\U000003BE', + "xlArr;": '\U000027F8', + "xlarr;": '\U000027F5', + "xmap;": '\U000027FC', + "xnis;": '\U000022FB', + "xodot;": '\U00002A00', + "xopf;": '\U0001D569', + "xoplus;": '\U00002A01', + "xotime;": '\U00002A02', + "xrArr;": '\U000027F9', + "xrarr;": '\U000027F6', + "xscr;": '\U0001D4CD', + "xsqcup;": '\U00002A06', + "xuplus;": '\U00002A04', + "xutri;": '\U000025B3', + "xvee;": '\U000022C1', + "xwedge;": '\U000022C0', + "yacute;": '\U000000FD', + "yacy;": '\U0000044F', + "ycirc;": '\U00000177', + "ycy;": '\U0000044B', + "yen;": '\U000000A5', + "yfr;": '\U0001D536', + "yicy;": '\U00000457', + "yopf;": '\U0001D56A', + "yscr;": '\U0001D4CE', + "yucy;": '\U0000044E', + "yuml;": '\U000000FF', + "zacute;": '\U0000017A', + "zcaron;": '\U0000017E', + "zcy;": '\U00000437', + "zdot;": '\U0000017C', + "zeetrf;": '\U00002128', + "zeta;": '\U000003B6', + "zfr;": '\U0001D537', + "zhcy;": '\U00000436', + "zigrarr;": '\U000021DD', + "zopf;": '\U0001D56B', + "zscr;": '\U0001D4CF', + "zwj;": '\U0000200D', + "zwnj;": '\U0000200C', + "AElig": '\U000000C6', + "AMP": '\U00000026', + "Aacute": '\U000000C1', + "Acirc": '\U000000C2', + "Agrave": '\U000000C0', + "Aring": '\U000000C5', + "Atilde": '\U000000C3', + "Auml": '\U000000C4', + "COPY": '\U000000A9', + "Ccedil": '\U000000C7', + "ETH": '\U000000D0', + "Eacute": '\U000000C9', + "Ecirc": '\U000000CA', + "Egrave": '\U000000C8', + "Euml": '\U000000CB', + "GT": '\U0000003E', + "Iacute": '\U000000CD', + "Icirc": '\U000000CE', + "Igrave": '\U000000CC', + "Iuml": '\U000000CF', + "LT": '\U0000003C', + "Ntilde": '\U000000D1', + "Oacute": '\U000000D3', + "Ocirc": '\U000000D4', + "Ograve": '\U000000D2', + "Oslash": '\U000000D8', + "Otilde": '\U000000D5', + "Ouml": '\U000000D6', + "QUOT": '\U00000022', + "REG": '\U000000AE', + "THORN": '\U000000DE', + "Uacute": '\U000000DA', + "Ucirc": '\U000000DB', + "Ugrave": '\U000000D9', + "Uuml": '\U000000DC', + "Yacute": '\U000000DD', + "aacute": '\U000000E1', + "acirc": '\U000000E2', + "acute": '\U000000B4', + "aelig": '\U000000E6', + "agrave": '\U000000E0', + "amp": '\U00000026', + "aring": '\U000000E5', + "atilde": '\U000000E3', + "auml": '\U000000E4', + "brvbar": '\U000000A6', + "ccedil": '\U000000E7', + "cedil": '\U000000B8', + "cent": '\U000000A2', + "copy": '\U000000A9', + "curren": '\U000000A4', + "deg": '\U000000B0', + "divide": '\U000000F7', + "eacute": '\U000000E9', + "ecirc": '\U000000EA', + "egrave": '\U000000E8', + "eth": '\U000000F0', + "euml": '\U000000EB', + "frac12": '\U000000BD', + "frac14": '\U000000BC', + "frac34": '\U000000BE', + "gt": '\U0000003E', + "iacute": '\U000000ED', + "icirc": '\U000000EE', + "iexcl": '\U000000A1', + "igrave": '\U000000EC', + "iquest": '\U000000BF', + "iuml": '\U000000EF', + "laquo": '\U000000AB', + "lt": '\U0000003C', + "macr": '\U000000AF', + "micro": '\U000000B5', + "middot": '\U000000B7', + "nbsp": '\U000000A0', + "not": '\U000000AC', + "ntilde": '\U000000F1', + "oacute": '\U000000F3', + "ocirc": '\U000000F4', + "ograve": '\U000000F2', + "ordf": '\U000000AA', + "ordm": '\U000000BA', + "oslash": '\U000000F8', + "otilde": '\U000000F5', + "ouml": '\U000000F6', + "para": '\U000000B6', + "plusmn": '\U000000B1', + "pound": '\U000000A3', + "quot": '\U00000022', + "raquo": '\U000000BB', + "reg": '\U000000AE', + "sect": '\U000000A7', + "shy": '\U000000AD', + "sup1": '\U000000B9', + "sup2": '\U000000B2', + "sup3": '\U000000B3', + "szlig": '\U000000DF', + "thorn": '\U000000FE', + "times": '\U000000D7', + "uacute": '\U000000FA', + "ucirc": '\U000000FB', + "ugrave": '\U000000F9', + "uml": '\U000000A8', + "uuml": '\U000000FC', + "yacute": '\U000000FD', + "yen": '\U000000A5', + "yuml": '\U000000FF', +} + +// HTML entities that are two unicode codepoints. +var entity2 = map[string][2]rune{ + // TODO(nigeltao): Handle replacements that are wider than their names. + // "nLt;": {'\u226A', '\u20D2'}, + // "nGt;": {'\u226B', '\u20D2'}, + "NotEqualTilde;": {'\u2242', '\u0338'}, + "NotGreaterFullEqual;": {'\u2267', '\u0338'}, + "NotGreaterGreater;": {'\u226B', '\u0338'}, + "NotGreaterSlantEqual;": {'\u2A7E', '\u0338'}, + "NotHumpDownHump;": {'\u224E', '\u0338'}, + "NotHumpEqual;": {'\u224F', '\u0338'}, + "NotLeftTriangleBar;": {'\u29CF', '\u0338'}, + "NotLessLess;": {'\u226A', '\u0338'}, + "NotLessSlantEqual;": {'\u2A7D', '\u0338'}, + "NotNestedGreaterGreater;": {'\u2AA2', '\u0338'}, + "NotNestedLessLess;": {'\u2AA1', '\u0338'}, + "NotPrecedesEqual;": {'\u2AAF', '\u0338'}, + "NotRightTriangleBar;": {'\u29D0', '\u0338'}, + "NotSquareSubset;": {'\u228F', '\u0338'}, + "NotSquareSuperset;": {'\u2290', '\u0338'}, + "NotSubset;": {'\u2282', '\u20D2'}, + "NotSucceedsEqual;": {'\u2AB0', '\u0338'}, + "NotSucceedsTilde;": {'\u227F', '\u0338'}, + "NotSuperset;": {'\u2283', '\u20D2'}, + "ThickSpace;": {'\u205F', '\u200A'}, + "acE;": {'\u223E', '\u0333'}, + "bne;": {'\u003D', '\u20E5'}, + "bnequiv;": {'\u2261', '\u20E5'}, + "caps;": {'\u2229', '\uFE00'}, + "cups;": {'\u222A', '\uFE00'}, + "fjlig;": {'\u0066', '\u006A'}, + "gesl;": {'\u22DB', '\uFE00'}, + "gvertneqq;": {'\u2269', '\uFE00'}, + "gvnE;": {'\u2269', '\uFE00'}, + "lates;": {'\u2AAD', '\uFE00'}, + "lesg;": {'\u22DA', '\uFE00'}, + "lvertneqq;": {'\u2268', '\uFE00'}, + "lvnE;": {'\u2268', '\uFE00'}, + "nGg;": {'\u22D9', '\u0338'}, + "nGtv;": {'\u226B', '\u0338'}, + "nLl;": {'\u22D8', '\u0338'}, + "nLtv;": {'\u226A', '\u0338'}, + "nang;": {'\u2220', '\u20D2'}, + "napE;": {'\u2A70', '\u0338'}, + "napid;": {'\u224B', '\u0338'}, + "nbump;": {'\u224E', '\u0338'}, + "nbumpe;": {'\u224F', '\u0338'}, + "ncongdot;": {'\u2A6D', '\u0338'}, + "nedot;": {'\u2250', '\u0338'}, + "nesim;": {'\u2242', '\u0338'}, + "ngE;": {'\u2267', '\u0338'}, + "ngeqq;": {'\u2267', '\u0338'}, + "ngeqslant;": {'\u2A7E', '\u0338'}, + "nges;": {'\u2A7E', '\u0338'}, + "nlE;": {'\u2266', '\u0338'}, + "nleqq;": {'\u2266', '\u0338'}, + "nleqslant;": {'\u2A7D', '\u0338'}, + "nles;": {'\u2A7D', '\u0338'}, + "notinE;": {'\u22F9', '\u0338'}, + "notindot;": {'\u22F5', '\u0338'}, + "nparsl;": {'\u2AFD', '\u20E5'}, + "npart;": {'\u2202', '\u0338'}, + "npre;": {'\u2AAF', '\u0338'}, + "npreceq;": {'\u2AAF', '\u0338'}, + "nrarrc;": {'\u2933', '\u0338'}, + "nrarrw;": {'\u219D', '\u0338'}, + "nsce;": {'\u2AB0', '\u0338'}, + "nsubE;": {'\u2AC5', '\u0338'}, + "nsubset;": {'\u2282', '\u20D2'}, + "nsubseteqq;": {'\u2AC5', '\u0338'}, + "nsucceq;": {'\u2AB0', '\u0338'}, + "nsupE;": {'\u2AC6', '\u0338'}, + "nsupset;": {'\u2283', '\u20D2'}, + "nsupseteqq;": {'\u2AC6', '\u0338'}, + "nvap;": {'\u224D', '\u20D2'}, + "nvge;": {'\u2265', '\u20D2'}, + "nvgt;": {'\u003E', '\u20D2'}, + "nvle;": {'\u2264', '\u20D2'}, + "nvlt;": {'\u003C', '\u20D2'}, + "nvltrie;": {'\u22B4', '\u20D2'}, + "nvrtrie;": {'\u22B5', '\u20D2'}, + "nvsim;": {'\u223C', '\u20D2'}, + "race;": {'\u223D', '\u0331'}, + "smtes;": {'\u2AAC', '\uFE00'}, + "sqcaps;": {'\u2293', '\uFE00'}, + "sqcups;": {'\u2294', '\uFE00'}, + "varsubsetneq;": {'\u228A', '\uFE00'}, + "varsubsetneqq;": {'\u2ACB', '\uFE00'}, + "varsupsetneq;": {'\u228B', '\uFE00'}, + "varsupsetneqq;": {'\u2ACC', '\uFE00'}, + "vnsub;": {'\u2282', '\u20D2'}, + "vnsup;": {'\u2283', '\u20D2'}, + "vsubnE;": {'\u2ACB', '\uFE00'}, + "vsubne;": {'\u228A', '\uFE00'}, + "vsupnE;": {'\u2ACC', '\uFE00'}, + "vsupne;": {'\u228B', '\uFE00'}, +} diff --git a/vendor/golang.org/x/net/html/escape.go b/vendor/golang.org/x/net/html/escape.go new file mode 100644 index 0000000000..12f2273706 --- /dev/null +++ b/vendor/golang.org/x/net/html/escape.go @@ -0,0 +1,339 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package html + +import ( + "bytes" + "strings" + "unicode/utf8" +) + +// These replacements permit compatibility with old numeric entities that +// assumed Windows-1252 encoding. +// https://html.spec.whatwg.org/multipage/syntax.html#consume-a-character-reference +var replacementTable = [...]rune{ + '\u20AC', // First entry is what 0x80 should be replaced with. + '\u0081', + '\u201A', + '\u0192', + '\u201E', + '\u2026', + '\u2020', + '\u2021', + '\u02C6', + '\u2030', + '\u0160', + '\u2039', + '\u0152', + '\u008D', + '\u017D', + '\u008F', + '\u0090', + '\u2018', + '\u2019', + '\u201C', + '\u201D', + '\u2022', + '\u2013', + '\u2014', + '\u02DC', + '\u2122', + '\u0161', + '\u203A', + '\u0153', + '\u009D', + '\u017E', + '\u0178', // Last entry is 0x9F. + // 0x00->'\uFFFD' is handled programmatically. + // 0x0D->'\u000D' is a no-op. +} + +// unescapeEntity reads an entity like "<" from b[src:] and writes the +// corresponding "<" to b[dst:], returning the incremented dst and src cursors. +// Precondition: b[src] == '&' && dst <= src. +// attribute should be true if parsing an attribute value. +func unescapeEntity(b []byte, dst, src int, attribute bool) (dst1, src1 int) { + // https://html.spec.whatwg.org/multipage/syntax.html#consume-a-character-reference + + // i starts at 1 because we already know that s[0] == '&'. + i, s := 1, b[src:] + + if len(s) <= 1 { + b[dst] = b[src] + return dst + 1, src + 1 + } + + if s[i] == '#' { + if len(s) <= 3 { // We need to have at least "&#.". + b[dst] = b[src] + return dst + 1, src + 1 + } + i++ + c := s[i] + hex := false + if c == 'x' || c == 'X' { + hex = true + i++ + } + + x := '\x00' + for i < len(s) { + c = s[i] + i++ + if hex { + if '0' <= c && c <= '9' { + x = 16*x + rune(c) - '0' + continue + } else if 'a' <= c && c <= 'f' { + x = 16*x + rune(c) - 'a' + 10 + continue + } else if 'A' <= c && c <= 'F' { + x = 16*x + rune(c) - 'A' + 10 + continue + } + } else if '0' <= c && c <= '9' { + x = 10*x + rune(c) - '0' + continue + } + if c != ';' { + i-- + } + break + } + + if i <= 3 { // No characters matched. + b[dst] = b[src] + return dst + 1, src + 1 + } + + if 0x80 <= x && x <= 0x9F { + // Replace characters from Windows-1252 with UTF-8 equivalents. + x = replacementTable[x-0x80] + } else if x == 0 || (0xD800 <= x && x <= 0xDFFF) || x > 0x10FFFF { + // Replace invalid characters with the replacement character. + x = '\uFFFD' + } + + return dst + utf8.EncodeRune(b[dst:], x), src + i + } + + // Consume the maximum number of characters possible, with the + // consumed characters matching one of the named references. + + for i < len(s) { + c := s[i] + i++ + // Lower-cased characters are more common in entities, so we check for them first. + if 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9' { + continue + } + if c != ';' { + i-- + } + break + } + + entityName := string(s[1:i]) + if entityName == "" { + // No-op. + } else if attribute && entityName[len(entityName)-1] != ';' && len(s) > i && s[i] == '=' { + // No-op. + } else if x := entity[entityName]; x != 0 { + return dst + utf8.EncodeRune(b[dst:], x), src + i + } else if x := entity2[entityName]; x[0] != 0 { + dst1 := dst + utf8.EncodeRune(b[dst:], x[0]) + return dst1 + utf8.EncodeRune(b[dst1:], x[1]), src + i + } else if !attribute { + maxLen := len(entityName) - 1 + if maxLen > longestEntityWithoutSemicolon { + maxLen = longestEntityWithoutSemicolon + } + for j := maxLen; j > 1; j-- { + if x := entity[entityName[:j]]; x != 0 { + return dst + utf8.EncodeRune(b[dst:], x), src + j + 1 + } + } + } + + dst1, src1 = dst+i, src+i + copy(b[dst:dst1], b[src:src1]) + return dst1, src1 +} + +// unescape unescapes b's entities in-place, so that "a<b" becomes "a' byte that, per above, we'd like to avoid escaping unless we have to. +// +// Studying the summary table (and T actions in its '>' column) closely, we +// only need to escape in states 43, 44, 49, 51 and 52. State 43 is at the +// start of the comment data. State 52 is after a '!'. The other three states +// are after a '-'. +// +// Our algorithm is thus to escape every '&' and to escape '>' if and only if: +// - The '>' is after a '!' or '-' (in the unescaped data) or +// - The '>' is at the start of the comment data (after the opening ""); err != nil { + return err + } + return nil + case DoctypeNode: + if _, err := w.WriteString("') + case RawNode: + _, err := w.WriteString(n.Data) + return err + default: + return errors.New("html: unknown node type") + } + + // Render the opening tag. + if err := w.WriteByte('<'); err != nil { + return err + } + if _, err := w.WriteString(n.Data); err != nil { + return err + } + for _, a := range n.Attr { + if err := w.WriteByte(' '); err != nil { + return err + } + if a.Namespace != "" { + if _, err := w.WriteString(a.Namespace); err != nil { + return err + } + if err := w.WriteByte(':'); err != nil { + return err + } + } + if _, err := w.WriteString(a.Key); err != nil { + return err + } + if _, err := w.WriteString(`="`); err != nil { + return err + } + if err := escape(w, a.Val); err != nil { + return err + } + if err := w.WriteByte('"'); err != nil { + return err + } + } + if voidElements[n.Data] { + if n.FirstChild != nil { + return fmt.Errorf("html: void element <%s> has child nodes", n.Data) + } + _, err := w.WriteString("/>") + return err + } + if err := w.WriteByte('>'); err != nil { + return err + } + + // Add initial newline where there is danger of a newline being ignored. + if c := n.FirstChild; c != nil && c.Type == TextNode && strings.HasPrefix(c.Data, "\n") { + switch n.Data { + case "pre", "listing", "textarea": + if err := w.WriteByte('\n'); err != nil { + return err + } + } + } + + // Render any child nodes + if childTextNodesAreLiteral(n) { + for c := n.FirstChild; c != nil; c = c.NextSibling { + if c.Type == TextNode { + if _, err := w.WriteString(c.Data); err != nil { + return err + } + } else { + if err := render1(w, c); err != nil { + return err + } + } + } + if n.Data == "plaintext" { + // Don't render anything else. must be the + // last element in the file, with no closing tag. + return plaintextAbort + } + } else { + for c := n.FirstChild; c != nil; c = c.NextSibling { + if err := render1(w, c); err != nil { + return err + } + } + } + + // Render the </xxx> closing tag. + if _, err := w.WriteString("</"); err != nil { + return err + } + if _, err := w.WriteString(n.Data); err != nil { + return err + } + return w.WriteByte('>') +} + +func childTextNodesAreLiteral(n *Node) bool { + // Per WHATWG HTML 13.3, if the parent of the current node is a style, + // script, xmp, iframe, noembed, noframes, or plaintext element, and the + // current node is a text node, append the value of the node's data + // literally. The specification is not explicit about it, but we only + // enforce this if we are in the HTML namespace (i.e. when the namespace is + // ""). + // NOTE: we also always include noscript elements, although the + // specification states that they should only be rendered as such if + // scripting is enabled for the node (which is not something we track). + if n.Namespace != "" { + return false + } + switch n.Data { + case "iframe", "noembed", "noframes", "noscript", "plaintext", "script", "style", "xmp": + return true + default: + return false + } +} + +// writeQuoted writes s to w surrounded by quotes. Normally it will use double +// quotes, but if s contains a double quote, it will use single quotes. +// It is used for writing the identifiers in a doctype declaration. +// In valid HTML, they can't contain both types of quotes. +func writeQuoted(w writer, s string) error { + var q byte = '"' + if strings.Contains(s, `"`) { + q = '\'' + } + if err := w.WriteByte(q); err != nil { + return err + } + if _, err := w.WriteString(s); err != nil { + return err + } + if err := w.WriteByte(q); err != nil { + return err + } + return nil +} + +// Section 12.1.2, "Elements", gives this list of void elements. Void elements +// are those that can't have any contents. +var voidElements = map[string]bool{ + "area": true, + "base": true, + "br": true, + "col": true, + "embed": true, + "hr": true, + "img": true, + "input": true, + "keygen": true, // "keygen" has been removed from the spec, but are kept here for backwards compatibility. + "link": true, + "meta": true, + "param": true, + "source": true, + "track": true, + "wbr": true, +} diff --git a/vendor/golang.org/x/net/html/token.go b/vendor/golang.org/x/net/html/token.go new file mode 100644 index 0000000000..6598c1f7b3 --- /dev/null +++ b/vendor/golang.org/x/net/html/token.go @@ -0,0 +1,1286 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package html + +import ( + "bytes" + "errors" + "io" + "strconv" + "strings" + + "golang.org/x/net/html/atom" +) + +// A TokenType is the type of a Token. +type TokenType uint32 + +const ( + // ErrorToken means that an error occurred during tokenization. + ErrorToken TokenType = iota + // TextToken means a text node. + TextToken + // A StartTagToken looks like <a>. + StartTagToken + // An EndTagToken looks like </a>. + EndTagToken + // A SelfClosingTagToken tag looks like <br/>. + SelfClosingTagToken + // A CommentToken looks like <!--x-->. + CommentToken + // A DoctypeToken looks like <!DOCTYPE x> + DoctypeToken +) + +// ErrBufferExceeded means that the buffering limit was exceeded. +var ErrBufferExceeded = errors.New("max buffer exceeded") + +// String returns a string representation of the TokenType. +func (t TokenType) String() string { + switch t { + case ErrorToken: + return "Error" + case TextToken: + return "Text" + case StartTagToken: + return "StartTag" + case EndTagToken: + return "EndTag" + case SelfClosingTagToken: + return "SelfClosingTag" + case CommentToken: + return "Comment" + case DoctypeToken: + return "Doctype" + } + return "Invalid(" + strconv.Itoa(int(t)) + ")" +} + +// An Attribute is an attribute namespace-key-value triple. Namespace is +// non-empty for foreign attributes like xlink, Key is alphabetic (and hence +// does not contain escapable characters like '&', '<' or '>'), and Val is +// unescaped (it looks like "a<b" rather than "a&lt;b"). +// +// Namespace is only used by the parser, not the tokenizer. +type Attribute struct { + Namespace, Key, Val string +} + +// A Token consists of a TokenType and some Data (tag name for start and end +// tags, content for text, comments and doctypes). A tag Token may also contain +// a slice of Attributes. Data is unescaped for all Tokens (it looks like "a<b" +// rather than "a&lt;b"). For tag Tokens, DataAtom is the atom for Data, or +// zero if Data is not a known tag name. +type Token struct { + Type TokenType + DataAtom atom.Atom + Data string + Attr []Attribute +} + +// tagString returns a string representation of a tag Token's Data and Attr. +func (t Token) tagString() string { + if len(t.Attr) == 0 { + return t.Data + } + buf := bytes.NewBufferString(t.Data) + for _, a := range t.Attr { + buf.WriteByte(' ') + buf.WriteString(a.Key) + buf.WriteString(`="`) + escape(buf, a.Val) + buf.WriteByte('"') + } + return buf.String() +} + +// String returns a string representation of the Token. +func (t Token) String() string { + switch t.Type { + case ErrorToken: + return "" + case TextToken: + return EscapeString(t.Data) + case StartTagToken: + return "<" + t.tagString() + ">" + case EndTagToken: + return "</" + t.tagString() + ">" + case SelfClosingTagToken: + return "<" + t.tagString() + "/>" + case CommentToken: + return "<!--" + escapeCommentString(t.Data) + "-->" + case DoctypeToken: + return "<!DOCTYPE " + EscapeString(t.Data) + ">" + } + return "Invalid(" + strconv.Itoa(int(t.Type)) + ")" +} + +// span is a range of bytes in a Tokenizer's buffer. The start is inclusive, +// the end is exclusive. +type span struct { + start, end int +} + +// A Tokenizer returns a stream of HTML Tokens. +type Tokenizer struct { + // r is the source of the HTML text. + r io.Reader + // tt is the TokenType of the current token. + tt TokenType + // err is the first error encountered during tokenization. It is possible + // for tt != Error && err != nil to hold: this means that Next returned a + // valid token but the subsequent Next call will return an error token. + // For example, if the HTML text input was just "plain", then the first + // Next call would set z.err to io.EOF but return a TextToken, and all + // subsequent Next calls would return an ErrorToken. + // err is never reset. Once it becomes non-nil, it stays non-nil. + err error + // readErr is the error returned by the io.Reader r. It is separate from + // err because it is valid for an io.Reader to return (n int, err1 error) + // such that n > 0 && err1 != nil, and callers should always process the + // n > 0 bytes before considering the error err1. + readErr error + // buf[raw.start:raw.end] holds the raw bytes of the current token. + // buf[raw.end:] is buffered input that will yield future tokens. + raw span + buf []byte + // maxBuf limits the data buffered in buf. A value of 0 means unlimited. + maxBuf int + // buf[data.start:data.end] holds the raw bytes of the current token's data: + // a text token's text, a tag token's tag name, etc. + data span + // pendingAttr is the attribute key and value currently being tokenized. + // When complete, pendingAttr is pushed onto attr. nAttrReturned is + // incremented on each call to TagAttr. + pendingAttr [2]span + attr [][2]span + nAttrReturned int + // rawTag is the "script" in "</script>" that closes the next token. If + // non-empty, the subsequent call to Next will return a raw or RCDATA text + // token: one that treats "<p>" as text instead of an element. + // rawTag's contents are lower-cased. + rawTag string + // textIsRaw is whether the current text token's data is not escaped. + textIsRaw bool + // convertNUL is whether NUL bytes in the current token's data should + // be converted into \ufffd replacement characters. + convertNUL bool + // allowCDATA is whether CDATA sections are allowed in the current context. + allowCDATA bool +} + +// AllowCDATA sets whether or not the tokenizer recognizes <![CDATA[foo]]> as +// the text "foo". The default value is false, which means to recognize it as +// a bogus comment "<!-- [CDATA[foo]] -->" instead. +// +// Strictly speaking, an HTML5 compliant tokenizer should allow CDATA if and +// only if tokenizing foreign content, such as MathML and SVG. However, +// tracking foreign-contentness is difficult to do purely in the tokenizer, +// as opposed to the parser, due to HTML integration points: an <svg> element +// can contain a <foreignObject> that is foreign-to-SVG but not foreign-to- +// HTML. For strict compliance with the HTML5 tokenization algorithm, it is the +// responsibility of the user of a tokenizer to call AllowCDATA as appropriate. +// In practice, if using the tokenizer without caring whether MathML or SVG +// CDATA is text or comments, such as tokenizing HTML to find all the anchor +// text, it is acceptable to ignore this responsibility. +func (z *Tokenizer) AllowCDATA(allowCDATA bool) { + z.allowCDATA = allowCDATA +} + +// NextIsNotRawText instructs the tokenizer that the next token should not be +// considered as 'raw text'. Some elements, such as script and title elements, +// normally require the next token after the opening tag to be 'raw text' that +// has no child elements. For example, tokenizing "<title>a<b>c</b>d</title>" +// yields a start tag token for "<title>", a text token for "a<b>c</b>d", and +// an end tag token for "</title>". There are no distinct start tag or end tag +// tokens for the "<b>" and "</b>". +// +// This tokenizer implementation will generally look for raw text at the right +// times. Strictly speaking, an HTML5 compliant tokenizer should not look for +// raw text if in foreign content: <title> generally needs raw text, but a +// <title> inside an <svg> does not. Another example is that a <textarea> +// generally needs raw text, but a <textarea> is not allowed as an immediate +// child of a <select>; in normal parsing, a <textarea> implies </select>, but +// one cannot close the implicit element when parsing a <select>'s InnerHTML. +// Similarly to AllowCDATA, tracking the correct moment to override raw-text- +// ness is difficult to do purely in the tokenizer, as opposed to the parser. +// For strict compliance with the HTML5 tokenization algorithm, it is the +// responsibility of the user of a tokenizer to call NextIsNotRawText as +// appropriate. In practice, like AllowCDATA, it is acceptable to ignore this +// responsibility for basic usage. +// +// Note that this 'raw text' concept is different from the one offered by the +// Tokenizer.Raw method. +func (z *Tokenizer) NextIsNotRawText() { + z.rawTag = "" +} + +// Err returns the error associated with the most recent ErrorToken token. +// This is typically io.EOF, meaning the end of tokenization. +func (z *Tokenizer) Err() error { + if z.tt != ErrorToken { + return nil + } + return z.err +} + +// readByte returns the next byte from the input stream, doing a buffered read +// from z.r into z.buf if necessary. z.buf[z.raw.start:z.raw.end] remains a contiguous byte +// slice that holds all the bytes read so far for the current token. +// It sets z.err if the underlying reader returns an error. +// Pre-condition: z.err == nil. +func (z *Tokenizer) readByte() byte { + if z.raw.end >= len(z.buf) { + // Our buffer is exhausted and we have to read from z.r. Check if the + // previous read resulted in an error. + if z.readErr != nil { + z.err = z.readErr + return 0 + } + // We copy z.buf[z.raw.start:z.raw.end] to the beginning of z.buf. If the length + // z.raw.end - z.raw.start is more than half the capacity of z.buf, then we + // allocate a new buffer before the copy. + c := cap(z.buf) + d := z.raw.end - z.raw.start + var buf1 []byte + if 2*d > c { + buf1 = make([]byte, d, 2*c) + } else { + buf1 = z.buf[:d] + } + copy(buf1, z.buf[z.raw.start:z.raw.end]) + if x := z.raw.start; x != 0 { + // Adjust the data/attr spans to refer to the same contents after the copy. + z.data.start -= x + z.data.end -= x + z.pendingAttr[0].start -= x + z.pendingAttr[0].end -= x + z.pendingAttr[1].start -= x + z.pendingAttr[1].end -= x + for i := range z.attr { + z.attr[i][0].start -= x + z.attr[i][0].end -= x + z.attr[i][1].start -= x + z.attr[i][1].end -= x + } + } + z.raw.start, z.raw.end, z.buf = 0, d, buf1[:d] + // Now that we have copied the live bytes to the start of the buffer, + // we read from z.r into the remainder. + var n int + n, z.readErr = readAtLeastOneByte(z.r, buf1[d:cap(buf1)]) + if n == 0 { + z.err = z.readErr + return 0 + } + z.buf = buf1[:d+n] + } + x := z.buf[z.raw.end] + z.raw.end++ + if z.maxBuf > 0 && z.raw.end-z.raw.start >= z.maxBuf { + z.err = ErrBufferExceeded + return 0 + } + return x +} + +// Buffered returns a slice containing data buffered but not yet tokenized. +func (z *Tokenizer) Buffered() []byte { + return z.buf[z.raw.end:] +} + +// readAtLeastOneByte wraps an io.Reader so that reading cannot return (0, nil). +// It returns io.ErrNoProgress if the underlying r.Read method returns (0, nil) +// too many times in succession. +func readAtLeastOneByte(r io.Reader, b []byte) (int, error) { + for i := 0; i < 100; i++ { + if n, err := r.Read(b); n != 0 || err != nil { + return n, err + } + } + return 0, io.ErrNoProgress +} + +// skipWhiteSpace skips past any white space. +func (z *Tokenizer) skipWhiteSpace() { + if z.err != nil { + return + } + for { + c := z.readByte() + if z.err != nil { + return + } + switch c { + case ' ', '\n', '\r', '\t', '\f': + // No-op. + default: + z.raw.end-- + return + } + } +} + +// readRawOrRCDATA reads until the next "</foo>", where "foo" is z.rawTag and +// is typically something like "script" or "textarea". +func (z *Tokenizer) readRawOrRCDATA() { + if z.rawTag == "script" { + z.readScript() + z.textIsRaw = true + z.rawTag = "" + return + } +loop: + for { + c := z.readByte() + if z.err != nil { + break loop + } + if c != '<' { + continue loop + } + c = z.readByte() + if z.err != nil { + break loop + } + if c != '/' { + z.raw.end-- + continue loop + } + if z.readRawEndTag() || z.err != nil { + break loop + } + } + z.data.end = z.raw.end + // A textarea's or title's RCDATA can contain escaped entities. + z.textIsRaw = z.rawTag != "textarea" && z.rawTag != "title" + z.rawTag = "" +} + +// readRawEndTag attempts to read a tag like "</foo>", where "foo" is z.rawTag. +// If it succeeds, it backs up the input position to reconsume the tag and +// returns true. Otherwise it returns false. The opening "</" has already been +// consumed. +func (z *Tokenizer) readRawEndTag() bool { + for i := 0; i < len(z.rawTag); i++ { + c := z.readByte() + if z.err != nil { + return false + } + if c != z.rawTag[i] && c != z.rawTag[i]-('a'-'A') { + z.raw.end-- + return false + } + } + c := z.readByte() + if z.err != nil { + return false + } + switch c { + case ' ', '\n', '\r', '\t', '\f', '/', '>': + // The 3 is 2 for the leading "</" plus 1 for the trailing character c. + z.raw.end -= 3 + len(z.rawTag) + return true + } + z.raw.end-- + return false +} + +// readScript reads until the next </script> tag, following the byzantine +// rules for escaping/hiding the closing tag. +func (z *Tokenizer) readScript() { + defer func() { + z.data.end = z.raw.end + }() + var c byte + +scriptData: + c = z.readByte() + if z.err != nil { + return + } + if c == '<' { + goto scriptDataLessThanSign + } + goto scriptData + +scriptDataLessThanSign: + c = z.readByte() + if z.err != nil { + return + } + switch c { + case '/': + goto scriptDataEndTagOpen + case '!': + goto scriptDataEscapeStart + } + z.raw.end-- + goto scriptData + +scriptDataEndTagOpen: + if z.readRawEndTag() || z.err != nil { + return + } + goto scriptData + +scriptDataEscapeStart: + c = z.readByte() + if z.err != nil { + return + } + if c == '-' { + goto scriptDataEscapeStartDash + } + z.raw.end-- + goto scriptData + +scriptDataEscapeStartDash: + c = z.readByte() + if z.err != nil { + return + } + if c == '-' { + goto scriptDataEscapedDashDash + } + z.raw.end-- + goto scriptData + +scriptDataEscaped: + c = z.readByte() + if z.err != nil { + return + } + switch c { + case '-': + goto scriptDataEscapedDash + case '<': + goto scriptDataEscapedLessThanSign + } + goto scriptDataEscaped + +scriptDataEscapedDash: + c = z.readByte() + if z.err != nil { + return + } + switch c { + case '-': + goto scriptDataEscapedDashDash + case '<': + goto scriptDataEscapedLessThanSign + } + goto scriptDataEscaped + +scriptDataEscapedDashDash: + c = z.readByte() + if z.err != nil { + return + } + switch c { + case '-': + goto scriptDataEscapedDashDash + case '<': + goto scriptDataEscapedLessThanSign + case '>': + goto scriptData + } + goto scriptDataEscaped + +scriptDataEscapedLessThanSign: + c = z.readByte() + if z.err != nil { + return + } + if c == '/' { + goto scriptDataEscapedEndTagOpen + } + if 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' { + goto scriptDataDoubleEscapeStart + } + z.raw.end-- + goto scriptData + +scriptDataEscapedEndTagOpen: + if z.readRawEndTag() || z.err != nil { + return + } + goto scriptDataEscaped + +scriptDataDoubleEscapeStart: + z.raw.end-- + for i := 0; i < len("script"); i++ { + c = z.readByte() + if z.err != nil { + return + } + if c != "script"[i] && c != "SCRIPT"[i] { + z.raw.end-- + goto scriptDataEscaped + } + } + c = z.readByte() + if z.err != nil { + return + } + switch c { + case ' ', '\n', '\r', '\t', '\f', '/', '>': + goto scriptDataDoubleEscaped + } + z.raw.end-- + goto scriptDataEscaped + +scriptDataDoubleEscaped: + c = z.readByte() + if z.err != nil { + return + } + switch c { + case '-': + goto scriptDataDoubleEscapedDash + case '<': + goto scriptDataDoubleEscapedLessThanSign + } + goto scriptDataDoubleEscaped + +scriptDataDoubleEscapedDash: + c = z.readByte() + if z.err != nil { + return + } + switch c { + case '-': + goto scriptDataDoubleEscapedDashDash + case '<': + goto scriptDataDoubleEscapedLessThanSign + } + goto scriptDataDoubleEscaped + +scriptDataDoubleEscapedDashDash: + c = z.readByte() + if z.err != nil { + return + } + switch c { + case '-': + goto scriptDataDoubleEscapedDashDash + case '<': + goto scriptDataDoubleEscapedLessThanSign + case '>': + goto scriptData + } + goto scriptDataDoubleEscaped + +scriptDataDoubleEscapedLessThanSign: + c = z.readByte() + if z.err != nil { + return + } + if c == '/' { + goto scriptDataDoubleEscapeEnd + } + z.raw.end-- + goto scriptDataDoubleEscaped + +scriptDataDoubleEscapeEnd: + if z.readRawEndTag() { + z.raw.end += len("</script>") + goto scriptDataEscaped + } + if z.err != nil { + return + } + goto scriptDataDoubleEscaped +} + +// readComment reads the next comment token starting with "<!--". The opening +// "<!--" has already been consumed. +func (z *Tokenizer) readComment() { + // When modifying this function, consider manually increasing the + // maxSuffixLen constant in func TestComments, from 6 to e.g. 9 or more. + // That increase should only be temporary, not committed, as it + // exponentially affects the test running time. + + z.data.start = z.raw.end + defer func() { + if z.data.end < z.data.start { + // It's a comment with no data, like <!-->. + z.data.end = z.data.start + } + }() + + var dashCount int + beginning := true + for { + c := z.readByte() + if z.err != nil { + z.data.end = z.calculateAbruptCommentDataEnd() + return + } + switch c { + case '-': + dashCount++ + continue + case '>': + if dashCount >= 2 || beginning { + z.data.end = z.raw.end - len("-->") + return + } + case '!': + if dashCount >= 2 { + c = z.readByte() + if z.err != nil { + z.data.end = z.calculateAbruptCommentDataEnd() + return + } else if c == '>' { + z.data.end = z.raw.end - len("--!>") + return + } else if c == '-' { + dashCount = 1 + beginning = false + continue + } + } + } + dashCount = 0 + beginning = false + } +} + +func (z *Tokenizer) calculateAbruptCommentDataEnd() int { + raw := z.Raw() + const prefixLen = len("<!--") + if len(raw) >= prefixLen { + raw = raw[prefixLen:] + if hasSuffix(raw, "--!") { + return z.raw.end - 3 + } else if hasSuffix(raw, "--") { + return z.raw.end - 2 + } else if hasSuffix(raw, "-") { + return z.raw.end - 1 + } + } + return z.raw.end +} + +func hasSuffix(b []byte, suffix string) bool { + if len(b) < len(suffix) { + return false + } + b = b[len(b)-len(suffix):] + for i := range b { + if b[i] != suffix[i] { + return false + } + } + return true +} + +// readUntilCloseAngle reads until the next ">". +func (z *Tokenizer) readUntilCloseAngle() { + z.data.start = z.raw.end + for { + c := z.readByte() + if z.err != nil { + z.data.end = z.raw.end + return + } + if c == '>' { + z.data.end = z.raw.end - len(">") + return + } + } +} + +// readMarkupDeclaration reads the next token starting with "<!". It might be +// a "<!--comment-->", a "<!DOCTYPE foo>", a "<![CDATA[section]]>" or +// "<!a bogus comment". The opening "<!" has already been consumed. +func (z *Tokenizer) readMarkupDeclaration() TokenType { + z.data.start = z.raw.end + var c [2]byte + for i := 0; i < 2; i++ { + c[i] = z.readByte() + if z.err != nil { + z.data.end = z.raw.end + return CommentToken + } + } + if c[0] == '-' && c[1] == '-' { + z.readComment() + return CommentToken + } + z.raw.end -= 2 + if z.readDoctype() { + return DoctypeToken + } + if z.allowCDATA && z.readCDATA() { + z.convertNUL = true + return TextToken + } + // It's a bogus comment. + z.readUntilCloseAngle() + return CommentToken +} + +// readDoctype attempts to read a doctype declaration and returns true if +// successful. The opening "<!" has already been consumed. +func (z *Tokenizer) readDoctype() bool { + const s = "DOCTYPE" + for i := 0; i < len(s); i++ { + c := z.readByte() + if z.err != nil { + z.data.end = z.raw.end + return false + } + if c != s[i] && c != s[i]+('a'-'A') { + // Back up to read the fragment of "DOCTYPE" again. + z.raw.end = z.data.start + return false + } + } + if z.skipWhiteSpace(); z.err != nil { + z.data.start = z.raw.end + z.data.end = z.raw.end + return true + } + z.readUntilCloseAngle() + return true +} + +// readCDATA attempts to read a CDATA section and returns true if +// successful. The opening "<!" has already been consumed. +func (z *Tokenizer) readCDATA() bool { + const s = "[CDATA[" + for i := 0; i < len(s); i++ { + c := z.readByte() + if z.err != nil { + z.data.end = z.raw.end + return false + } + if c != s[i] { + // Back up to read the fragment of "[CDATA[" again. + z.raw.end = z.data.start + return false + } + } + z.data.start = z.raw.end + brackets := 0 + for { + c := z.readByte() + if z.err != nil { + z.data.end = z.raw.end + return true + } + switch c { + case ']': + brackets++ + case '>': + if brackets >= 2 { + z.data.end = z.raw.end - len("]]>") + return true + } + brackets = 0 + default: + brackets = 0 + } + } +} + +// startTagIn returns whether the start tag in z.buf[z.data.start:z.data.end] +// case-insensitively matches any element of ss. +func (z *Tokenizer) startTagIn(ss ...string) bool { +loop: + for _, s := range ss { + if z.data.end-z.data.start != len(s) { + continue loop + } + for i := 0; i < len(s); i++ { + c := z.buf[z.data.start+i] + if 'A' <= c && c <= 'Z' { + c += 'a' - 'A' + } + if c != s[i] { + continue loop + } + } + return true + } + return false +} + +// readStartTag reads the next start tag token. The opening "<a" has already +// been consumed, where 'a' means anything in [A-Za-z]. +func (z *Tokenizer) readStartTag() TokenType { + z.readTag(true) + if z.err != nil { + return ErrorToken + } + // Several tags flag the tokenizer's next token as raw. + c, raw := z.buf[z.data.start], false + if 'A' <= c && c <= 'Z' { + c += 'a' - 'A' + } + switch c { + case 'i': + raw = z.startTagIn("iframe") + case 'n': + raw = z.startTagIn("noembed", "noframes", "noscript") + case 'p': + raw = z.startTagIn("plaintext") + case 's': + raw = z.startTagIn("script", "style") + case 't': + raw = z.startTagIn("textarea", "title") + case 'x': + raw = z.startTagIn("xmp") + } + if raw { + z.rawTag = strings.ToLower(string(z.buf[z.data.start:z.data.end])) + } + // Look for a self-closing token (e.g. <br/>). + // + // Originally, we did this by just checking that the last character of the + // tag (ignoring the closing bracket) was a solidus (/) character, but this + // is not always accurate. + // + // We need to be careful that we don't misinterpret a non-self-closing tag + // as self-closing, as can happen if the tag contains unquoted attribute + // values (i.e. <p a=/>). + // + // To avoid this, we check that the last non-bracket character of the tag + // (z.raw.end-2) isn't the same character as the last non-quote character of + // the last attribute of the tag (z.pendingAttr[1].end-1), if the tag has + // attributes. + nAttrs := len(z.attr) + if z.err == nil && z.buf[z.raw.end-2] == '/' && (nAttrs == 0 || z.raw.end-2 != z.attr[nAttrs-1][1].end-1) { + return SelfClosingTagToken + } + return StartTagToken +} + +// readTag reads the next tag token and its attributes. If saveAttr, those +// attributes are saved in z.attr, otherwise z.attr is set to an empty slice. +// The opening "<a" or "</a" has already been consumed, where 'a' means anything +// in [A-Za-z]. +func (z *Tokenizer) readTag(saveAttr bool) { + z.attr = z.attr[:0] + z.nAttrReturned = 0 + // Read the tag name and attribute key/value pairs. + z.readTagName() + if z.skipWhiteSpace(); z.err != nil { + return + } + for { + c := z.readByte() + if z.err != nil || c == '>' { + break + } + z.raw.end-- + z.readTagAttrKey() + z.readTagAttrVal() + // Save pendingAttr if saveAttr and that attribute has a non-empty key. + if saveAttr && z.pendingAttr[0].start != z.pendingAttr[0].end { + z.attr = append(z.attr, z.pendingAttr) + } + if z.skipWhiteSpace(); z.err != nil { + break + } + } +} + +// readTagName sets z.data to the "div" in "<div k=v>". The reader (z.raw.end) +// is positioned such that the first byte of the tag name (the "d" in "<div") +// has already been consumed. +func (z *Tokenizer) readTagName() { + z.data.start = z.raw.end - 1 + for { + c := z.readByte() + if z.err != nil { + z.data.end = z.raw.end + return + } + switch c { + case ' ', '\n', '\r', '\t', '\f': + z.data.end = z.raw.end - 1 + return + case '/', '>': + z.raw.end-- + z.data.end = z.raw.end + return + } + } +} + +// readTagAttrKey sets z.pendingAttr[0] to the "k" in "<div k=v>". +// Precondition: z.err == nil. +func (z *Tokenizer) readTagAttrKey() { + z.pendingAttr[0].start = z.raw.end + for { + c := z.readByte() + if z.err != nil { + z.pendingAttr[0].end = z.raw.end + return + } + switch c { + case '=': + if z.pendingAttr[0].start+1 == z.raw.end { + // WHATWG 13.2.5.32, if we see an equals sign before the attribute name + // begins, we treat it as a character in the attribute name and continue. + continue + } + fallthrough + case ' ', '\n', '\r', '\t', '\f', '/', '>': + // WHATWG 13.2.5.33 Attribute name state + // We need to reconsume the char in the after attribute name state to support the / character + z.raw.end-- + z.pendingAttr[0].end = z.raw.end + return + } + } +} + +// readTagAttrVal sets z.pendingAttr[1] to the "v" in "<div k=v>". +func (z *Tokenizer) readTagAttrVal() { + z.pendingAttr[1].start = z.raw.end + z.pendingAttr[1].end = z.raw.end + if z.skipWhiteSpace(); z.err != nil { + return + } + c := z.readByte() + if z.err != nil { + return + } + if c == '/' { + // WHATWG 13.2.5.34 After attribute name state + // U+002F SOLIDUS (/) - Switch to the self-closing start tag state. + return + } + if c != '=' { + z.raw.end-- + return + } + if z.skipWhiteSpace(); z.err != nil { + return + } + quote := z.readByte() + if z.err != nil { + return + } + switch quote { + case '>': + z.raw.end-- + return + + case '\'', '"': + z.pendingAttr[1].start = z.raw.end + for { + c := z.readByte() + if z.err != nil { + z.pendingAttr[1].end = z.raw.end + return + } + if c == quote { + z.pendingAttr[1].end = z.raw.end - 1 + return + } + } + + default: + z.pendingAttr[1].start = z.raw.end - 1 + for { + c := z.readByte() + if z.err != nil { + z.pendingAttr[1].end = z.raw.end + return + } + switch c { + case ' ', '\n', '\r', '\t', '\f': + z.pendingAttr[1].end = z.raw.end - 1 + return + case '>': + z.raw.end-- + z.pendingAttr[1].end = z.raw.end + return + } + } + } +} + +// Next scans the next token and returns its type. +func (z *Tokenizer) Next() TokenType { + z.raw.start = z.raw.end + z.data.start = z.raw.end + z.data.end = z.raw.end + if z.err != nil { + z.tt = ErrorToken + return z.tt + } + if z.rawTag != "" { + if z.rawTag == "plaintext" { + // Read everything up to EOF. + for z.err == nil { + z.readByte() + } + z.data.end = z.raw.end + z.textIsRaw = true + } else { + z.readRawOrRCDATA() + } + if z.data.end > z.data.start { + z.tt = TextToken + z.convertNUL = true + return z.tt + } + } + z.textIsRaw = false + z.convertNUL = false + +loop: + for { + c := z.readByte() + if z.err != nil { + break loop + } + if c != '<' { + continue loop + } + + // Check if the '<' we have just read is part of a tag, comment + // or doctype. If not, it's part of the accumulated text token. + c = z.readByte() + if z.err != nil { + break loop + } + var tokenType TokenType + switch { + case 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z': + tokenType = StartTagToken + case c == '/': + tokenType = EndTagToken + case c == '!' || c == '?': + // We use CommentToken to mean any of "<!--actual comments-->", + // "<!DOCTYPE declarations>" and "<?xml processing instructions?>". + tokenType = CommentToken + default: + // Reconsume the current character. + z.raw.end-- + continue + } + + // We have a non-text token, but we might have accumulated some text + // before that. If so, we return the text first, and return the non- + // text token on the subsequent call to Next. + if x := z.raw.end - len("<a"); z.raw.start < x { + z.raw.end = x + z.data.end = x + z.tt = TextToken + return z.tt + } + switch tokenType { + case StartTagToken: + z.tt = z.readStartTag() + return z.tt + case EndTagToken: + c = z.readByte() + if z.err != nil { + break loop + } + if c == '>' { + // "</>" does not generate a token at all. Generate an empty comment + // to allow passthrough clients to pick up the data using Raw. + // Reset the tokenizer state and start again. + z.tt = CommentToken + return z.tt + } + if 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' { + z.readTag(false) + if z.err != nil { + z.tt = ErrorToken + } else { + z.tt = EndTagToken + } + return z.tt + } + z.raw.end-- + z.readUntilCloseAngle() + z.tt = CommentToken + return z.tt + case CommentToken: + if c == '!' { + z.tt = z.readMarkupDeclaration() + return z.tt + } + z.raw.end-- + z.readUntilCloseAngle() + z.tt = CommentToken + return z.tt + } + } + if z.raw.start < z.raw.end { + z.data.end = z.raw.end + z.tt = TextToken + return z.tt + } + z.tt = ErrorToken + return z.tt +} + +// Raw returns the unmodified text of the current token. Calling Next, Token, +// Text, TagName or TagAttr may change the contents of the returned slice. +// +// The token stream's raw bytes partition the byte stream (up until an +// ErrorToken). There are no overlaps or gaps between two consecutive token's +// raw bytes. One implication is that the byte offset of the current token is +// the sum of the lengths of all previous tokens' raw bytes. +func (z *Tokenizer) Raw() []byte { + return z.buf[z.raw.start:z.raw.end] +} + +// convertNewlines converts "\r" and "\r\n" in s to "\n". +// The conversion happens in place, but the resulting slice may be shorter. +func convertNewlines(s []byte) []byte { + for i, c := range s { + if c != '\r' { + continue + } + + src := i + 1 + if src >= len(s) || s[src] != '\n' { + s[i] = '\n' + continue + } + + dst := i + for src < len(s) { + if s[src] == '\r' { + if src+1 < len(s) && s[src+1] == '\n' { + src++ + } + s[dst] = '\n' + } else { + s[dst] = s[src] + } + src++ + dst++ + } + return s[:dst] + } + return s +} + +var ( + nul = []byte("\x00") + replacement = []byte("\ufffd") +) + +// Text returns the unescaped text of a text, comment or doctype token. The +// contents of the returned slice may change on the next call to Next. +func (z *Tokenizer) Text() []byte { + switch z.tt { + case TextToken, CommentToken, DoctypeToken: + s := z.buf[z.data.start:z.data.end] + z.data.start = z.raw.end + z.data.end = z.raw.end + s = convertNewlines(s) + if (z.convertNUL || z.tt == CommentToken) && bytes.Contains(s, nul) { + s = bytes.Replace(s, nul, replacement, -1) + } + if !z.textIsRaw { + s = unescape(s, false) + } + return s + } + return nil +} + +// TagName returns the lower-cased name of a tag token (the `img` out of +// `<IMG SRC="foo">`) and whether the tag has attributes. +// The contents of the returned slice may change on the next call to Next. +func (z *Tokenizer) TagName() (name []byte, hasAttr bool) { + if z.data.start < z.data.end { + switch z.tt { + case StartTagToken, EndTagToken, SelfClosingTagToken: + s := z.buf[z.data.start:z.data.end] + z.data.start = z.raw.end + z.data.end = z.raw.end + return lower(s), z.nAttrReturned < len(z.attr) + } + } + return nil, false +} + +// TagAttr returns the lower-cased key and unescaped value of the next unparsed +// attribute for the current tag token and whether there are more attributes. +// The contents of the returned slices may change on the next call to Next. +func (z *Tokenizer) TagAttr() (key, val []byte, moreAttr bool) { + if z.nAttrReturned < len(z.attr) { + switch z.tt { + case StartTagToken, SelfClosingTagToken: + x := z.attr[z.nAttrReturned] + z.nAttrReturned++ + key = z.buf[x[0].start:x[0].end] + val = z.buf[x[1].start:x[1].end] + return lower(key), unescape(convertNewlines(val), true), z.nAttrReturned < len(z.attr) + } + } + return nil, nil, false +} + +// Token returns the current Token. The result's Data and Attr values remain +// valid after subsequent Next calls. +func (z *Tokenizer) Token() Token { + t := Token{Type: z.tt} + switch z.tt { + case TextToken, CommentToken, DoctypeToken: + t.Data = string(z.Text()) + case StartTagToken, SelfClosingTagToken, EndTagToken: + name, moreAttr := z.TagName() + for moreAttr { + var key, val []byte + key, val, moreAttr = z.TagAttr() + t.Attr = append(t.Attr, Attribute{"", atom.String(key), string(val)}) + } + if a := atom.Lookup(name); a != 0 { + t.DataAtom, t.Data = a, a.String() + } else { + t.DataAtom, t.Data = 0, string(name) + } + } + return t +} + +// SetMaxBuf sets a limit on the amount of data buffered during tokenization. +// A value of 0 means unlimited. +func (z *Tokenizer) SetMaxBuf(n int) { + z.maxBuf = n +} + +// NewTokenizer returns a new HTML Tokenizer for the given Reader. +// The input is assumed to be UTF-8 encoded. +func NewTokenizer(r io.Reader) *Tokenizer { + return NewTokenizerFragment(r, "") +} + +// NewTokenizerFragment returns a new HTML Tokenizer for the given Reader, for +// tokenizing an existing element's InnerHTML fragment. contextTag is that +// element's tag, such as "div" or "iframe". +// +// For example, how the InnerHTML "a<b" is tokenized depends on whether it is +// for a <p> tag or a <script> tag. +// +// The input is assumed to be UTF-8 encoded. +func NewTokenizerFragment(r io.Reader, contextTag string) *Tokenizer { + z := &Tokenizer{ + r: r, + buf: make([]byte, 0, 4096), + } + if contextTag != "" { + switch s := strings.ToLower(contextTag); s { + case "iframe", "noembed", "noframes", "noscript", "plaintext", "script", "style", "title", "textarea", "xmp": + z.rawTag = s + } + } + return z +} diff --git a/vendor/golang.org/x/net/internal/socks/client.go b/vendor/golang.org/x/net/internal/socks/client.go new file mode 100644 index 0000000000..3d6f516a59 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socks/client.go @@ -0,0 +1,168 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socks + +import ( + "context" + "errors" + "io" + "net" + "strconv" + "time" +) + +var ( + noDeadline = time.Time{} + aLongTimeAgo = time.Unix(1, 0) +) + +func (d *Dialer) connect(ctx context.Context, c net.Conn, address string) (_ net.Addr, ctxErr error) { + host, port, err := splitHostPort(address) + if err != nil { + return nil, err + } + if deadline, ok := ctx.Deadline(); ok && !deadline.IsZero() { + c.SetDeadline(deadline) + defer c.SetDeadline(noDeadline) + } + if ctx != context.Background() { + errCh := make(chan error, 1) + done := make(chan struct{}) + defer func() { + close(done) + if ctxErr == nil { + ctxErr = <-errCh + } + }() + go func() { + select { + case <-ctx.Done(): + c.SetDeadline(aLongTimeAgo) + errCh <- ctx.Err() + case <-done: + errCh <- nil + } + }() + } + + b := make([]byte, 0, 6+len(host)) // the size here is just an estimate + b = append(b, Version5) + if len(d.AuthMethods) == 0 || d.Authenticate == nil { + b = append(b, 1, byte(AuthMethodNotRequired)) + } else { + ams := d.AuthMethods + if len(ams) > 255 { + return nil, errors.New("too many authentication methods") + } + b = append(b, byte(len(ams))) + for _, am := range ams { + b = append(b, byte(am)) + } + } + if _, ctxErr = c.Write(b); ctxErr != nil { + return + } + + if _, ctxErr = io.ReadFull(c, b[:2]); ctxErr != nil { + return + } + if b[0] != Version5 { + return nil, errors.New("unexpected protocol version " + strconv.Itoa(int(b[0]))) + } + am := AuthMethod(b[1]) + if am == AuthMethodNoAcceptableMethods { + return nil, errors.New("no acceptable authentication methods") + } + if d.Authenticate != nil { + if ctxErr = d.Authenticate(ctx, c, am); ctxErr != nil { + return + } + } + + b = b[:0] + b = append(b, Version5, byte(d.cmd), 0) + if ip := net.ParseIP(host); ip != nil { + if ip4 := ip.To4(); ip4 != nil { + b = append(b, AddrTypeIPv4) + b = append(b, ip4...) + } else if ip6 := ip.To16(); ip6 != nil { + b = append(b, AddrTypeIPv6) + b = append(b, ip6...) + } else { + return nil, errors.New("unknown address type") + } + } else { + if len(host) > 255 { + return nil, errors.New("FQDN too long") + } + b = append(b, AddrTypeFQDN) + b = append(b, byte(len(host))) + b = append(b, host...) + } + b = append(b, byte(port>>8), byte(port)) + if _, ctxErr = c.Write(b); ctxErr != nil { + return + } + + if _, ctxErr = io.ReadFull(c, b[:4]); ctxErr != nil { + return + } + if b[0] != Version5 { + return nil, errors.New("unexpected protocol version " + strconv.Itoa(int(b[0]))) + } + if cmdErr := Reply(b[1]); cmdErr != StatusSucceeded { + return nil, errors.New("unknown error " + cmdErr.String()) + } + if b[2] != 0 { + return nil, errors.New("non-zero reserved field") + } + l := 2 + var a Addr + switch b[3] { + case AddrTypeIPv4: + l += net.IPv4len + a.IP = make(net.IP, net.IPv4len) + case AddrTypeIPv6: + l += net.IPv6len + a.IP = make(net.IP, net.IPv6len) + case AddrTypeFQDN: + if _, err := io.ReadFull(c, b[:1]); err != nil { + return nil, err + } + l += int(b[0]) + default: + return nil, errors.New("unknown address type " + strconv.Itoa(int(b[3]))) + } + if cap(b) < l { + b = make([]byte, l) + } else { + b = b[:l] + } + if _, ctxErr = io.ReadFull(c, b); ctxErr != nil { + return + } + if a.IP != nil { + copy(a.IP, b) + } else { + a.Name = string(b[:len(b)-2]) + } + a.Port = int(b[len(b)-2])<<8 | int(b[len(b)-1]) + return &a, nil +} + +func splitHostPort(address string) (string, int, error) { + host, port, err := net.SplitHostPort(address) + if err != nil { + return "", 0, err + } + portnum, err := strconv.Atoi(port) + if err != nil { + return "", 0, err + } + if 1 > portnum || portnum > 0xffff { + return "", 0, errors.New("port number out of range " + port) + } + return host, portnum, nil +} diff --git a/vendor/golang.org/x/net/internal/socks/socks.go b/vendor/golang.org/x/net/internal/socks/socks.go new file mode 100644 index 0000000000..8eedb84cec --- /dev/null +++ b/vendor/golang.org/x/net/internal/socks/socks.go @@ -0,0 +1,317 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package socks provides a SOCKS version 5 client implementation. +// +// SOCKS protocol version 5 is defined in RFC 1928. +// Username/Password authentication for SOCKS version 5 is defined in +// RFC 1929. +package socks + +import ( + "context" + "errors" + "io" + "net" + "strconv" +) + +// A Command represents a SOCKS command. +type Command int + +func (cmd Command) String() string { + switch cmd { + case CmdConnect: + return "socks connect" + case cmdBind: + return "socks bind" + default: + return "socks " + strconv.Itoa(int(cmd)) + } +} + +// An AuthMethod represents a SOCKS authentication method. +type AuthMethod int + +// A Reply represents a SOCKS command reply code. +type Reply int + +func (code Reply) String() string { + switch code { + case StatusSucceeded: + return "succeeded" + case 0x01: + return "general SOCKS server failure" + case 0x02: + return "connection not allowed by ruleset" + case 0x03: + return "network unreachable" + case 0x04: + return "host unreachable" + case 0x05: + return "connection refused" + case 0x06: + return "TTL expired" + case 0x07: + return "command not supported" + case 0x08: + return "address type not supported" + default: + return "unknown code: " + strconv.Itoa(int(code)) + } +} + +// Wire protocol constants. +const ( + Version5 = 0x05 + + AddrTypeIPv4 = 0x01 + AddrTypeFQDN = 0x03 + AddrTypeIPv6 = 0x04 + + CmdConnect Command = 0x01 // establishes an active-open forward proxy connection + cmdBind Command = 0x02 // establishes a passive-open forward proxy connection + + AuthMethodNotRequired AuthMethod = 0x00 // no authentication required + AuthMethodUsernamePassword AuthMethod = 0x02 // use username/password + AuthMethodNoAcceptableMethods AuthMethod = 0xff // no acceptable authentication methods + + StatusSucceeded Reply = 0x00 +) + +// An Addr represents a SOCKS-specific address. +// Either Name or IP is used exclusively. +type Addr struct { + Name string // fully-qualified domain name + IP net.IP + Port int +} + +func (a *Addr) Network() string { return "socks" } + +func (a *Addr) String() string { + if a == nil { + return "<nil>" + } + port := strconv.Itoa(a.Port) + if a.IP == nil { + return net.JoinHostPort(a.Name, port) + } + return net.JoinHostPort(a.IP.String(), port) +} + +// A Conn represents a forward proxy connection. +type Conn struct { + net.Conn + + boundAddr net.Addr +} + +// BoundAddr returns the address assigned by the proxy server for +// connecting to the command target address from the proxy server. +func (c *Conn) BoundAddr() net.Addr { + if c == nil { + return nil + } + return c.boundAddr +} + +// A Dialer holds SOCKS-specific options. +type Dialer struct { + cmd Command // either CmdConnect or cmdBind + proxyNetwork string // network between a proxy server and a client + proxyAddress string // proxy server address + + // ProxyDial specifies the optional dial function for + // establishing the transport connection. + ProxyDial func(context.Context, string, string) (net.Conn, error) + + // AuthMethods specifies the list of request authentication + // methods. + // If empty, SOCKS client requests only AuthMethodNotRequired. + AuthMethods []AuthMethod + + // Authenticate specifies the optional authentication + // function. It must be non-nil when AuthMethods is not empty. + // It must return an error when the authentication is failed. + Authenticate func(context.Context, io.ReadWriter, AuthMethod) error +} + +// DialContext connects to the provided address on the provided +// network. +// +// The returned error value may be a net.OpError. When the Op field of +// net.OpError contains "socks", the Source field contains a proxy +// server address and the Addr field contains a command target +// address. +// +// See func Dial of the net package of standard library for a +// description of the network and address parameters. +func (d *Dialer) DialContext(ctx context.Context, network, address string) (net.Conn, error) { + if err := d.validateTarget(network, address); err != nil { + proxy, dst, _ := d.pathAddrs(address) + return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: err} + } + if ctx == nil { + proxy, dst, _ := d.pathAddrs(address) + return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: errors.New("nil context")} + } + var err error + var c net.Conn + if d.ProxyDial != nil { + c, err = d.ProxyDial(ctx, d.proxyNetwork, d.proxyAddress) + } else { + var dd net.Dialer + c, err = dd.DialContext(ctx, d.proxyNetwork, d.proxyAddress) + } + if err != nil { + proxy, dst, _ := d.pathAddrs(address) + return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: err} + } + a, err := d.connect(ctx, c, address) + if err != nil { + c.Close() + proxy, dst, _ := d.pathAddrs(address) + return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: err} + } + return &Conn{Conn: c, boundAddr: a}, nil +} + +// DialWithConn initiates a connection from SOCKS server to the target +// network and address using the connection c that is already +// connected to the SOCKS server. +// +// It returns the connection's local address assigned by the SOCKS +// server. +func (d *Dialer) DialWithConn(ctx context.Context, c net.Conn, network, address string) (net.Addr, error) { + if err := d.validateTarget(network, address); err != nil { + proxy, dst, _ := d.pathAddrs(address) + return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: err} + } + if ctx == nil { + proxy, dst, _ := d.pathAddrs(address) + return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: errors.New("nil context")} + } + a, err := d.connect(ctx, c, address) + if err != nil { + proxy, dst, _ := d.pathAddrs(address) + return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: err} + } + return a, nil +} + +// Dial connects to the provided address on the provided network. +// +// Unlike DialContext, it returns a raw transport connection instead +// of a forward proxy connection. +// +// Deprecated: Use DialContext or DialWithConn instead. +func (d *Dialer) Dial(network, address string) (net.Conn, error) { + if err := d.validateTarget(network, address); err != nil { + proxy, dst, _ := d.pathAddrs(address) + return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: err} + } + var err error + var c net.Conn + if d.ProxyDial != nil { + c, err = d.ProxyDial(context.Background(), d.proxyNetwork, d.proxyAddress) + } else { + c, err = net.Dial(d.proxyNetwork, d.proxyAddress) + } + if err != nil { + proxy, dst, _ := d.pathAddrs(address) + return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: err} + } + if _, err := d.DialWithConn(context.Background(), c, network, address); err != nil { + c.Close() + return nil, err + } + return c, nil +} + +func (d *Dialer) validateTarget(network, address string) error { + switch network { + case "tcp", "tcp6", "tcp4": + default: + return errors.New("network not implemented") + } + switch d.cmd { + case CmdConnect, cmdBind: + default: + return errors.New("command not implemented") + } + return nil +} + +func (d *Dialer) pathAddrs(address string) (proxy, dst net.Addr, err error) { + for i, s := range []string{d.proxyAddress, address} { + host, port, err := splitHostPort(s) + if err != nil { + return nil, nil, err + } + a := &Addr{Port: port} + a.IP = net.ParseIP(host) + if a.IP == nil { + a.Name = host + } + if i == 0 { + proxy = a + } else { + dst = a + } + } + return +} + +// NewDialer returns a new Dialer that dials through the provided +// proxy server's network and address. +func NewDialer(network, address string) *Dialer { + return &Dialer{proxyNetwork: network, proxyAddress: address, cmd: CmdConnect} +} + +const ( + authUsernamePasswordVersion = 0x01 + authStatusSucceeded = 0x00 +) + +// UsernamePassword are the credentials for the username/password +// authentication method. +type UsernamePassword struct { + Username string + Password string +} + +// Authenticate authenticates a pair of username and password with the +// proxy server. +func (up *UsernamePassword) Authenticate(ctx context.Context, rw io.ReadWriter, auth AuthMethod) error { + switch auth { + case AuthMethodNotRequired: + return nil + case AuthMethodUsernamePassword: + if len(up.Username) == 0 || len(up.Username) > 255 || len(up.Password) > 255 { + return errors.New("invalid username/password") + } + b := []byte{authUsernamePasswordVersion} + b = append(b, byte(len(up.Username))) + b = append(b, up.Username...) + b = append(b, byte(len(up.Password))) + b = append(b, up.Password...) + // TODO(mikio): handle IO deadlines and cancellation if + // necessary + if _, err := rw.Write(b); err != nil { + return err + } + if _, err := io.ReadFull(rw, b[:2]); err != nil { + return err + } + if b[0] != authUsernamePasswordVersion { + return errors.New("invalid username/password version") + } + if b[1] != authStatusSucceeded { + return errors.New("username/password authentication failed") + } + return nil + } + return errors.New("unsupported authentication method " + strconv.Itoa(int(auth))) +} diff --git a/vendor/golang.org/x/net/proxy/dial.go b/vendor/golang.org/x/net/proxy/dial.go new file mode 100644 index 0000000000..811c2e4e96 --- /dev/null +++ b/vendor/golang.org/x/net/proxy/dial.go @@ -0,0 +1,54 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proxy + +import ( + "context" + "net" +) + +// A ContextDialer dials using a context. +type ContextDialer interface { + DialContext(ctx context.Context, network, address string) (net.Conn, error) +} + +// Dial works like DialContext on net.Dialer but using a dialer returned by FromEnvironment. +// +// The passed ctx is only used for returning the Conn, not the lifetime of the Conn. +// +// Custom dialers (registered via RegisterDialerType) that do not implement ContextDialer +// can leak a goroutine for as long as it takes the underlying Dialer implementation to timeout. +// +// A Conn returned from a successful Dial after the context has been cancelled will be immediately closed. +func Dial(ctx context.Context, network, address string) (net.Conn, error) { + d := FromEnvironment() + if xd, ok := d.(ContextDialer); ok { + return xd.DialContext(ctx, network, address) + } + return dialContext(ctx, d, network, address) +} + +// WARNING: this can leak a goroutine for as long as the underlying Dialer implementation takes to timeout +// A Conn returned from a successful Dial after the context has been cancelled will be immediately closed. +func dialContext(ctx context.Context, d Dialer, network, address string) (net.Conn, error) { + var ( + conn net.Conn + done = make(chan struct{}, 1) + err error + ) + go func() { + conn, err = d.Dial(network, address) + close(done) + if conn != nil && ctx.Err() != nil { + conn.Close() + } + }() + select { + case <-ctx.Done(): + err = ctx.Err() + case <-done: + } + return conn, err +} diff --git a/vendor/golang.org/x/net/proxy/direct.go b/vendor/golang.org/x/net/proxy/direct.go new file mode 100644 index 0000000000..3d66bdef9d --- /dev/null +++ b/vendor/golang.org/x/net/proxy/direct.go @@ -0,0 +1,31 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proxy + +import ( + "context" + "net" +) + +type direct struct{} + +// Direct implements Dialer by making network connections directly using net.Dial or net.DialContext. +var Direct = direct{} + +var ( + _ Dialer = Direct + _ ContextDialer = Direct +) + +// Dial directly invokes net.Dial with the supplied parameters. +func (direct) Dial(network, addr string) (net.Conn, error) { + return net.Dial(network, addr) +} + +// DialContext instantiates a net.Dialer and invokes its DialContext receiver with the supplied parameters. +func (direct) DialContext(ctx context.Context, network, addr string) (net.Conn, error) { + var d net.Dialer + return d.DialContext(ctx, network, addr) +} diff --git a/vendor/golang.org/x/net/proxy/per_host.go b/vendor/golang.org/x/net/proxy/per_host.go new file mode 100644 index 0000000000..32bdf435ec --- /dev/null +++ b/vendor/golang.org/x/net/proxy/per_host.go @@ -0,0 +1,153 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proxy + +import ( + "context" + "net" + "net/netip" + "strings" +) + +// A PerHost directs connections to a default Dialer unless the host name +// requested matches one of a number of exceptions. +type PerHost struct { + def, bypass Dialer + + bypassNetworks []*net.IPNet + bypassIPs []net.IP + bypassZones []string + bypassHosts []string +} + +// NewPerHost returns a PerHost Dialer that directs connections to either +// defaultDialer or bypass, depending on whether the connection matches one of +// the configured rules. +func NewPerHost(defaultDialer, bypass Dialer) *PerHost { + return &PerHost{ + def: defaultDialer, + bypass: bypass, + } +} + +// Dial connects to the address addr on the given network through either +// defaultDialer or bypass. +func (p *PerHost) Dial(network, addr string) (c net.Conn, err error) { + host, _, err := net.SplitHostPort(addr) + if err != nil { + return nil, err + } + + return p.dialerForRequest(host).Dial(network, addr) +} + +// DialContext connects to the address addr on the given network through either +// defaultDialer or bypass. +func (p *PerHost) DialContext(ctx context.Context, network, addr string) (c net.Conn, err error) { + host, _, err := net.SplitHostPort(addr) + if err != nil { + return nil, err + } + d := p.dialerForRequest(host) + if x, ok := d.(ContextDialer); ok { + return x.DialContext(ctx, network, addr) + } + return dialContext(ctx, d, network, addr) +} + +func (p *PerHost) dialerForRequest(host string) Dialer { + if nip, err := netip.ParseAddr(host); err == nil { + ip := net.IP(nip.AsSlice()) + for _, net := range p.bypassNetworks { + if net.Contains(ip) { + return p.bypass + } + } + for _, bypassIP := range p.bypassIPs { + if bypassIP.Equal(ip) { + return p.bypass + } + } + return p.def + } + + for _, zone := range p.bypassZones { + if strings.HasSuffix(host, zone) { + return p.bypass + } + if host == zone[1:] { + // For a zone ".example.com", we match "example.com" + // too. + return p.bypass + } + } + for _, bypassHost := range p.bypassHosts { + if bypassHost == host { + return p.bypass + } + } + return p.def +} + +// AddFromString parses a string that contains comma-separated values +// specifying hosts that should use the bypass proxy. Each value is either an +// IP address, a CIDR range, a zone (*.example.com) or a host name +// (localhost). A best effort is made to parse the string and errors are +// ignored. +func (p *PerHost) AddFromString(s string) { + hosts := strings.Split(s, ",") + for _, host := range hosts { + host = strings.TrimSpace(host) + if len(host) == 0 { + continue + } + if strings.Contains(host, "/") { + // We assume that it's a CIDR address like 127.0.0.0/8 + if _, net, err := net.ParseCIDR(host); err == nil { + p.AddNetwork(net) + } + continue + } + if nip, err := netip.ParseAddr(host); err == nil { + p.AddIP(net.IP(nip.AsSlice())) + continue + } + if strings.HasPrefix(host, "*.") { + p.AddZone(host[1:]) + continue + } + p.AddHost(host) + } +} + +// AddIP specifies an IP address that will use the bypass proxy. Note that +// this will only take effect if a literal IP address is dialed. A connection +// to a named host will never match an IP. +func (p *PerHost) AddIP(ip net.IP) { + p.bypassIPs = append(p.bypassIPs, ip) +} + +// AddNetwork specifies an IP range that will use the bypass proxy. Note that +// this will only take effect if a literal IP address is dialed. A connection +// to a named host will never match. +func (p *PerHost) AddNetwork(net *net.IPNet) { + p.bypassNetworks = append(p.bypassNetworks, net) +} + +// AddZone specifies a DNS suffix that will use the bypass proxy. A zone of +// "example.com" matches "example.com" and all of its subdomains. +func (p *PerHost) AddZone(zone string) { + zone = strings.TrimSuffix(zone, ".") + if !strings.HasPrefix(zone, ".") { + zone = "." + zone + } + p.bypassZones = append(p.bypassZones, zone) +} + +// AddHost specifies a host name that will use the bypass proxy. +func (p *PerHost) AddHost(host string) { + host = strings.TrimSuffix(host, ".") + p.bypassHosts = append(p.bypassHosts, host) +} diff --git a/vendor/golang.org/x/net/proxy/proxy.go b/vendor/golang.org/x/net/proxy/proxy.go new file mode 100644 index 0000000000..9ff4b9a776 --- /dev/null +++ b/vendor/golang.org/x/net/proxy/proxy.go @@ -0,0 +1,149 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package proxy provides support for a variety of protocols to proxy network +// data. +package proxy // import "golang.org/x/net/proxy" + +import ( + "errors" + "net" + "net/url" + "os" + "sync" +) + +// A Dialer is a means to establish a connection. +// Custom dialers should also implement ContextDialer. +type Dialer interface { + // Dial connects to the given address via the proxy. + Dial(network, addr string) (c net.Conn, err error) +} + +// Auth contains authentication parameters that specific Dialers may require. +type Auth struct { + User, Password string +} + +// FromEnvironment returns the dialer specified by the proxy-related +// variables in the environment and makes underlying connections +// directly. +func FromEnvironment() Dialer { + return FromEnvironmentUsing(Direct) +} + +// FromEnvironmentUsing returns the dialer specify by the proxy-related +// variables in the environment and makes underlying connections +// using the provided forwarding Dialer (for instance, a *net.Dialer +// with desired configuration). +func FromEnvironmentUsing(forward Dialer) Dialer { + allProxy := allProxyEnv.Get() + if len(allProxy) == 0 { + return forward + } + + proxyURL, err := url.Parse(allProxy) + if err != nil { + return forward + } + proxy, err := FromURL(proxyURL, forward) + if err != nil { + return forward + } + + noProxy := noProxyEnv.Get() + if len(noProxy) == 0 { + return proxy + } + + perHost := NewPerHost(proxy, forward) + perHost.AddFromString(noProxy) + return perHost +} + +// proxySchemes is a map from URL schemes to a function that creates a Dialer +// from a URL with such a scheme. +var proxySchemes map[string]func(*url.URL, Dialer) (Dialer, error) + +// RegisterDialerType takes a URL scheme and a function to generate Dialers from +// a URL with that scheme and a forwarding Dialer. Registered schemes are used +// by FromURL. +func RegisterDialerType(scheme string, f func(*url.URL, Dialer) (Dialer, error)) { + if proxySchemes == nil { + proxySchemes = make(map[string]func(*url.URL, Dialer) (Dialer, error)) + } + proxySchemes[scheme] = f +} + +// FromURL returns a Dialer given a URL specification and an underlying +// Dialer for it to make network requests. +func FromURL(u *url.URL, forward Dialer) (Dialer, error) { + var auth *Auth + if u.User != nil { + auth = new(Auth) + auth.User = u.User.Username() + if p, ok := u.User.Password(); ok { + auth.Password = p + } + } + + switch u.Scheme { + case "socks5", "socks5h": + addr := u.Hostname() + port := u.Port() + if port == "" { + port = "1080" + } + return SOCKS5("tcp", net.JoinHostPort(addr, port), auth, forward) + } + + // If the scheme doesn't match any of the built-in schemes, see if it + // was registered by another package. + if proxySchemes != nil { + if f, ok := proxySchemes[u.Scheme]; ok { + return f(u, forward) + } + } + + return nil, errors.New("proxy: unknown scheme: " + u.Scheme) +} + +var ( + allProxyEnv = &envOnce{ + names: []string{"ALL_PROXY", "all_proxy"}, + } + noProxyEnv = &envOnce{ + names: []string{"NO_PROXY", "no_proxy"}, + } +) + +// envOnce looks up an environment variable (optionally by multiple +// names) once. It mitigates expensive lookups on some platforms +// (e.g. Windows). +// (Borrowed from net/http/transport.go) +type envOnce struct { + names []string + once sync.Once + val string +} + +func (e *envOnce) Get() string { + e.once.Do(e.init) + return e.val +} + +func (e *envOnce) init() { + for _, n := range e.names { + e.val = os.Getenv(n) + if e.val != "" { + return + } + } +} + +// reset is used by tests +func (e *envOnce) reset() { + e.once = sync.Once{} + e.val = "" +} diff --git a/vendor/golang.org/x/net/proxy/socks5.go b/vendor/golang.org/x/net/proxy/socks5.go new file mode 100644 index 0000000000..c91651f96d --- /dev/null +++ b/vendor/golang.org/x/net/proxy/socks5.go @@ -0,0 +1,42 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proxy + +import ( + "context" + "net" + + "golang.org/x/net/internal/socks" +) + +// SOCKS5 returns a Dialer that makes SOCKSv5 connections to the given +// address with an optional username and password. +// See RFC 1928 and RFC 1929. +func SOCKS5(network, address string, auth *Auth, forward Dialer) (Dialer, error) { + d := socks.NewDialer(network, address) + if forward != nil { + if f, ok := forward.(ContextDialer); ok { + d.ProxyDial = func(ctx context.Context, network string, address string) (net.Conn, error) { + return f.DialContext(ctx, network, address) + } + } else { + d.ProxyDial = func(ctx context.Context, network string, address string) (net.Conn, error) { + return dialContext(ctx, forward, network, address) + } + } + } + if auth != nil { + up := socks.UsernamePassword{ + Username: auth.User, + Password: auth.Password, + } + d.AuthMethods = []socks.AuthMethod{ + socks.AuthMethodNotRequired, + socks.AuthMethodUsernamePassword, + } + d.Authenticate = up.Authenticate + } + return d, nil +} diff --git a/vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/connection.go b/vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/connection.go new file mode 100644 index 0000000000..d4ceab84f0 --- /dev/null +++ b/vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/connection.go @@ -0,0 +1,204 @@ +/* +Copyright 2015 The Kubernetes 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 spdy + +import ( + "net" + "net/http" + "sync" + "time" + + "github.com/moby/spdystream" + "k8s.io/apimachinery/pkg/util/httpstream" + "k8s.io/klog/v2" +) + +// connection maintains state about a spdystream.Connection and its associated +// streams. +type connection struct { + conn *spdystream.Connection + streams map[uint32]httpstream.Stream + streamLock sync.Mutex + newStreamHandler httpstream.NewStreamHandler + ping func() (time.Duration, error) +} + +// NewClientConnection creates a new SPDY client connection. +func NewClientConnection(conn net.Conn) (httpstream.Connection, error) { + return NewClientConnectionWithPings(conn, 0) +} + +// NewClientConnectionWithPings creates a new SPDY client connection. +// +// If pingPeriod is non-zero, a background goroutine will send periodic Ping +// frames to the server. Use this to keep idle connections through certain load +// balancers alive longer. +func NewClientConnectionWithPings(conn net.Conn, pingPeriod time.Duration) (httpstream.Connection, error) { + spdyConn, err := spdystream.NewConnection(conn, false) + if err != nil { + defer conn.Close() + return nil, err + } + + return newConnection(spdyConn, httpstream.NoOpNewStreamHandler, pingPeriod, spdyConn.Ping), nil +} + +// NewServerConnection creates a new SPDY server connection. newStreamHandler +// will be invoked when the server receives a newly created stream from the +// client. +func NewServerConnection(conn net.Conn, newStreamHandler httpstream.NewStreamHandler) (httpstream.Connection, error) { + return NewServerConnectionWithPings(conn, newStreamHandler, 0) +} + +// NewServerConnectionWithPings creates a new SPDY server connection. +// newStreamHandler will be invoked when the server receives a newly created +// stream from the client. +// +// If pingPeriod is non-zero, a background goroutine will send periodic Ping +// frames to the server. Use this to keep idle connections through certain load +// balancers alive longer. +func NewServerConnectionWithPings(conn net.Conn, newStreamHandler httpstream.NewStreamHandler, pingPeriod time.Duration) (httpstream.Connection, error) { + spdyConn, err := spdystream.NewConnection(conn, true) + if err != nil { + defer conn.Close() + return nil, err + } + + return newConnection(spdyConn, newStreamHandler, pingPeriod, spdyConn.Ping), nil +} + +// newConnection returns a new connection wrapping conn. newStreamHandler +// will be invoked when the server receives a newly created stream from the +// client. +func newConnection(conn *spdystream.Connection, newStreamHandler httpstream.NewStreamHandler, pingPeriod time.Duration, pingFn func() (time.Duration, error)) httpstream.Connection { + c := &connection{ + conn: conn, + newStreamHandler: newStreamHandler, + ping: pingFn, + streams: make(map[uint32]httpstream.Stream), + } + go conn.Serve(c.newSpdyStream) + if pingPeriod > 0 && pingFn != nil { + go c.sendPings(pingPeriod) + } + return c +} + +// createStreamResponseTimeout indicates how long to wait for the other side to +// acknowledge the new stream before timing out. +const createStreamResponseTimeout = 30 * time.Second + +// Close first sends a reset for all of the connection's streams, and then +// closes the underlying spdystream.Connection. +func (c *connection) Close() error { + c.streamLock.Lock() + for _, s := range c.streams { + // calling Reset instead of Close ensures that all streams are fully torn down + s.Reset() + } + c.streams = make(map[uint32]httpstream.Stream, 0) + c.streamLock.Unlock() + + // now that all streams are fully torn down, it's safe to call close on the underlying connection, + // which should be able to terminate immediately at this point, instead of waiting for any + // remaining graceful stream termination. + return c.conn.Close() +} + +// RemoveStreams can be used to removes a set of streams from the Connection. +func (c *connection) RemoveStreams(streams ...httpstream.Stream) { + c.streamLock.Lock() + for _, stream := range streams { + // It may be possible that the provided stream is nil if timed out. + if stream != nil { + delete(c.streams, stream.Identifier()) + } + } + c.streamLock.Unlock() +} + +// CreateStream creates a new stream with the specified headers and registers +// it with the connection. +func (c *connection) CreateStream(headers http.Header) (httpstream.Stream, error) { + stream, err := c.conn.CreateStream(headers, nil, false) + if err != nil { + return nil, err + } + if err = stream.WaitTimeout(createStreamResponseTimeout); err != nil { + return nil, err + } + + c.registerStream(stream) + return stream, nil +} + +// registerStream adds the stream s to the connection's list of streams that +// it owns. +func (c *connection) registerStream(s httpstream.Stream) { + c.streamLock.Lock() + c.streams[s.Identifier()] = s + c.streamLock.Unlock() +} + +// CloseChan returns a channel that, when closed, indicates that the underlying +// spdystream.Connection has been closed. +func (c *connection) CloseChan() <-chan bool { + return c.conn.CloseChan() +} + +// newSpdyStream is the internal new stream handler used by spdystream.Connection.Serve. +// It calls connection's newStreamHandler, giving it the opportunity to accept or reject +// the stream. If newStreamHandler returns an error, the stream is rejected. If not, the +// stream is accepted and registered with the connection. +func (c *connection) newSpdyStream(stream *spdystream.Stream) { + replySent := make(chan struct{}) + err := c.newStreamHandler(stream, replySent) + rejectStream := (err != nil) + if rejectStream { + klog.Warningf("Stream rejected: %v", err) + stream.Reset() + return + } + + c.registerStream(stream) + stream.SendReply(http.Header{}, rejectStream) + close(replySent) +} + +// SetIdleTimeout sets the amount of time the connection may remain idle before +// it is automatically closed. +func (c *connection) SetIdleTimeout(timeout time.Duration) { + c.conn.SetIdleTimeout(timeout) +} + +func (c *connection) sendPings(period time.Duration) { + t := time.NewTicker(period) + defer t.Stop() + for { + select { + case <-c.conn.CloseChan(): + return + case <-t.C: + } + if _, err := c.ping(); err != nil { + klog.V(3).Infof("SPDY Ping failed: %v", err) + // Continue, in case this is a transient failure. + // c.conn.CloseChan above will tell us when the connection is + // actually closed. + } + } +} diff --git a/vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/roundtripper.go b/vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/roundtripper.go new file mode 100644 index 0000000000..ed131d112f --- /dev/null +++ b/vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/roundtripper.go @@ -0,0 +1,399 @@ +/* +Copyright 2015 The Kubernetes 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 spdy + +import ( + "bufio" + "context" + "crypto/tls" + "encoding/base64" + "errors" + "fmt" + "io" + "net" + "net/http" + "net/http/httputil" + "net/url" + "strings" + "time" + + "golang.org/x/net/proxy" + apierrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/apimachinery/pkg/util/httpstream" + utilnet "k8s.io/apimachinery/pkg/util/net" + apiproxy "k8s.io/apimachinery/pkg/util/proxy" + "k8s.io/apimachinery/third_party/forked/golang/netutil" +) + +// SpdyRoundTripper knows how to upgrade an HTTP request to one that supports +// multiplexed streams. After RoundTrip() is invoked, Conn will be set +// and usable. SpdyRoundTripper implements the UpgradeRoundTripper interface. +type SpdyRoundTripper struct { + //tlsConfig holds the TLS configuration settings to use when connecting + //to the remote server. + tlsConfig *tls.Config + + /* TODO according to http://golang.org/pkg/net/http/#RoundTripper, a RoundTripper + must be safe for use by multiple concurrent goroutines. If this is absolutely + necessary, we could keep a map from http.Request to net.Conn. In practice, + a client will create an http.Client, set the transport to a new insteace of + SpdyRoundTripper, and use it a single time, so this hopefully won't be an issue. + */ + // conn is the underlying network connection to the remote server. + conn net.Conn + + // Dialer is the dialer used to connect. Used if non-nil. + Dialer *net.Dialer + + // proxier knows which proxy to use given a request, defaults to http.ProxyFromEnvironment + // Used primarily for mocking the proxy discovery in tests. + proxier func(req *http.Request) (*url.URL, error) + + // pingPeriod is a period for sending Ping frames over established + // connections. + pingPeriod time.Duration + + // upgradeTransport is an optional substitute for dialing if present. This field is + // mutually exclusive with the "tlsConfig", "Dialer", and "proxier". + upgradeTransport http.RoundTripper +} + +var _ utilnet.TLSClientConfigHolder = &SpdyRoundTripper{} +var _ httpstream.UpgradeRoundTripper = &SpdyRoundTripper{} +var _ utilnet.Dialer = &SpdyRoundTripper{} + +// NewRoundTripper creates a new SpdyRoundTripper that will use the specified +// tlsConfig. +func NewRoundTripper(tlsConfig *tls.Config) (*SpdyRoundTripper, error) { + return NewRoundTripperWithConfig(RoundTripperConfig{ + TLS: tlsConfig, + UpgradeTransport: nil, + }) +} + +// NewRoundTripperWithProxy creates a new SpdyRoundTripper that will use the +// specified tlsConfig and proxy func. +func NewRoundTripperWithProxy(tlsConfig *tls.Config, proxier func(*http.Request) (*url.URL, error)) (*SpdyRoundTripper, error) { + return NewRoundTripperWithConfig(RoundTripperConfig{ + TLS: tlsConfig, + Proxier: proxier, + UpgradeTransport: nil, + }) +} + +// NewRoundTripperWithConfig creates a new SpdyRoundTripper with the specified +// configuration. Returns an error if the SpdyRoundTripper is misconfigured. +func NewRoundTripperWithConfig(cfg RoundTripperConfig) (*SpdyRoundTripper, error) { + // Process UpgradeTransport, which is mutually exclusive to TLSConfig and Proxier. + if cfg.UpgradeTransport != nil { + if cfg.TLS != nil || cfg.Proxier != nil { + return nil, fmt.Errorf("SpdyRoundTripper: UpgradeTransport is mutually exclusive to TLSConfig or Proxier") + } + tlsConfig, err := utilnet.TLSClientConfig(cfg.UpgradeTransport) + if err != nil { + return nil, fmt.Errorf("SpdyRoundTripper: Unable to retrieve TLSConfig from UpgradeTransport: %v", err) + } + cfg.TLS = tlsConfig + } + if cfg.Proxier == nil { + cfg.Proxier = utilnet.NewProxierWithNoProxyCIDR(http.ProxyFromEnvironment) + } + return &SpdyRoundTripper{ + tlsConfig: cfg.TLS, + proxier: cfg.Proxier, + pingPeriod: cfg.PingPeriod, + upgradeTransport: cfg.UpgradeTransport, + }, nil +} + +// RoundTripperConfig is a set of options for an SpdyRoundTripper. +type RoundTripperConfig struct { + // TLS configuration used by the round tripper if UpgradeTransport not present. + TLS *tls.Config + // Proxier is a proxy function invoked on each request. Optional. + Proxier func(*http.Request) (*url.URL, error) + // PingPeriod is a period for sending SPDY Pings on the connection. + // Optional. + PingPeriod time.Duration + // UpgradeTransport is a subtitute transport used for dialing. If set, + // this field will be used instead of "TLS" and "Proxier" for connection creation. + // Optional. + UpgradeTransport http.RoundTripper +} + +// TLSClientConfig implements pkg/util/net.TLSClientConfigHolder for proper TLS checking during +// proxying with a spdy roundtripper. +func (s *SpdyRoundTripper) TLSClientConfig() *tls.Config { + return s.tlsConfig +} + +// Dial implements k8s.io/apimachinery/pkg/util/net.Dialer. +func (s *SpdyRoundTripper) Dial(req *http.Request) (net.Conn, error) { + var conn net.Conn + var err error + if s.upgradeTransport != nil { + conn, err = apiproxy.DialURL(req.Context(), req.URL, s.upgradeTransport) + } else { + conn, err = s.dial(req) + } + if err != nil { + return nil, err + } + + if err := req.Write(conn); err != nil { + conn.Close() + return nil, err + } + + return conn, nil +} + +// dial dials the host specified by req, using TLS if appropriate, optionally +// using a proxy server if one is configured via environment variables. +func (s *SpdyRoundTripper) dial(req *http.Request) (net.Conn, error) { + proxyURL, err := s.proxier(req) + if err != nil { + return nil, err + } + + if proxyURL == nil { + return s.dialWithoutProxy(req.Context(), req.URL) + } + + switch proxyURL.Scheme { + case "socks5": + return s.dialWithSocks5Proxy(req, proxyURL) + case "https", "http", "": + return s.dialWithHttpProxy(req, proxyURL) + } + + return nil, fmt.Errorf("proxy URL scheme not supported: %s", proxyURL.Scheme) +} + +// dialWithHttpProxy dials the host specified by url through an http or an https proxy. +func (s *SpdyRoundTripper) dialWithHttpProxy(req *http.Request, proxyURL *url.URL) (net.Conn, error) { + // ensure we use a canonical host with proxyReq + targetHost := netutil.CanonicalAddr(req.URL) + + // proxying logic adapted from http://blog.h6t.eu/post/74098062923/golang-websocket-with-http-proxy-support + proxyReq := http.Request{ + Method: http.MethodConnect, + URL: &url.URL{}, + Host: targetHost, + } + + proxyReq = *proxyReq.WithContext(req.Context()) + + if pa := s.proxyAuth(proxyURL); pa != "" { + proxyReq.Header = http.Header{} + proxyReq.Header.Set("Proxy-Authorization", pa) + } + + proxyDialConn, err := s.dialWithoutProxy(proxyReq.Context(), proxyURL) + if err != nil { + return nil, err + } + + //nolint:staticcheck // SA1019 ignore deprecated httputil.NewProxyClientConn + proxyClientConn := httputil.NewProxyClientConn(proxyDialConn, nil) + response, err := proxyClientConn.Do(&proxyReq) + //nolint:staticcheck // SA1019 ignore deprecated httputil.ErrPersistEOF: it might be + // returned from the invocation of proxyClientConn.Do + if err != nil && err != httputil.ErrPersistEOF { + return nil, err + } + if response != nil && response.StatusCode >= 300 || response.StatusCode < 200 { + return nil, fmt.Errorf("CONNECT request to %s returned response: %s", proxyURL.Redacted(), response.Status) + } + + rwc, _ := proxyClientConn.Hijack() + + if req.URL.Scheme == "https" { + return s.tlsConn(proxyReq.Context(), rwc, targetHost) + } + return rwc, nil +} + +// dialWithSocks5Proxy dials the host specified by url through a socks5 proxy. +func (s *SpdyRoundTripper) dialWithSocks5Proxy(req *http.Request, proxyURL *url.URL) (net.Conn, error) { + // ensure we use a canonical host with proxyReq + targetHost := netutil.CanonicalAddr(req.URL) + proxyDialAddr := netutil.CanonicalAddr(proxyURL) + + var auth *proxy.Auth + if proxyURL.User != nil { + pass, _ := proxyURL.User.Password() + auth = &proxy.Auth{ + User: proxyURL.User.Username(), + Password: pass, + } + } + + dialer := s.Dialer + if dialer == nil { + dialer = &net.Dialer{ + Timeout: 30 * time.Second, + } + } + + proxyDialer, err := proxy.SOCKS5("tcp", proxyDialAddr, auth, dialer) + if err != nil { + return nil, err + } + + // According to the implementation of proxy.SOCKS5, the type assertion will always succeed + contextDialer, ok := proxyDialer.(proxy.ContextDialer) + if !ok { + return nil, errors.New("SOCKS5 Dialer must implement ContextDialer") + } + + proxyDialConn, err := contextDialer.DialContext(req.Context(), "tcp", targetHost) + if err != nil { + return nil, err + } + + if req.URL.Scheme == "https" { + return s.tlsConn(req.Context(), proxyDialConn, targetHost) + } + return proxyDialConn, nil +} + +// tlsConn returns a TLS client side connection using rwc as the underlying transport. +func (s *SpdyRoundTripper) tlsConn(ctx context.Context, rwc net.Conn, targetHost string) (net.Conn, error) { + + host, _, err := net.SplitHostPort(targetHost) + if err != nil { + return nil, err + } + + tlsConfig := s.tlsConfig + switch { + case tlsConfig == nil: + tlsConfig = &tls.Config{ServerName: host} + case len(tlsConfig.ServerName) == 0: + tlsConfig = tlsConfig.Clone() + tlsConfig.ServerName = host + } + + tlsConn := tls.Client(rwc, tlsConfig) + + if err := tlsConn.HandshakeContext(ctx); err != nil { + tlsConn.Close() + return nil, err + } + + return tlsConn, nil +} + +// dialWithoutProxy dials the host specified by url, using TLS if appropriate. +func (s *SpdyRoundTripper) dialWithoutProxy(ctx context.Context, url *url.URL) (net.Conn, error) { + dialAddr := netutil.CanonicalAddr(url) + dialer := s.Dialer + if dialer == nil { + dialer = &net.Dialer{} + } + + if url.Scheme == "http" { + return dialer.DialContext(ctx, "tcp", dialAddr) + } + + tlsDialer := tls.Dialer{ + NetDialer: dialer, + Config: s.tlsConfig, + } + return tlsDialer.DialContext(ctx, "tcp", dialAddr) +} + +// proxyAuth returns, for a given proxy URL, the value to be used for the Proxy-Authorization header +func (s *SpdyRoundTripper) proxyAuth(proxyURL *url.URL) string { + if proxyURL == nil || proxyURL.User == nil { + return "" + } + username := proxyURL.User.Username() + password, _ := proxyURL.User.Password() + auth := username + ":" + password + return "Basic " + base64.StdEncoding.EncodeToString([]byte(auth)) +} + +// RoundTrip executes the Request and upgrades it. After a successful upgrade, +// clients may call SpdyRoundTripper.Connection() to retrieve the upgraded +// connection. +func (s *SpdyRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { + req = utilnet.CloneRequest(req) + req.Header.Add(httpstream.HeaderConnection, httpstream.HeaderUpgrade) + req.Header.Add(httpstream.HeaderUpgrade, HeaderSpdy31) + + conn, err := s.Dial(req) + if err != nil { + return nil, err + } + + responseReader := bufio.NewReader(conn) + + resp, err := http.ReadResponse(responseReader, nil) + if err != nil { + conn.Close() + return nil, err + } + + s.conn = conn + + return resp, nil +} + +// NewConnection validates the upgrade response, creating and returning a new +// httpstream.Connection if there were no errors. +func (s *SpdyRoundTripper) NewConnection(resp *http.Response) (httpstream.Connection, error) { + connectionHeader := strings.ToLower(resp.Header.Get(httpstream.HeaderConnection)) + upgradeHeader := strings.ToLower(resp.Header.Get(httpstream.HeaderUpgrade)) + if (resp.StatusCode != http.StatusSwitchingProtocols) || !strings.Contains(connectionHeader, strings.ToLower(httpstream.HeaderUpgrade)) || !strings.Contains(upgradeHeader, strings.ToLower(HeaderSpdy31)) { + defer resp.Body.Close() + responseError := "" + responseErrorBytes, err := io.ReadAll(resp.Body) + if err != nil { + responseError = "unable to read error from server response" + } else { + // TODO: I don't belong here, I should be abstracted from this class + if obj, _, err := statusCodecs.UniversalDecoder().Decode(responseErrorBytes, nil, &metav1.Status{}); err == nil { + if status, ok := obj.(*metav1.Status); ok { + return nil, &apierrors.StatusError{ErrStatus: *status} + } + } + responseError = string(responseErrorBytes) + responseError = strings.TrimSpace(responseError) + } + + return nil, fmt.Errorf("unable to upgrade connection: %s", responseError) + } + + return NewClientConnectionWithPings(s.conn, s.pingPeriod) +} + +// statusScheme is private scheme for the decoding here until someone fixes the TODO in NewConnection +var statusScheme = runtime.NewScheme() + +// ParameterCodec knows about query parameters used with the meta v1 API spec. +var statusCodecs = serializer.NewCodecFactory(statusScheme) + +func init() { + statusScheme.AddUnversionedTypes(metav1.SchemeGroupVersion, + &metav1.Status{}, + ) +} diff --git a/vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/upgrade.go b/vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/upgrade.go new file mode 100644 index 0000000000..d30ae2fa3d --- /dev/null +++ b/vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/upgrade.go @@ -0,0 +1,120 @@ +/* +Copyright 2015 The Kubernetes 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 spdy + +import ( + "bufio" + "fmt" + "io" + "net" + "net/http" + "strings" + "sync/atomic" + "time" + + "k8s.io/apimachinery/pkg/util/httpstream" + "k8s.io/apimachinery/pkg/util/runtime" +) + +const HeaderSpdy31 = "SPDY/3.1" + +// responseUpgrader knows how to upgrade HTTP responses. It +// implements the httpstream.ResponseUpgrader interface. +type responseUpgrader struct { + pingPeriod time.Duration +} + +// connWrapper is used to wrap a hijacked connection and its bufio.Reader. All +// calls will be handled directly by the underlying net.Conn with the exception +// of Read and Close calls, which will consider data in the bufio.Reader. This +// ensures that data already inside the used bufio.Reader instance is also +// read. +type connWrapper struct { + net.Conn + closed int32 + bufReader *bufio.Reader +} + +func (w *connWrapper) Read(b []byte) (n int, err error) { + if atomic.LoadInt32(&w.closed) == 1 { + return 0, io.EOF + } + return w.bufReader.Read(b) +} + +func (w *connWrapper) Close() error { + err := w.Conn.Close() + atomic.StoreInt32(&w.closed, 1) + return err +} + +// NewResponseUpgrader returns a new httpstream.ResponseUpgrader that is +// capable of upgrading HTTP responses using SPDY/3.1 via the +// spdystream package. +func NewResponseUpgrader() httpstream.ResponseUpgrader { + return NewResponseUpgraderWithPings(0) +} + +// NewResponseUpgraderWithPings returns a new httpstream.ResponseUpgrader that +// is capable of upgrading HTTP responses using SPDY/3.1 via the spdystream +// package. +// +// If pingPeriod is non-zero, for each incoming connection a background +// goroutine will send periodic Ping frames to the server. Use this to keep +// idle connections through certain load balancers alive longer. +func NewResponseUpgraderWithPings(pingPeriod time.Duration) httpstream.ResponseUpgrader { + return responseUpgrader{pingPeriod: pingPeriod} +} + +// UpgradeResponse upgrades an HTTP response to one that supports multiplexed +// streams. newStreamHandler will be called synchronously whenever the +// other end of the upgraded connection creates a new stream. +func (u responseUpgrader) UpgradeResponse(w http.ResponseWriter, req *http.Request, newStreamHandler httpstream.NewStreamHandler) httpstream.Connection { + connectionHeader := strings.ToLower(req.Header.Get(httpstream.HeaderConnection)) + upgradeHeader := strings.ToLower(req.Header.Get(httpstream.HeaderUpgrade)) + if !strings.Contains(connectionHeader, strings.ToLower(httpstream.HeaderUpgrade)) || !strings.Contains(upgradeHeader, strings.ToLower(HeaderSpdy31)) { + errorMsg := fmt.Sprintf("unable to upgrade: missing upgrade headers in request: %#v", req.Header) + http.Error(w, errorMsg, http.StatusBadRequest) + return nil + } + + hijacker, ok := w.(http.Hijacker) + if !ok { + errorMsg := "unable to upgrade: unable to hijack response" + http.Error(w, errorMsg, http.StatusInternalServerError) + return nil + } + + w.Header().Add(httpstream.HeaderConnection, httpstream.HeaderUpgrade) + w.Header().Add(httpstream.HeaderUpgrade, HeaderSpdy31) + w.WriteHeader(http.StatusSwitchingProtocols) + + conn, bufrw, err := hijacker.Hijack() + if err != nil { + runtime.HandleError(fmt.Errorf("unable to upgrade: error hijacking response: %v", err)) + return nil + } + + connWithBuf := &connWrapper{Conn: conn, bufReader: bufrw.Reader} + spdyConn, err := NewServerConnectionWithPings(connWithBuf, newStreamHandler, u.pingPeriod) + if err != nil { + runtime.HandleError(fmt.Errorf("unable to upgrade: error creating SPDY server connection: %v", err)) + return nil + } + + return spdyConn +} diff --git a/vendor/k8s.io/apimachinery/pkg/util/proxy/dial.go b/vendor/k8s.io/apimachinery/pkg/util/proxy/dial.go new file mode 100644 index 0000000000..e5196d1ee8 --- /dev/null +++ b/vendor/k8s.io/apimachinery/pkg/util/proxy/dial.go @@ -0,0 +1,122 @@ +/* +Copyright 2015 The Kubernetes 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 proxy + +import ( + "context" + "crypto/tls" + "fmt" + "net" + "net/http" + "net/url" + + utilnet "k8s.io/apimachinery/pkg/util/net" + "k8s.io/apimachinery/third_party/forked/golang/netutil" + "k8s.io/klog/v2" +) + +// DialURL will dial the specified URL using the underlying dialer held by the passed +// RoundTripper. The primary use of this method is to support proxying upgradable connections. +// For this reason this method will prefer to negotiate http/1.1 if the URL scheme is https. +// If you wish to ensure ALPN negotiates http2 then set NextProto=[]string{"http2"} in the +// TLSConfig of the http.Transport +func DialURL(ctx context.Context, url *url.URL, transport http.RoundTripper) (net.Conn, error) { + dialAddr := netutil.CanonicalAddr(url) + + dialer, err := utilnet.DialerFor(transport) + if err != nil { + klog.V(5).Infof("Unable to unwrap transport %T to get dialer: %v", transport, err) + } + + switch url.Scheme { + case "http": + if dialer != nil { + return dialer(ctx, "tcp", dialAddr) + } + var d net.Dialer + return d.DialContext(ctx, "tcp", dialAddr) + case "https": + // Get the tls config from the transport if we recognize it + tlsConfig, err := utilnet.TLSClientConfig(transport) + if err != nil { + klog.V(5).Infof("Unable to unwrap transport %T to get at TLS config: %v", transport, err) + } + + if dialer != nil { + // We have a dialer; use it to open the connection, then + // create a tls client using the connection. + netConn, err := dialer(ctx, "tcp", dialAddr) + if err != nil { + return nil, err + } + if tlsConfig == nil { + // tls.Client requires non-nil config + klog.Warning("using custom dialer with no TLSClientConfig. Defaulting to InsecureSkipVerify") + // tls.Handshake() requires ServerName or InsecureSkipVerify + tlsConfig = &tls.Config{ + InsecureSkipVerify: true, + } + } else if len(tlsConfig.ServerName) == 0 && !tlsConfig.InsecureSkipVerify { + // tls.HandshakeContext() requires ServerName or InsecureSkipVerify + // infer the ServerName from the hostname we're connecting to. + inferredHost := dialAddr + if host, _, err := net.SplitHostPort(dialAddr); err == nil { + inferredHost = host + } + // Make a copy to avoid polluting the provided config + tlsConfigCopy := tlsConfig.Clone() + tlsConfigCopy.ServerName = inferredHost + tlsConfig = tlsConfigCopy + } + + // Since this method is primarily used within a "Connection: Upgrade" call we assume the caller is + // going to write HTTP/1.1 request to the wire. http2 should not be allowed in the TLSConfig.NextProtos, + // so we explicitly set that here. We only do this check if the TLSConfig support http/1.1. + if supportsHTTP11(tlsConfig.NextProtos) { + tlsConfig = tlsConfig.Clone() + tlsConfig.NextProtos = []string{"http/1.1"} + } + + tlsConn := tls.Client(netConn, tlsConfig) + if err := tlsConn.HandshakeContext(ctx); err != nil { + netConn.Close() + return nil, err + } + return tlsConn, nil + } else { + // Dial. + tlsDialer := tls.Dialer{ + Config: tlsConfig, + } + return tlsDialer.DialContext(ctx, "tcp", dialAddr) + } + default: + return nil, fmt.Errorf("unknown scheme: %s", url.Scheme) + } +} + +func supportsHTTP11(nextProtos []string) bool { + if len(nextProtos) == 0 { + return true + } + for _, proto := range nextProtos { + if proto == "http/1.1" { + return true + } + } + return false +} diff --git a/vendor/k8s.io/apimachinery/pkg/util/proxy/doc.go b/vendor/k8s.io/apimachinery/pkg/util/proxy/doc.go new file mode 100644 index 0000000000..ea710f6b15 --- /dev/null +++ b/vendor/k8s.io/apimachinery/pkg/util/proxy/doc.go @@ -0,0 +1,18 @@ +/* +Copyright 2014 The Kubernetes 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 proxy provides transport and upgrade support for proxies. +package proxy diff --git a/vendor/k8s.io/apimachinery/pkg/util/proxy/transport.go b/vendor/k8s.io/apimachinery/pkg/util/proxy/transport.go new file mode 100644 index 0000000000..5a2dd6e14c --- /dev/null +++ b/vendor/k8s.io/apimachinery/pkg/util/proxy/transport.go @@ -0,0 +1,272 @@ +/* +Copyright 2014 The Kubernetes 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 proxy + +import ( + "bytes" + "compress/flate" + "compress/gzip" + "fmt" + "io" + "net/http" + "net/url" + "path" + "strings" + + "golang.org/x/net/html" + "golang.org/x/net/html/atom" + "k8s.io/klog/v2" + + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/util/net" + "k8s.io/apimachinery/pkg/util/sets" +) + +// atomsToAttrs states which attributes of which tags require URL substitution. +// Sources: http://www.w3.org/TR/REC-html40/index/attributes.html +// +// http://www.w3.org/html/wg/drafts/html/master/index.html#attributes-1 +var atomsToAttrs = map[atom.Atom]sets.String{ + atom.A: sets.NewString("href"), + atom.Applet: sets.NewString("codebase"), + atom.Area: sets.NewString("href"), + atom.Audio: sets.NewString("src"), + atom.Base: sets.NewString("href"), + atom.Blockquote: sets.NewString("cite"), + atom.Body: sets.NewString("background"), + atom.Button: sets.NewString("formaction"), + atom.Command: sets.NewString("icon"), + atom.Del: sets.NewString("cite"), + atom.Embed: sets.NewString("src"), + atom.Form: sets.NewString("action"), + atom.Frame: sets.NewString("longdesc", "src"), + atom.Head: sets.NewString("profile"), + atom.Html: sets.NewString("manifest"), + atom.Iframe: sets.NewString("longdesc", "src"), + atom.Img: sets.NewString("longdesc", "src", "usemap"), + atom.Input: sets.NewString("src", "usemap", "formaction"), + atom.Ins: sets.NewString("cite"), + atom.Link: sets.NewString("href"), + atom.Object: sets.NewString("classid", "codebase", "data", "usemap"), + atom.Q: sets.NewString("cite"), + atom.Script: sets.NewString("src"), + atom.Source: sets.NewString("src"), + atom.Video: sets.NewString("poster", "src"), + + // TODO: css URLs hidden in style elements. +} + +// Transport is a transport for text/html content that replaces URLs in html +// content with the prefix of the proxy server +type Transport struct { + Scheme string + Host string + PathPrepend string + + http.RoundTripper +} + +// RoundTrip implements the http.RoundTripper interface +func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) { + // Add reverse proxy headers. + forwardedURI := path.Join(t.PathPrepend, req.URL.EscapedPath()) + if strings.HasSuffix(req.URL.Path, "/") { + forwardedURI = forwardedURI + "/" + } + req.Header.Set("X-Forwarded-Uri", forwardedURI) + if len(t.Host) > 0 { + req.Header.Set("X-Forwarded-Host", t.Host) + } + if len(t.Scheme) > 0 { + req.Header.Set("X-Forwarded-Proto", t.Scheme) + } + + rt := t.RoundTripper + if rt == nil { + rt = http.DefaultTransport + } + resp, err := rt.RoundTrip(req) + + if err != nil { + return nil, errors.NewServiceUnavailable(fmt.Sprintf("error trying to reach service: %v", err)) + } + + if redirect := resp.Header.Get("Location"); redirect != "" { + targetURL, err := url.Parse(redirect) + if err != nil { + return nil, errors.NewInternalError(fmt.Errorf("error trying to parse Location header: %v", err)) + } + resp.Header.Set("Location", t.rewriteURL(targetURL, req.URL, req.Host)) + return resp, nil + } + + cType := resp.Header.Get("Content-Type") + cType = strings.TrimSpace(strings.SplitN(cType, ";", 2)[0]) + if cType != "text/html" { + // Do nothing, simply pass through + return resp, nil + } + + return t.rewriteResponse(req, resp) +} + +var _ = net.RoundTripperWrapper(&Transport{}) + +func (rt *Transport) WrappedRoundTripper() http.RoundTripper { + return rt.RoundTripper +} + +// rewriteURL rewrites a single URL to go through the proxy, if the URL refers +// to the same host as sourceURL, which is the page on which the target URL +// occurred, or if the URL matches the sourceRequestHost. +func (t *Transport) rewriteURL(url *url.URL, sourceURL *url.URL, sourceRequestHost string) string { + // Example: + // When API server processes a proxy request to a service (e.g. /api/v1/namespace/foo/service/bar/proxy/), + // the sourceURL.Host (i.e. req.URL.Host) is the endpoint IP address of the service. The + // sourceRequestHost (i.e. req.Host) is the Host header that specifies the host on which the + // URL is sought, which can be different from sourceURL.Host. For example, if user sends the + // request through "kubectl proxy" locally (i.e. localhost:8001/api/v1/namespace/foo/service/bar/proxy/), + // sourceRequestHost is "localhost:8001". + // + // If the service's response URL contains non-empty host, and url.Host is equal to either sourceURL.Host + // or sourceRequestHost, we should not consider the returned URL to be a completely different host. + // It's the API server's responsibility to rewrite a same-host-and-absolute-path URL and append the + // necessary URL prefix (i.e. /api/v1/namespace/foo/service/bar/proxy/). + isDifferentHost := url.Host != "" && url.Host != sourceURL.Host && url.Host != sourceRequestHost + isRelative := !strings.HasPrefix(url.Path, "/") + if isDifferentHost || isRelative { + return url.String() + } + + // Do not rewrite scheme and host if the Transport has empty scheme and host + // when targetURL already contains the sourceRequestHost + if !(url.Host == sourceRequestHost && t.Scheme == "" && t.Host == "") { + url.Scheme = t.Scheme + url.Host = t.Host + } + + origPath := url.Path + // Do not rewrite URL if the sourceURL already contains the necessary prefix. + if strings.HasPrefix(url.Path, t.PathPrepend) { + return url.String() + } + url.Path = path.Join(t.PathPrepend, url.Path) + if strings.HasSuffix(origPath, "/") { + // Add back the trailing slash, which was stripped by path.Join(). + url.Path += "/" + } + + return url.String() +} + +// rewriteHTML scans the HTML for tags with url-valued attributes, and updates +// those values with the urlRewriter function. The updated HTML is output to the +// writer. +func rewriteHTML(reader io.Reader, writer io.Writer, urlRewriter func(*url.URL) string) error { + // Note: This assumes the content is UTF-8. + tokenizer := html.NewTokenizer(reader) + + var err error + for err == nil { + tokenType := tokenizer.Next() + switch tokenType { + case html.ErrorToken: + err = tokenizer.Err() + case html.StartTagToken, html.SelfClosingTagToken: + token := tokenizer.Token() + if urlAttrs, ok := atomsToAttrs[token.DataAtom]; ok { + for i, attr := range token.Attr { + if urlAttrs.Has(attr.Key) { + url, err := url.Parse(attr.Val) + if err != nil { + // Do not rewrite the URL if it isn't valid. It is intended not + // to error here to prevent the inability to understand the + // content of the body to cause a fatal error. + continue + } + token.Attr[i].Val = urlRewriter(url) + } + } + } + _, err = writer.Write([]byte(token.String())) + default: + _, err = writer.Write(tokenizer.Raw()) + } + } + if err != io.EOF { + return err + } + return nil +} + +// rewriteResponse modifies an HTML response by updating absolute links referring +// to the original host to instead refer to the proxy transport. +func (t *Transport) rewriteResponse(req *http.Request, resp *http.Response) (*http.Response, error) { + origBody := resp.Body + defer origBody.Close() + + newContent := &bytes.Buffer{} + var reader io.Reader = origBody + var writer io.Writer = newContent + encoding := resp.Header.Get("Content-Encoding") + switch encoding { + case "gzip": + var err error + reader, err = gzip.NewReader(reader) + if err != nil { + return nil, fmt.Errorf("errorf making gzip reader: %v", err) + } + gzw := gzip.NewWriter(writer) + defer gzw.Close() + writer = gzw + case "deflate": + var err error + reader = flate.NewReader(reader) + flw, err := flate.NewWriter(writer, flate.BestCompression) + if err != nil { + return nil, fmt.Errorf("errorf making flate writer: %v", err) + } + defer func() { + flw.Close() + flw.Flush() + }() + writer = flw + case "": + // This is fine + default: + // Some encoding we don't understand-- don't try to parse this + klog.Errorf("Proxy encountered encoding %v for text/html; can't understand this so not fixing links.", encoding) + return resp, nil + } + + urlRewriter := func(targetUrl *url.URL) string { + return t.rewriteURL(targetUrl, req.URL, req.Host) + } + err := rewriteHTML(reader, writer, urlRewriter) + if err != nil { + klog.Errorf("Failed to rewrite URLs: %v", err) + return resp, err + } + + resp.Body = io.NopCloser(newContent) + // Update header node with new content-length + // TODO: Remove any hash/signature headers here? + resp.Header.Del("Content-Length") + resp.ContentLength = int64(newContent.Len()) + + return resp, err +} diff --git a/vendor/k8s.io/apimachinery/pkg/util/proxy/upgradeaware.go b/vendor/k8s.io/apimachinery/pkg/util/proxy/upgradeaware.go new file mode 100644 index 0000000000..8c30a366de --- /dev/null +++ b/vendor/k8s.io/apimachinery/pkg/util/proxy/upgradeaware.go @@ -0,0 +1,558 @@ +/* +Copyright 2017 The Kubernetes 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 proxy + +import ( + "bufio" + "bytes" + "fmt" + "io" + "log" + "net" + "net/http" + "net/http/httputil" + "net/url" + "os" + "strings" + "time" + + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/util/httpstream" + utilnet "k8s.io/apimachinery/pkg/util/net" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + + "github.com/mxk/go-flowrate/flowrate" + + "k8s.io/klog/v2" +) + +// UpgradeRequestRoundTripper provides an additional method to decorate a request +// with any authentication or other protocol level information prior to performing +// an upgrade on the server. Any response will be handled by the intercepting +// proxy. +type UpgradeRequestRoundTripper interface { + http.RoundTripper + // WrapRequest takes a valid HTTP request and returns a suitably altered version + // of request with any HTTP level values required to complete the request half of + // an upgrade on the server. It does not get a chance to see the response and + // should bypass any request side logic that expects to see the response. + WrapRequest(*http.Request) (*http.Request, error) +} + +// UpgradeAwareHandler is a handler for proxy requests that may require an upgrade +type UpgradeAwareHandler struct { + // UpgradeRequired will reject non-upgrade connections if true. + UpgradeRequired bool + // Location is the location of the upstream proxy. It is used as the location to Dial on the upstream server + // for upgrade requests unless UseRequestLocationOnUpgrade is true. + Location *url.URL + // AppendLocationPath determines if the original path of the Location should be appended to the upstream proxy request path + AppendLocationPath bool + // Transport provides an optional round tripper to use to proxy. If nil, the default proxy transport is used + Transport http.RoundTripper + // UpgradeTransport, if specified, will be used as the backend transport when upgrade requests are provided. + // This allows clients to disable HTTP/2. + UpgradeTransport UpgradeRequestRoundTripper + // WrapTransport indicates whether the provided Transport should be wrapped with default proxy transport behavior (URL rewriting, X-Forwarded-* header setting) + WrapTransport bool + // UseRequestLocation will use the incoming request URL when talking to the backend server. + UseRequestLocation bool + // UseLocationHost overrides the HTTP host header in requests to the backend server to use the Host from Location. + // This will override the req.Host field of a request, while UseRequestLocation will override the req.URL field + // of a request. The req.URL.Host specifies the server to connect to, while the req.Host field + // specifies the Host header value to send in the HTTP request. If this is false, the incoming req.Host header will + // just be forwarded to the backend server. + UseLocationHost bool + // FlushInterval controls how often the standard HTTP proxy will flush content from the upstream. + FlushInterval time.Duration + // MaxBytesPerSec controls the maximum rate for an upstream connection. No rate is imposed if the value is zero. + MaxBytesPerSec int64 + // Responder is passed errors that occur while setting up proxying. + Responder ErrorResponder + // Reject to forward redirect response + RejectForwardingRedirects bool +} + +const defaultFlushInterval = 200 * time.Millisecond + +// ErrorResponder abstracts error reporting to the proxy handler to remove the need to hardcode a particular +// error format. +type ErrorResponder interface { + Error(w http.ResponseWriter, req *http.Request, err error) +} + +// SimpleErrorResponder is the legacy implementation of ErrorResponder for callers that only +// service a single request/response per proxy. +type SimpleErrorResponder interface { + Error(err error) +} + +func NewErrorResponder(r SimpleErrorResponder) ErrorResponder { + return simpleResponder{r} +} + +type simpleResponder struct { + responder SimpleErrorResponder +} + +func (r simpleResponder) Error(w http.ResponseWriter, req *http.Request, err error) { + r.responder.Error(err) +} + +// upgradeRequestRoundTripper implements proxy.UpgradeRequestRoundTripper. +type upgradeRequestRoundTripper struct { + http.RoundTripper + upgrader http.RoundTripper +} + +var ( + _ UpgradeRequestRoundTripper = &upgradeRequestRoundTripper{} + _ utilnet.RoundTripperWrapper = &upgradeRequestRoundTripper{} +) + +// WrappedRoundTripper returns the round tripper that a caller would use. +func (rt *upgradeRequestRoundTripper) WrappedRoundTripper() http.RoundTripper { + return rt.RoundTripper +} + +// WriteToRequest calls the nested upgrader and then copies the returned request +// fields onto the passed request. +func (rt *upgradeRequestRoundTripper) WrapRequest(req *http.Request) (*http.Request, error) { + resp, err := rt.upgrader.RoundTrip(req) + if err != nil { + return nil, err + } + return resp.Request, nil +} + +// onewayRoundTripper captures the provided request - which is assumed to have +// been modified by other round trippers - and then returns a fake response. +type onewayRoundTripper struct{} + +// RoundTrip returns a simple 200 OK response that captures the provided request. +func (onewayRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { + return &http.Response{ + Status: "200 OK", + StatusCode: http.StatusOK, + Body: io.NopCloser(&bytes.Buffer{}), + Request: req, + }, nil +} + +// MirrorRequest is a round tripper that can be called to get back the calling request as +// the core round tripper in a chain. +var MirrorRequest http.RoundTripper = onewayRoundTripper{} + +// NewUpgradeRequestRoundTripper takes two round trippers - one for the underlying TCP connection, and +// one that is able to write headers to an HTTP request. The request rt is used to set the request headers +// and that is written to the underlying connection rt. +func NewUpgradeRequestRoundTripper(connection, request http.RoundTripper) UpgradeRequestRoundTripper { + return &upgradeRequestRoundTripper{ + RoundTripper: connection, + upgrader: request, + } +} + +// normalizeLocation returns the result of parsing the full URL, with scheme set to http if missing +func normalizeLocation(location *url.URL) *url.URL { + normalized, _ := url.Parse(location.String()) + if len(normalized.Scheme) == 0 { + normalized.Scheme = "http" + } + return normalized +} + +// NewUpgradeAwareHandler creates a new proxy handler with a default flush interval. Responder is required for returning +// errors to the caller. +func NewUpgradeAwareHandler(location *url.URL, transport http.RoundTripper, wrapTransport, upgradeRequired bool, responder ErrorResponder) *UpgradeAwareHandler { + return &UpgradeAwareHandler{ + Location: normalizeLocation(location), + Transport: transport, + WrapTransport: wrapTransport, + UpgradeRequired: upgradeRequired, + FlushInterval: defaultFlushInterval, + Responder: responder, + } +} + +func proxyRedirectsforRootPath(path string, w http.ResponseWriter, req *http.Request) bool { + redirect := false + method := req.Method + + // From pkg/genericapiserver/endpoints/handlers/proxy.go#ServeHTTP: + // Redirect requests with an empty path to a location that ends with a '/' + // This is essentially a hack for https://issue.k8s.io/4958. + // Note: Keep this code after tryUpgrade to not break that flow. + if len(path) == 0 && (method == http.MethodGet || method == http.MethodHead) { + var queryPart string + if len(req.URL.RawQuery) > 0 { + queryPart = "?" + req.URL.RawQuery + } + w.Header().Set("Location", req.URL.Path+"/"+queryPart) + w.WriteHeader(http.StatusMovedPermanently) + redirect = true + } + return redirect +} + +// ServeHTTP handles the proxy request +func (h *UpgradeAwareHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { + if h.tryUpgrade(w, req) { + return + } + if h.UpgradeRequired { + h.Responder.Error(w, req, errors.NewBadRequest("Upgrade request required")) + return + } + + loc := *h.Location + loc.RawQuery = req.URL.RawQuery + + // If original request URL ended in '/', append a '/' at the end of the + // of the proxy URL + if !strings.HasSuffix(loc.Path, "/") && strings.HasSuffix(req.URL.Path, "/") { + loc.Path += "/" + } + + proxyRedirect := proxyRedirectsforRootPath(loc.Path, w, req) + if proxyRedirect { + return + } + + if h.Transport == nil || h.WrapTransport { + h.Transport = h.defaultProxyTransport(req.URL, h.Transport) + } + + // WithContext creates a shallow clone of the request with the same context. + newReq := req.WithContext(req.Context()) + newReq.Header = utilnet.CloneHeader(req.Header) + if !h.UseRequestLocation { + newReq.URL = &loc + } + if h.UseLocationHost { + // exchanging req.Host with the backend location is necessary for backends that act on the HTTP host header (e.g. API gateways), + // because req.Host has preference over req.URL.Host in filling this header field + newReq.Host = h.Location.Host + } + + // create the target location to use for the reverse proxy + reverseProxyLocation := &url.URL{Scheme: h.Location.Scheme, Host: h.Location.Host} + if h.AppendLocationPath { + reverseProxyLocation.Path = h.Location.Path + } + + proxy := httputil.NewSingleHostReverseProxy(reverseProxyLocation) + proxy.Transport = h.Transport + proxy.FlushInterval = h.FlushInterval + proxy.ErrorLog = log.New(noSuppressPanicError{}, "", log.LstdFlags) + if h.RejectForwardingRedirects { + oldModifyResponse := proxy.ModifyResponse + proxy.ModifyResponse = func(response *http.Response) error { + code := response.StatusCode + if code >= 300 && code <= 399 && len(response.Header.Get("Location")) > 0 { + // close the original response + response.Body.Close() + msg := "the backend attempted to redirect this request, which is not permitted" + // replace the response + *response = http.Response{ + StatusCode: http.StatusBadGateway, + Status: fmt.Sprintf("%d %s", response.StatusCode, http.StatusText(response.StatusCode)), + Body: io.NopCloser(strings.NewReader(msg)), + ContentLength: int64(len(msg)), + } + } else { + if oldModifyResponse != nil { + if err := oldModifyResponse(response); err != nil { + return err + } + } + } + return nil + } + } + if h.Responder != nil { + // if an optional error interceptor/responder was provided wire it + // the custom responder might be used for providing a unified error reporting + // or supporting retry mechanisms by not sending non-fatal errors to the clients + proxy.ErrorHandler = h.Responder.Error + } + proxy.ServeHTTP(w, newReq) +} + +type noSuppressPanicError struct{} + +func (noSuppressPanicError) Write(p []byte) (n int, err error) { + // skip "suppressing panic for copyResponse error in test; copy error" error message + // that ends up in CI tests on each kube-apiserver termination as noise and + // everybody thinks this is fatal. + if strings.Contains(string(p), "suppressing panic") { + return len(p), nil + } + return os.Stderr.Write(p) +} + +// tryUpgrade returns true if the request was handled. +func (h *UpgradeAwareHandler) tryUpgrade(w http.ResponseWriter, req *http.Request) bool { + if !httpstream.IsUpgradeRequest(req) { + klog.V(6).Infof("Request was not an upgrade") + return false + } + + var ( + backendConn net.Conn + rawResponse []byte + err error + ) + + location := *h.Location + if h.UseRequestLocation { + location = *req.URL + location.Scheme = h.Location.Scheme + location.Host = h.Location.Host + if h.AppendLocationPath { + location.Path = singleJoiningSlash(h.Location.Path, location.Path) + } + } + + clone := utilnet.CloneRequest(req) + // Only append X-Forwarded-For in the upgrade path, since httputil.NewSingleHostReverseProxy + // handles this in the non-upgrade path. + utilnet.AppendForwardedForHeader(clone) + klog.V(6).Infof("Connecting to backend proxy (direct dial) %s\n Headers: %v", &location, clone.Header) + if h.UseLocationHost { + clone.Host = h.Location.Host + } + clone.URL = &location + klog.V(6).Infof("UpgradeAwareProxy: dialing for SPDY upgrade with headers: %v", clone.Header) + backendConn, err = h.DialForUpgrade(clone) + if err != nil { + klog.V(6).Infof("Proxy connection error: %v", err) + h.Responder.Error(w, req, err) + return true + } + defer backendConn.Close() + + // determine the http response code from the backend by reading from rawResponse+backendConn + backendHTTPResponse, headerBytes, err := getResponse(io.MultiReader(bytes.NewReader(rawResponse), backendConn)) + if err != nil { + klog.V(6).Infof("Proxy connection error: %v", err) + h.Responder.Error(w, req, err) + return true + } + if len(headerBytes) > len(rawResponse) { + // we read beyond the bytes stored in rawResponse, update rawResponse to the full set of bytes read from the backend + rawResponse = headerBytes + } + + // If the backend did not upgrade the request, return an error to the client. If the response was + // an error, the error is forwarded directly after the connection is hijacked. Otherwise, just + // return a generic error here. + if backendHTTPResponse.StatusCode != http.StatusSwitchingProtocols && backendHTTPResponse.StatusCode < 400 { + err := fmt.Errorf("invalid upgrade response: status code %d", backendHTTPResponse.StatusCode) + klog.Errorf("Proxy upgrade error: %v", err) + h.Responder.Error(w, req, err) + return true + } + + // Once the connection is hijacked, the ErrorResponder will no longer work, so + // hijacking should be the last step in the upgrade. + requestHijacker, ok := w.(http.Hijacker) + if !ok { + klog.Errorf("Unable to hijack response writer: %T", w) + h.Responder.Error(w, req, fmt.Errorf("request connection cannot be hijacked: %T", w)) + return true + } + requestHijackedConn, _, err := requestHijacker.Hijack() + if err != nil { + klog.Errorf("Unable to hijack response: %v", err) + h.Responder.Error(w, req, fmt.Errorf("error hijacking connection: %v", err)) + return true + } + defer requestHijackedConn.Close() + + if backendHTTPResponse.StatusCode != http.StatusSwitchingProtocols { + // If the backend did not upgrade the request, echo the response from the backend to the client and return, closing the connection. + klog.V(6).Infof("Proxy upgrade error, status code %d", backendHTTPResponse.StatusCode) + // set read/write deadlines + deadline := time.Now().Add(10 * time.Second) + backendConn.SetReadDeadline(deadline) + requestHijackedConn.SetWriteDeadline(deadline) + // write the response to the client + err := backendHTTPResponse.Write(requestHijackedConn) + if err != nil && !strings.Contains(err.Error(), "use of closed network connection") { + klog.Errorf("Error proxying data from backend to client: %v", err) + } + // Indicate we handled the request + return true + } + + // Forward raw response bytes back to client. + if len(rawResponse) > 0 { + klog.V(6).Infof("Writing %d bytes to hijacked connection", len(rawResponse)) + if _, err = requestHijackedConn.Write(rawResponse); err != nil { + utilruntime.HandleError(fmt.Errorf("Error proxying response from backend to client: %v", err)) + } + } + + // Proxy the connection. This is bidirectional, so we need a goroutine + // to copy in each direction. Once one side of the connection exits, we + // exit the function which performs cleanup and in the process closes + // the other half of the connection in the defer. + writerComplete := make(chan struct{}) + readerComplete := make(chan struct{}) + + go func() { + var writer io.WriteCloser + if h.MaxBytesPerSec > 0 { + writer = flowrate.NewWriter(backendConn, h.MaxBytesPerSec) + } else { + writer = backendConn + } + _, err := io.Copy(writer, requestHijackedConn) + if err != nil && !strings.Contains(err.Error(), "use of closed network connection") { + klog.Errorf("Error proxying data from client to backend: %v", err) + } + close(writerComplete) + }() + + go func() { + var reader io.ReadCloser + if h.MaxBytesPerSec > 0 { + reader = flowrate.NewReader(backendConn, h.MaxBytesPerSec) + } else { + reader = backendConn + } + _, err := io.Copy(requestHijackedConn, reader) + if err != nil && !strings.Contains(err.Error(), "use of closed network connection") { + klog.Errorf("Error proxying data from backend to client: %v", err) + } + close(readerComplete) + }() + + // Wait for one half the connection to exit. Once it does the defer will + // clean up the other half of the connection. + select { + case <-writerComplete: + case <-readerComplete: + } + klog.V(6).Infof("Disconnecting from backend proxy %s\n Headers: %v", &location, clone.Header) + + return true +} + +// FIXME: Taken from net/http/httputil/reverseproxy.go as singleJoiningSlash is not exported to be re-used. +// See-also: https://github.com/golang/go/issues/44290 +func singleJoiningSlash(a, b string) string { + aslash := strings.HasSuffix(a, "/") + bslash := strings.HasPrefix(b, "/") + switch { + case aslash && bslash: + return a + b[1:] + case !aslash && !bslash: + return a + "/" + b + } + return a + b +} + +func (h *UpgradeAwareHandler) DialForUpgrade(req *http.Request) (net.Conn, error) { + if h.UpgradeTransport == nil { + return dial(req, h.Transport) + } + updatedReq, err := h.UpgradeTransport.WrapRequest(req) + if err != nil { + return nil, err + } + return dial(updatedReq, h.UpgradeTransport) +} + +// getResponseCode reads a http response from the given reader, returns the response, +// the bytes read from the reader, and any error encountered +func getResponse(r io.Reader) (*http.Response, []byte, error) { + rawResponse := bytes.NewBuffer(make([]byte, 0, 256)) + // Save the bytes read while reading the response headers into the rawResponse buffer + resp, err := http.ReadResponse(bufio.NewReader(io.TeeReader(r, rawResponse)), nil) + if err != nil { + return nil, nil, err + } + // return the http response and the raw bytes consumed from the reader in the process + return resp, rawResponse.Bytes(), nil +} + +// dial dials the backend at req.URL and writes req to it. +func dial(req *http.Request, transport http.RoundTripper) (net.Conn, error) { + conn, err := DialURL(req.Context(), req.URL, transport) + if err != nil { + return nil, fmt.Errorf("error dialing backend: %v", err) + } + + if err = req.Write(conn); err != nil { + conn.Close() + return nil, fmt.Errorf("error sending request: %v", err) + } + + return conn, err +} + +func (h *UpgradeAwareHandler) defaultProxyTransport(url *url.URL, internalTransport http.RoundTripper) http.RoundTripper { + scheme := url.Scheme + host := url.Host + suffix := h.Location.Path + if strings.HasSuffix(url.Path, "/") && !strings.HasSuffix(suffix, "/") { + suffix += "/" + } + pathPrepend := strings.TrimSuffix(url.Path, suffix) + rewritingTransport := &Transport{ + Scheme: scheme, + Host: host, + PathPrepend: pathPrepend, + RoundTripper: internalTransport, + } + return &corsRemovingTransport{ + RoundTripper: rewritingTransport, + } +} + +// corsRemovingTransport is a wrapper for an internal transport. It removes CORS headers +// from the internal response. +// Implements pkg/util/net.RoundTripperWrapper +type corsRemovingTransport struct { + http.RoundTripper +} + +var _ = utilnet.RoundTripperWrapper(&corsRemovingTransport{}) + +func (rt *corsRemovingTransport) RoundTrip(req *http.Request) (*http.Response, error) { + resp, err := rt.RoundTripper.RoundTrip(req) + if err != nil { + return nil, err + } + removeCORSHeaders(resp) + return resp, nil +} + +func (rt *corsRemovingTransport) WrappedRoundTripper() http.RoundTripper { + return rt.RoundTripper +} + +// removeCORSHeaders strip CORS headers sent from the backend +// This should be called on all responses before returning +func removeCORSHeaders(resp *http.Response) { + resp.Header.Del("Access-Control-Allow-Credentials") + resp.Header.Del("Access-Control-Allow-Headers") + resp.Header.Del("Access-Control-Allow-Methods") + resp.Header.Del("Access-Control-Allow-Origin") +} diff --git a/vendor/k8s.io/apimachinery/third_party/forked/golang/netutil/addr.go b/vendor/k8s.io/apimachinery/third_party/forked/golang/netutil/addr.go new file mode 100644 index 0000000000..bd26f427e3 --- /dev/null +++ b/vendor/k8s.io/apimachinery/third_party/forked/golang/netutil/addr.go @@ -0,0 +1,28 @@ +package netutil + +import ( + "net/url" + "strings" +) + +// FROM: http://golang.org/src/net/http/client.go +// Given a string of the form "host", "host:port", or "[ipv6::address]:port", +// return true if the string includes a port. +func hasPort(s string) bool { return strings.LastIndex(s, ":") > strings.LastIndex(s, "]") } + +// FROM: http://golang.org/src/net/http/transport.go +var portMap = map[string]string{ + "http": "80", + "https": "443", + "socks5": "1080", +} + +// FROM: http://golang.org/src/net/http/transport.go +// canonicalAddr returns url.Host but always with a ":port" suffix +func CanonicalAddr(url *url.URL) string { + addr := url.Host + if !hasPort(addr) { + return addr + ":" + portMap[url.Scheme] + } + return addr +} diff --git a/vendor/k8s.io/client-go/tools/portforward/OWNERS b/vendor/k8s.io/client-go/tools/portforward/OWNERS new file mode 100644 index 0000000000..3078483072 --- /dev/null +++ b/vendor/k8s.io/client-go/tools/portforward/OWNERS @@ -0,0 +1,10 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +approvers: + - aojea + - liggitt + - seans3 +reviewers: + - aojea + - liggitt + - seans3 diff --git a/vendor/k8s.io/client-go/tools/portforward/doc.go b/vendor/k8s.io/client-go/tools/portforward/doc.go new file mode 100644 index 0000000000..e0f6cfbf2b --- /dev/null +++ b/vendor/k8s.io/client-go/tools/portforward/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2015 The Kubernetes 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 portforward adds support for SSH-like port forwarding from the client's +// local host to remote containers. +package portforward diff --git a/vendor/k8s.io/client-go/tools/portforward/fallback_dialer.go b/vendor/k8s.io/client-go/tools/portforward/fallback_dialer.go new file mode 100644 index 0000000000..7fcc2492bf --- /dev/null +++ b/vendor/k8s.io/client-go/tools/portforward/fallback_dialer.go @@ -0,0 +1,57 @@ +/* +Copyright 2024 The Kubernetes 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 portforward + +import ( + "k8s.io/apimachinery/pkg/util/httpstream" + "k8s.io/klog/v2" +) + +var _ httpstream.Dialer = &FallbackDialer{} + +// FallbackDialer encapsulates a primary and secondary dialer, including +// the boolean function to determine if the primary dialer failed. Implements +// the httpstream.Dialer interface. +type FallbackDialer struct { + primary httpstream.Dialer + secondary httpstream.Dialer + shouldFallback func(error) bool +} + +// NewFallbackDialer creates the FallbackDialer with the primary and secondary dialers, +// as well as the boolean function to determine if the primary dialer failed. +func NewFallbackDialer(primary, secondary httpstream.Dialer, shouldFallback func(error) bool) httpstream.Dialer { + return &FallbackDialer{ + primary: primary, + secondary: secondary, + shouldFallback: shouldFallback, + } +} + +// Dial is the single function necessary to implement the "httpstream.Dialer" interface. +// It takes the protocol version strings to request, returning an the upgraded +// httstream.Connection and the negotiated protocol version accepted. If the initial +// primary dialer fails, this function attempts the secondary dialer. Returns an error +// if one occurs. +func (f *FallbackDialer) Dial(protocols ...string) (httpstream.Connection, string, error) { + conn, version, err := f.primary.Dial(protocols...) + if err != nil && f.shouldFallback(err) { + klog.V(4).Infof("fallback to secondary dialer from primary dialer err: %v", err) + return f.secondary.Dial(protocols...) + } + return conn, version, err +} diff --git a/vendor/k8s.io/client-go/tools/portforward/portforward.go b/vendor/k8s.io/client-go/tools/portforward/portforward.go new file mode 100644 index 0000000000..126c14e8fa --- /dev/null +++ b/vendor/k8s.io/client-go/tools/portforward/portforward.go @@ -0,0 +1,454 @@ +/* +Copyright 2015 The Kubernetes 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 portforward + +import ( + "errors" + "fmt" + "io" + "net" + "net/http" + "sort" + "strconv" + "strings" + "sync" + + v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/util/httpstream" + "k8s.io/apimachinery/pkg/util/runtime" + netutils "k8s.io/utils/net" +) + +// PortForwardProtocolV1Name is the subprotocol used for port forwarding. +// TODO move to API machinery and re-unify with kubelet/server/portfoward +const PortForwardProtocolV1Name = "portforward.k8s.io" + +var ( + // error returned whenever we lost connection to a pod + ErrLostConnectionToPod = errors.New("lost connection to pod") + + // set of error we're expecting during port-forwarding + networkClosedError = "use of closed network connection" +) + +// PortForwarder knows how to listen for local connections and forward them to +// a remote pod via an upgraded HTTP request. +type PortForwarder struct { + addresses []listenAddress + ports []ForwardedPort + stopChan <-chan struct{} + + dialer httpstream.Dialer + streamConn httpstream.Connection + listeners []io.Closer + Ready chan struct{} + requestIDLock sync.Mutex + requestID int + out io.Writer + errOut io.Writer +} + +// ForwardedPort contains a Local:Remote port pairing. +type ForwardedPort struct { + Local uint16 + Remote uint16 +} + +/* +valid port specifications: + +5000 +- forwards from localhost:5000 to pod:5000 + +8888:5000 +- forwards from localhost:8888 to pod:5000 + +0:5000 +:5000 + - selects a random available local port, + forwards from localhost:<random port> to pod:5000 +*/ +func parsePorts(ports []string) ([]ForwardedPort, error) { + var forwards []ForwardedPort + for _, portString := range ports { + parts := strings.Split(portString, ":") + var localString, remoteString string + if len(parts) == 1 { + localString = parts[0] + remoteString = parts[0] + } else if len(parts) == 2 { + localString = parts[0] + if localString == "" { + // support :5000 + localString = "0" + } + remoteString = parts[1] + } else { + return nil, fmt.Errorf("invalid port format '%s'", portString) + } + + localPort, err := strconv.ParseUint(localString, 10, 16) + if err != nil { + return nil, fmt.Errorf("error parsing local port '%s': %s", localString, err) + } + + remotePort, err := strconv.ParseUint(remoteString, 10, 16) + if err != nil { + return nil, fmt.Errorf("error parsing remote port '%s': %s", remoteString, err) + } + if remotePort == 0 { + return nil, fmt.Errorf("remote port must be > 0") + } + + forwards = append(forwards, ForwardedPort{uint16(localPort), uint16(remotePort)}) + } + + return forwards, nil +} + +type listenAddress struct { + address string + protocol string + failureMode string +} + +func parseAddresses(addressesToParse []string) ([]listenAddress, error) { + var addresses []listenAddress + parsed := make(map[string]listenAddress) + for _, address := range addressesToParse { + if address == "localhost" { + if _, exists := parsed["127.0.0.1"]; !exists { + ip := listenAddress{address: "127.0.0.1", protocol: "tcp4", failureMode: "all"} + parsed[ip.address] = ip + } + if _, exists := parsed["::1"]; !exists { + ip := listenAddress{address: "::1", protocol: "tcp6", failureMode: "all"} + parsed[ip.address] = ip + } + } else if netutils.ParseIPSloppy(address).To4() != nil { + parsed[address] = listenAddress{address: address, protocol: "tcp4", failureMode: "any"} + } else if netutils.ParseIPSloppy(address) != nil { + parsed[address] = listenAddress{address: address, protocol: "tcp6", failureMode: "any"} + } else { + return nil, fmt.Errorf("%s is not a valid IP", address) + } + } + addresses = make([]listenAddress, len(parsed)) + id := 0 + for _, v := range parsed { + addresses[id] = v + id++ + } + // Sort addresses before returning to get a stable order + sort.Slice(addresses, func(i, j int) bool { return addresses[i].address < addresses[j].address }) + + return addresses, nil +} + +// New creates a new PortForwarder with localhost listen addresses. +func New(dialer httpstream.Dialer, ports []string, stopChan <-chan struct{}, readyChan chan struct{}, out, errOut io.Writer) (*PortForwarder, error) { + return NewOnAddresses(dialer, []string{"localhost"}, ports, stopChan, readyChan, out, errOut) +} + +// NewOnAddresses creates a new PortForwarder with custom listen addresses. +func NewOnAddresses(dialer httpstream.Dialer, addresses []string, ports []string, stopChan <-chan struct{}, readyChan chan struct{}, out, errOut io.Writer) (*PortForwarder, error) { + if len(addresses) == 0 { + return nil, errors.New("you must specify at least 1 address") + } + parsedAddresses, err := parseAddresses(addresses) + if err != nil { + return nil, err + } + if len(ports) == 0 { + return nil, errors.New("you must specify at least 1 port") + } + parsedPorts, err := parsePorts(ports) + if err != nil { + return nil, err + } + return &PortForwarder{ + dialer: dialer, + addresses: parsedAddresses, + ports: parsedPorts, + stopChan: stopChan, + Ready: readyChan, + out: out, + errOut: errOut, + }, nil +} + +// ForwardPorts formats and executes a port forwarding request. The connection will remain +// open until stopChan is closed. +func (pf *PortForwarder) ForwardPorts() error { + defer pf.Close() + + var err error + var protocol string + pf.streamConn, protocol, err = pf.dialer.Dial(PortForwardProtocolV1Name) + if err != nil { + return fmt.Errorf("error upgrading connection: %s", err) + } + defer pf.streamConn.Close() + if protocol != PortForwardProtocolV1Name { + return fmt.Errorf("unable to negotiate protocol: client supports %q, server returned %q", PortForwardProtocolV1Name, protocol) + } + + return pf.forward() +} + +// forward dials the remote host specific in req, upgrades the request, starts +// listeners for each port specified in ports, and forwards local connections +// to the remote host via streams. +func (pf *PortForwarder) forward() error { + var err error + + listenSuccess := false + for i := range pf.ports { + port := &pf.ports[i] + err = pf.listenOnPort(port) + switch { + case err == nil: + listenSuccess = true + default: + if pf.errOut != nil { + fmt.Fprintf(pf.errOut, "Unable to listen on port %d: %v\n", port.Local, err) + } + } + } + + if !listenSuccess { + return fmt.Errorf("unable to listen on any of the requested ports: %v", pf.ports) + } + + if pf.Ready != nil { + close(pf.Ready) + } + + // wait for interrupt or conn closure + select { + case <-pf.stopChan: + case <-pf.streamConn.CloseChan(): + return ErrLostConnectionToPod + } + + return nil +} + +// listenOnPort delegates listener creation and waits for connections on requested bind addresses. +// An error is raised based on address groups (default and localhost) and their failure modes +func (pf *PortForwarder) listenOnPort(port *ForwardedPort) error { + var errors []error + failCounters := make(map[string]int, 2) + successCounters := make(map[string]int, 2) + for _, addr := range pf.addresses { + err := pf.listenOnPortAndAddress(port, addr.protocol, addr.address) + if err != nil { + errors = append(errors, err) + failCounters[addr.failureMode]++ + } else { + successCounters[addr.failureMode]++ + } + } + if successCounters["all"] == 0 && failCounters["all"] > 0 { + return fmt.Errorf("%s: %v", "Listeners failed to create with the following errors", errors) + } + if failCounters["any"] > 0 { + return fmt.Errorf("%s: %v", "Listeners failed to create with the following errors", errors) + } + return nil +} + +// listenOnPortAndAddress delegates listener creation and waits for new connections +// in the background f +func (pf *PortForwarder) listenOnPortAndAddress(port *ForwardedPort, protocol string, address string) error { + listener, err := pf.getListener(protocol, address, port) + if err != nil { + return err + } + pf.listeners = append(pf.listeners, listener) + go pf.waitForConnection(listener, *port) + return nil +} + +// getListener creates a listener on the interface targeted by the given hostname on the given port with +// the given protocol. protocol is in net.Listen style which basically admits values like tcp, tcp4, tcp6 +func (pf *PortForwarder) getListener(protocol string, hostname string, port *ForwardedPort) (net.Listener, error) { + listener, err := net.Listen(protocol, net.JoinHostPort(hostname, strconv.Itoa(int(port.Local)))) + if err != nil { + return nil, fmt.Errorf("unable to create listener: Error %s", err) + } + listenerAddress := listener.Addr().String() + host, localPort, _ := net.SplitHostPort(listenerAddress) + localPortUInt, err := strconv.ParseUint(localPort, 10, 16) + + if err != nil { + fmt.Fprintf(pf.out, "Failed to forward from %s:%d -> %d\n", hostname, localPortUInt, port.Remote) + return nil, fmt.Errorf("error parsing local port: %s from %s (%s)", err, listenerAddress, host) + } + port.Local = uint16(localPortUInt) + if pf.out != nil { + fmt.Fprintf(pf.out, "Forwarding from %s -> %d\n", net.JoinHostPort(hostname, strconv.Itoa(int(localPortUInt))), port.Remote) + } + + return listener, nil +} + +// waitForConnection waits for new connections to listener and handles them in +// the background. +func (pf *PortForwarder) waitForConnection(listener net.Listener, port ForwardedPort) { + for { + select { + case <-pf.streamConn.CloseChan(): + return + default: + conn, err := listener.Accept() + if err != nil { + // TODO consider using something like https://github.com/hydrogen18/stoppableListener? + if !strings.Contains(strings.ToLower(err.Error()), networkClosedError) { + runtime.HandleError(fmt.Errorf("error accepting connection on port %d: %v", port.Local, err)) + } + return + } + go pf.handleConnection(conn, port) + } + } +} + +func (pf *PortForwarder) nextRequestID() int { + pf.requestIDLock.Lock() + defer pf.requestIDLock.Unlock() + id := pf.requestID + pf.requestID++ + return id +} + +// handleConnection copies data between the local connection and the stream to +// the remote server. +func (pf *PortForwarder) handleConnection(conn net.Conn, port ForwardedPort) { + defer conn.Close() + + if pf.out != nil { + fmt.Fprintf(pf.out, "Handling connection for %d\n", port.Local) + } + + requestID := pf.nextRequestID() + + // create error stream + headers := http.Header{} + headers.Set(v1.StreamType, v1.StreamTypeError) + headers.Set(v1.PortHeader, fmt.Sprintf("%d", port.Remote)) + headers.Set(v1.PortForwardRequestIDHeader, strconv.Itoa(requestID)) + errorStream, err := pf.streamConn.CreateStream(headers) + if err != nil { + runtime.HandleError(fmt.Errorf("error creating error stream for port %d -> %d: %v", port.Local, port.Remote, err)) + return + } + // we're not writing to this stream + errorStream.Close() + defer pf.streamConn.RemoveStreams(errorStream) + + errorChan := make(chan error) + go func() { + message, err := io.ReadAll(errorStream) + switch { + case err != nil: + errorChan <- fmt.Errorf("error reading from error stream for port %d -> %d: %v", port.Local, port.Remote, err) + case len(message) > 0: + errorChan <- fmt.Errorf("an error occurred forwarding %d -> %d: %v", port.Local, port.Remote, string(message)) + } + close(errorChan) + }() + + // create data stream + headers.Set(v1.StreamType, v1.StreamTypeData) + dataStream, err := pf.streamConn.CreateStream(headers) + if err != nil { + runtime.HandleError(fmt.Errorf("error creating forwarding stream for port %d -> %d: %v", port.Local, port.Remote, err)) + return + } + defer pf.streamConn.RemoveStreams(dataStream) + + localError := make(chan struct{}) + remoteDone := make(chan struct{}) + + go func() { + // Copy from the remote side to the local port. + if _, err := io.Copy(conn, dataStream); err != nil && !strings.Contains(strings.ToLower(err.Error()), networkClosedError) { + runtime.HandleError(fmt.Errorf("error copying from remote stream to local connection: %v", err)) + } + + // inform the select below that the remote copy is done + close(remoteDone) + }() + + go func() { + // inform server we're not sending any more data after copy unblocks + defer dataStream.Close() + + // Copy from the local port to the remote side. + if _, err := io.Copy(dataStream, conn); err != nil && !strings.Contains(strings.ToLower(err.Error()), networkClosedError) { + runtime.HandleError(fmt.Errorf("error copying from local connection to remote stream: %v", err)) + // break out of the select below without waiting for the other copy to finish + close(localError) + } + }() + + // wait for either a local->remote error or for copying from remote->local to finish + select { + case <-remoteDone: + case <-localError: + } + + // reset dataStream to discard any unsent data, preventing port forwarding from being blocked. + // we must reset dataStream before waiting on errorChan, otherwise, + // the blocking data will affect errorStream and cause <-errorChan to block indefinitely. + _ = dataStream.Reset() + + // always expect something on errorChan (it may be nil) + err = <-errorChan + if err != nil { + runtime.HandleError(err) + pf.streamConn.Close() + } +} + +// Close stops all listeners of PortForwarder. +func (pf *PortForwarder) Close() { + // stop all listeners + for _, l := range pf.listeners { + if err := l.Close(); err != nil { + runtime.HandleError(fmt.Errorf("error closing listener: %v", err)) + } + } +} + +// GetPorts will return the ports that were forwarded; this can be used to +// retrieve the locally-bound port in cases where the input was port 0. This +// function will signal an error if the Ready channel is nil or if the +// listeners are not ready yet; this function will succeed after the Ready +// channel has been closed. +func (pf *PortForwarder) GetPorts() ([]ForwardedPort, error) { + if pf.Ready == nil { + return nil, fmt.Errorf("no Ready channel provided") + } + select { + case <-pf.Ready: + return pf.ports, nil + default: + return nil, fmt.Errorf("listeners not ready") + } +} diff --git a/vendor/k8s.io/client-go/tools/portforward/tunneling_connection.go b/vendor/k8s.io/client-go/tools/portforward/tunneling_connection.go new file mode 100644 index 0000000000..a9c9b18fd6 --- /dev/null +++ b/vendor/k8s.io/client-go/tools/portforward/tunneling_connection.go @@ -0,0 +1,158 @@ +/* +Copyright 2023 The Kubernetes 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 portforward + +import ( + "errors" + "fmt" + "io" + "net" + "sync" + "time" + + gwebsocket "github.com/gorilla/websocket" + + "k8s.io/klog/v2" +) + +var _ net.Conn = &TunnelingConnection{} + +// TunnelingConnection implements the "httpstream.Connection" interface, wrapping +// a websocket connection that tunnels SPDY. +type TunnelingConnection struct { + name string + conn *gwebsocket.Conn + inProgressMessage io.Reader + closeOnce sync.Once +} + +// NewTunnelingConnection wraps the passed gorilla/websockets connection +// with the TunnelingConnection struct (implementing net.Conn). +func NewTunnelingConnection(name string, conn *gwebsocket.Conn) *TunnelingConnection { + return &TunnelingConnection{ + name: name, + conn: conn, + } +} + +// Read implements "io.Reader" interface, reading from the stored connection +// into the passed buffer "p". Returns the number of bytes read and an error. +// Can keep track of the "inProgress" messsage from the tunneled connection. +func (c *TunnelingConnection) Read(p []byte) (int, error) { + klog.V(7).Infof("%s: tunneling connection read...", c.name) + defer klog.V(7).Infof("%s: tunneling connection read...complete", c.name) + for { + if c.inProgressMessage == nil { + klog.V(8).Infof("%s: tunneling connection read before NextReader()...", c.name) + messageType, nextReader, err := c.conn.NextReader() + if err != nil { + closeError := &gwebsocket.CloseError{} + if errors.As(err, &closeError) && closeError.Code == gwebsocket.CloseNormalClosure { + return 0, io.EOF + } + klog.V(4).Infof("%s:tunneling connection NextReader() error: %v", c.name, err) + return 0, err + } + if messageType != gwebsocket.BinaryMessage { + return 0, fmt.Errorf("invalid message type received") + } + c.inProgressMessage = nextReader + } + klog.V(8).Infof("%s: tunneling connection read in progress message...", c.name) + i, err := c.inProgressMessage.Read(p) + if i == 0 && err == io.EOF { + c.inProgressMessage = nil + } else { + klog.V(8).Infof("%s: read %d bytes, error=%v, bytes=% X", c.name, i, err, p[:i]) + return i, err + } + } +} + +// Write implements "io.Writer" interface, copying the data in the passed +// byte array "p" into the stored tunneled connection. Returns the number +// of bytes written and an error. +func (c *TunnelingConnection) Write(p []byte) (n int, err error) { + klog.V(7).Infof("%s: write: %d bytes, bytes=% X", c.name, len(p), p) + defer klog.V(7).Infof("%s: tunneling connection write...complete", c.name) + w, err := c.conn.NextWriter(gwebsocket.BinaryMessage) + if err != nil { + return 0, err + } + defer func() { + // close, which flushes the message + closeErr := w.Close() + if closeErr != nil && err == nil { + // if closing/flushing errored and we weren't already returning an error, return the close error + err = closeErr + } + }() + + n, err = w.Write(p) + return +} + +// Close implements "io.Closer" interface, signaling the other tunneled connection +// endpoint, and closing the tunneled connection only once. +func (c *TunnelingConnection) Close() error { + var err error + c.closeOnce.Do(func() { + klog.V(7).Infof("%s: tunneling connection Close()...", c.name) + // Signal other endpoint that websocket connection is closing; ignore error. + normalCloseMsg := gwebsocket.FormatCloseMessage(gwebsocket.CloseNormalClosure, "") + writeControlErr := c.conn.WriteControl(gwebsocket.CloseMessage, normalCloseMsg, time.Now().Add(time.Second)) + closeErr := c.conn.Close() + if closeErr != nil { + err = closeErr + } else if writeControlErr != nil { + err = writeControlErr + } + }) + return err +} + +// LocalAddr implements part of the "net.Conn" interface, returning the local +// endpoint network address of the tunneled connection. +func (c *TunnelingConnection) LocalAddr() net.Addr { + return c.conn.LocalAddr() +} + +// LocalAddr implements part of the "net.Conn" interface, returning the remote +// endpoint network address of the tunneled connection. +func (c *TunnelingConnection) RemoteAddr() net.Addr { + return c.conn.RemoteAddr() +} + +// SetDeadline sets the *absolute* time in the future for both +// read and write deadlines. Returns an error if one occurs. +func (c *TunnelingConnection) SetDeadline(t time.Time) error { + rerr := c.SetReadDeadline(t) + werr := c.SetWriteDeadline(t) + return errors.Join(rerr, werr) +} + +// SetDeadline sets the *absolute* time in the future for the +// read deadlines. Returns an error if one occurs. +func (c *TunnelingConnection) SetReadDeadline(t time.Time) error { + return c.conn.SetReadDeadline(t) +} + +// SetDeadline sets the *absolute* time in the future for the +// write deadlines. Returns an error if one occurs. +func (c *TunnelingConnection) SetWriteDeadline(t time.Time) error { + return c.conn.SetWriteDeadline(t) +} diff --git a/vendor/k8s.io/client-go/tools/portforward/tunneling_dialer.go b/vendor/k8s.io/client-go/tools/portforward/tunneling_dialer.go new file mode 100644 index 0000000000..2bef5ecd72 --- /dev/null +++ b/vendor/k8s.io/client-go/tools/portforward/tunneling_dialer.go @@ -0,0 +1,93 @@ +/* +Copyright 2023 The Kubernetes 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 portforward + +import ( + "fmt" + "net/http" + "net/url" + "strings" + "time" + + "k8s.io/apimachinery/pkg/util/httpstream" + "k8s.io/apimachinery/pkg/util/httpstream/spdy" + constants "k8s.io/apimachinery/pkg/util/portforward" + restclient "k8s.io/client-go/rest" + "k8s.io/client-go/transport/websocket" + "k8s.io/klog/v2" +) + +const PingPeriod = 10 * time.Second + +// tunnelingDialer implements "httpstream.Dial" interface +type tunnelingDialer struct { + url *url.URL + transport http.RoundTripper + holder websocket.ConnectionHolder +} + +// NewTunnelingDialer creates and returns the tunnelingDialer structure which implemements the "httpstream.Dialer" +// interface. The dialer can upgrade a websocket request, creating a websocket connection. This function +// returns an error if one occurs. +func NewSPDYOverWebsocketDialer(url *url.URL, config *restclient.Config) (httpstream.Dialer, error) { + transport, holder, err := websocket.RoundTripperFor(config) + if err != nil { + return nil, err + } + return &tunnelingDialer{ + url: url, + transport: transport, + holder: holder, + }, nil +} + +// Dial upgrades to a tunneling streaming connection, returning a SPDY connection +// containing a WebSockets connection (which implements "net.Conn"). Also +// returns the protocol negotiated, or an error. +func (d *tunnelingDialer) Dial(protocols ...string) (httpstream.Connection, string, error) { + // There is no passed context, so skip the context when creating request for now. + // Websockets requires "GET" method: RFC 6455 Sec. 4.1 (page 17). + req, err := http.NewRequest("GET", d.url.String(), nil) + if err != nil { + return nil, "", err + } + // Add the spdy tunneling prefix to the requested protocols. The tunneling + // handler will know how to negotiate these protocols. + tunnelingProtocols := []string{} + for _, protocol := range protocols { + tunnelingProtocol := constants.WebsocketsSPDYTunnelingPrefix + protocol + tunnelingProtocols = append(tunnelingProtocols, tunnelingProtocol) + } + klog.V(4).Infoln("Before WebSocket Upgrade Connection...") + conn, err := websocket.Negotiate(d.transport, d.holder, req, tunnelingProtocols...) + if err != nil { + return nil, "", err + } + if conn == nil { + return nil, "", fmt.Errorf("negotiated websocket connection is nil") + } + protocol := conn.Subprotocol() + protocol = strings.TrimPrefix(protocol, constants.WebsocketsSPDYTunnelingPrefix) + klog.V(4).Infof("negotiated protocol: %s", protocol) + + // Wrap the websocket connection which implements "net.Conn". + tConn := NewTunnelingConnection("client", conn) + // Create SPDY connection injecting the previously created tunneling connection. + spdyConn, err := spdy.NewClientConnectionWithPings(tConn, PingPeriod) + + return spdyConn, protocol, err +} diff --git a/vendor/k8s.io/client-go/transport/spdy/spdy.go b/vendor/k8s.io/client-go/transport/spdy/spdy.go new file mode 100644 index 0000000000..9fddc6c5f2 --- /dev/null +++ b/vendor/k8s.io/client-go/transport/spdy/spdy.go @@ -0,0 +1,107 @@ +/* +Copyright 2017 The Kubernetes 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 spdy + +import ( + "fmt" + "net/http" + "net/url" + "time" + + "k8s.io/apimachinery/pkg/util/httpstream" + "k8s.io/apimachinery/pkg/util/httpstream/spdy" + restclient "k8s.io/client-go/rest" +) + +// Upgrader validates a response from the server after a SPDY upgrade. +type Upgrader interface { + // NewConnection validates the response and creates a new Connection. + NewConnection(resp *http.Response) (httpstream.Connection, error) +} + +// RoundTripperFor returns a round tripper and upgrader to use with SPDY. +func RoundTripperFor(config *restclient.Config) (http.RoundTripper, Upgrader, error) { + tlsConfig, err := restclient.TLSConfigFor(config) + if err != nil { + return nil, nil, err + } + proxy := http.ProxyFromEnvironment + if config.Proxy != nil { + proxy = config.Proxy + } + upgradeRoundTripper, err := spdy.NewRoundTripperWithConfig(spdy.RoundTripperConfig{ + TLS: tlsConfig, + Proxier: proxy, + PingPeriod: time.Second * 5, + UpgradeTransport: nil, + }) + if err != nil { + return nil, nil, err + } + wrapper, err := restclient.HTTPWrappersForConfig(config, upgradeRoundTripper) + if err != nil { + return nil, nil, err + } + return wrapper, upgradeRoundTripper, nil +} + +// dialer implements the httpstream.Dialer interface. +type dialer struct { + client *http.Client + upgrader Upgrader + method string + url *url.URL +} + +var _ httpstream.Dialer = &dialer{} + +// NewDialer will create a dialer that connects to the provided URL and upgrades the connection to SPDY. +func NewDialer(upgrader Upgrader, client *http.Client, method string, url *url.URL) httpstream.Dialer { + return &dialer{ + client: client, + upgrader: upgrader, + method: method, + url: url, + } +} + +func (d *dialer) Dial(protocols ...string) (httpstream.Connection, string, error) { + req, err := http.NewRequest(d.method, d.url.String(), nil) + if err != nil { + return nil, "", fmt.Errorf("error creating request: %v", err) + } + return Negotiate(d.upgrader, d.client, req, protocols...) +} + +// Negotiate opens a connection to a remote server and attempts to negotiate +// a SPDY connection. Upon success, it returns the connection and the protocol selected by +// the server. The client transport must use the upgradeRoundTripper - see RoundTripperFor. +func Negotiate(upgrader Upgrader, client *http.Client, req *http.Request, protocols ...string) (httpstream.Connection, string, error) { + for i := range protocols { + req.Header.Add(httpstream.HeaderProtocolVersion, protocols[i]) + } + resp, err := client.Do(req) + if err != nil { + return nil, "", fmt.Errorf("error sending request: %v", err) + } + defer resp.Body.Close() + conn, err := upgrader.NewConnection(resp) + if err != nil { + return nil, "", err + } + return conn, resp.Header.Get(httpstream.HeaderProtocolVersion), nil +} diff --git a/vendor/k8s.io/client-go/transport/websocket/roundtripper.go b/vendor/k8s.io/client-go/transport/websocket/roundtripper.go new file mode 100644 index 0000000000..924518e8bb --- /dev/null +++ b/vendor/k8s.io/client-go/transport/websocket/roundtripper.go @@ -0,0 +1,224 @@ +/* +Copyright 2023 The Kubernetes 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 websocket + +import ( + "crypto/tls" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strings" + + gwebsocket "github.com/gorilla/websocket" + + apierrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/apimachinery/pkg/util/httpstream" + "k8s.io/apimachinery/pkg/util/httpstream/wsstream" + utilnet "k8s.io/apimachinery/pkg/util/net" + restclient "k8s.io/client-go/rest" + "k8s.io/client-go/transport" +) + +var ( + _ utilnet.TLSClientConfigHolder = &RoundTripper{} + _ http.RoundTripper = &RoundTripper{} +) + +var ( + statusScheme = runtime.NewScheme() + statusCodecs = serializer.NewCodecFactory(statusScheme) +) + +func init() { + statusScheme.AddUnversionedTypes(metav1.SchemeGroupVersion, + &metav1.Status{}, + ) +} + +// ConnectionHolder defines functions for structure providing +// access to the websocket connection. +type ConnectionHolder interface { + DataBufferSize() int + Connection() *gwebsocket.Conn +} + +// RoundTripper knows how to establish a connection to a remote WebSocket endpoint and make it available for use. +// RoundTripper must not be reused. +type RoundTripper struct { + // TLSConfig holds the TLS configuration settings to use when connecting + // to the remote server. + TLSConfig *tls.Config + + // Proxier specifies a function to return a proxy for a given + // Request. If the function returns a non-nil error, the + // request is aborted with the provided error. + // If Proxy is nil or returns a nil *URL, no proxy is used. + Proxier func(req *http.Request) (*url.URL, error) + + // Conn holds the WebSocket connection after a round trip. + Conn *gwebsocket.Conn +} + +// Connection returns the stored websocket connection. +func (rt *RoundTripper) Connection() *gwebsocket.Conn { + return rt.Conn +} + +// DataBufferSize returns the size of buffers for the +// websocket connection. +func (rt *RoundTripper) DataBufferSize() int { + return 32 * 1024 +} + +// TLSClientConfig implements pkg/util/net.TLSClientConfigHolder. +func (rt *RoundTripper) TLSClientConfig() *tls.Config { + return rt.TLSConfig +} + +// RoundTrip connects to the remote websocket using the headers in the request and the TLS +// configuration from the config +func (rt *RoundTripper) RoundTrip(request *http.Request) (retResp *http.Response, retErr error) { + defer func() { + if request.Body != nil { + err := request.Body.Close() + if retErr == nil { + retErr = err + } + } + }() + + // set the protocol version directly on the dialer from the header + protocolVersions := request.Header[wsstream.WebSocketProtocolHeader] + delete(request.Header, wsstream.WebSocketProtocolHeader) + + dialer := gwebsocket.Dialer{ + Proxy: rt.Proxier, + TLSClientConfig: rt.TLSConfig, + Subprotocols: protocolVersions, + ReadBufferSize: rt.DataBufferSize() + 1024, // add space for the protocol byte indicating which channel the data is for + WriteBufferSize: rt.DataBufferSize() + 1024, // add space for the protocol byte indicating which channel the data is for + } + switch request.URL.Scheme { + case "https": + request.URL.Scheme = "wss" + case "http": + request.URL.Scheme = "ws" + default: + return nil, fmt.Errorf("unknown url scheme: %s", request.URL.Scheme) + } + wsConn, resp, err := dialer.DialContext(request.Context(), request.URL.String(), request.Header) + if err != nil { + // BadHandshake error becomes an "UpgradeFailureError" (used for streaming fallback). + if errors.Is(err, gwebsocket.ErrBadHandshake) { + cause := err + // Enhance the error message with the error response if possible. + if resp != nil && len(resp.Status) > 0 { + defer resp.Body.Close() //nolint:errcheck + cause = fmt.Errorf("%w (%s)", err, resp.Status) // Always add the response status + responseError := "" + responseErrorBytes, readErr := io.ReadAll(io.LimitReader(resp.Body, 64*1024)) + if readErr != nil { + cause = fmt.Errorf("%w: unable to read error from server response", cause) + } else { + // If returned error can be decoded as "metav1.Status", return a "StatusError". + responseError = strings.TrimSpace(string(responseErrorBytes)) + if len(responseError) > 0 { + if obj, _, decodeErr := statusCodecs.UniversalDecoder().Decode(responseErrorBytes, nil, &metav1.Status{}); decodeErr == nil { + if status, ok := obj.(*metav1.Status); ok { + cause = &apierrors.StatusError{ErrStatus: *status} + } + } else { + // Otherwise, append the responseError string. + cause = fmt.Errorf("%w: %s", cause, responseError) + } + } + } + } + return nil, &httpstream.UpgradeFailureError{Cause: cause} + } + return nil, err + } + + // Ensure we got back a protocol we understand + foundProtocol := false + for _, protocolVersion := range protocolVersions { + if protocolVersion == wsConn.Subprotocol() { + foundProtocol = true + break + } + } + if !foundProtocol { + wsConn.Close() // nolint:errcheck + return nil, &httpstream.UpgradeFailureError{Cause: fmt.Errorf("invalid protocol, expected one of %q, got %q", protocolVersions, wsConn.Subprotocol())} + } + + rt.Conn = wsConn + + return resp, nil +} + +// RoundTripperFor transforms the passed rest config into a wrapped roundtripper, as well +// as a pointer to the websocket RoundTripper. The websocket RoundTripper contains the +// websocket connection after RoundTrip() on the wrapper. Returns an error if there is +// a problem creating the round trippers. +func RoundTripperFor(config *restclient.Config) (http.RoundTripper, ConnectionHolder, error) { + transportCfg, err := config.TransportConfig() + if err != nil { + return nil, nil, err + } + tlsConfig, err := transport.TLSConfigFor(transportCfg) + if err != nil { + return nil, nil, err + } + proxy := config.Proxy + if proxy == nil { + proxy = utilnet.NewProxierWithNoProxyCIDR(http.ProxyFromEnvironment) + } + + upgradeRoundTripper := &RoundTripper{ + TLSConfig: tlsConfig, + Proxier: proxy, + } + wrapper, err := transport.HTTPWrappersForConfig(transportCfg, upgradeRoundTripper) + if err != nil { + return nil, nil, err + } + return wrapper, upgradeRoundTripper, nil +} + +// Negotiate opens a connection to a remote server and attempts to negotiate +// a WebSocket connection. Upon success, it returns the negotiated connection. +// The round tripper rt must use the WebSocket round tripper wsRt - see RoundTripperFor. +func Negotiate(rt http.RoundTripper, connectionInfo ConnectionHolder, req *http.Request, protocols ...string) (*gwebsocket.Conn, error) { + // Plumb protocols to RoundTripper#RoundTrip + req.Header[wsstream.WebSocketProtocolHeader] = protocols + resp, err := rt.RoundTrip(req) + if err != nil { + return nil, err + } + err = resp.Body.Close() + if err != nil { + connectionInfo.Connection().Close() + return nil, fmt.Errorf("error closing response body: %v", err) + } + return connectionInfo.Connection(), nil +} diff --git a/vendor/modules.txt b/vendor/modules.txt index 67b71d5baa..5c320631da 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -97,6 +97,10 @@ github.com/cert-manager/cert-manager/pkg/apis/certmanager github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1 github.com/cert-manager/cert-manager/pkg/apis/meta github.com/cert-manager/cert-manager/pkg/apis/meta/v1 +github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/acme/v1 +github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/certmanager/v1 +github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/internal +github.com/cert-manager/cert-manager/pkg/client/applyconfigurations/meta/v1 # github.com/cespare/xxhash/v2 v2.3.0 ## explicit; go 1.11 github.com/cespare/xxhash/v2 @@ -203,6 +207,8 @@ github.com/containers/ocicrypt/keywrap/pkcs7 github.com/containers/ocicrypt/spec github.com/containers/ocicrypt/utils github.com/containers/ocicrypt/utils/keyprovider +# github.com/creack/pty v1.1.24 +## explicit; go 1.18 # github.com/cucumber/gherkin/go/v26 v26.2.0 ## explicit; go 1.19 github.com/cucumber/gherkin/go/v26 @@ -483,6 +489,9 @@ github.com/gorilla/handlers # github.com/gorilla/mux v1.8.1 ## explicit; go 1.20 github.com/gorilla/mux +# github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 +## explicit; go 1.20 +github.com/gorilla/websocket # github.com/gosuri/uitable v0.0.4 ## explicit github.com/gosuri/uitable @@ -606,6 +615,10 @@ github.com/mitchellh/reflectwalk # github.com/moby/locker v1.0.1 ## explicit; go 1.13 github.com/moby/locker +# github.com/moby/spdystream v0.5.0 +## explicit; go 1.13 +github.com/moby/spdystream +github.com/moby/spdystream/spdy # github.com/moby/sys/capability v0.4.0 ## explicit; go 1.21 github.com/moby/sys/capability @@ -637,6 +650,9 @@ github.com/monochromegane/go-gitignore # github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 ## explicit github.com/munnerz/goautoneg +# github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f +## explicit +github.com/mxk/go-flowrate/flowrate # github.com/nxadm/tail v1.4.11 ## explicit; go 1.13 # github.com/onsi/gomega v1.39.1 @@ -1020,13 +1036,17 @@ golang.org/x/mod/semver # golang.org/x/net v0.52.0 ## explicit; go 1.25.0 golang.org/x/net/context +golang.org/x/net/html +golang.org/x/net/html/atom golang.org/x/net/http/httpguts golang.org/x/net/http2 golang.org/x/net/http2/hpack golang.org/x/net/idna golang.org/x/net/internal/httpcommon golang.org/x/net/internal/httpsfv +golang.org/x/net/internal/socks golang.org/x/net/internal/timeseries +golang.org/x/net/proxy golang.org/x/net/trace golang.org/x/net/websocket # golang.org/x/oauth2 v0.36.0 @@ -1422,6 +1442,7 @@ k8s.io/apimachinery/pkg/util/duration k8s.io/apimachinery/pkg/util/errors k8s.io/apimachinery/pkg/util/framer k8s.io/apimachinery/pkg/util/httpstream +k8s.io/apimachinery/pkg/util/httpstream/spdy k8s.io/apimachinery/pkg/util/httpstream/wsstream k8s.io/apimachinery/pkg/util/intstr k8s.io/apimachinery/pkg/util/json @@ -1432,6 +1453,7 @@ k8s.io/apimachinery/pkg/util/mergepatch k8s.io/apimachinery/pkg/util/naming k8s.io/apimachinery/pkg/util/net k8s.io/apimachinery/pkg/util/portforward +k8s.io/apimachinery/pkg/util/proxy k8s.io/apimachinery/pkg/util/rand k8s.io/apimachinery/pkg/util/remotecommand k8s.io/apimachinery/pkg/util/runtime @@ -1446,6 +1468,7 @@ k8s.io/apimachinery/pkg/util/yaml k8s.io/apimachinery/pkg/version k8s.io/apimachinery/pkg/watch k8s.io/apimachinery/third_party/forked/golang/json +k8s.io/apimachinery/third_party/forked/golang/netutil k8s.io/apimachinery/third_party/forked/golang/reflect # k8s.io/apiserver v0.35.3 => k8s.io/apiserver v0.35.0 ## explicit; go 1.25.0 @@ -1846,11 +1869,14 @@ k8s.io/client-go/tools/leaderelection k8s.io/client-go/tools/leaderelection/resourcelock k8s.io/client-go/tools/metrics k8s.io/client-go/tools/pager +k8s.io/client-go/tools/portforward k8s.io/client-go/tools/record k8s.io/client-go/tools/record/util k8s.io/client-go/tools/reference k8s.io/client-go/tools/watch k8s.io/client-go/transport +k8s.io/client-go/transport/spdy +k8s.io/client-go/transport/websocket k8s.io/client-go/util/apply k8s.io/client-go/util/cert k8s.io/client-go/util/connrotation